全局变量与局部变量的极其问题

toto2004 2004-09-14 12:21:43
代码如下 在Scoping 类中有个全局变量x
import java.awt.Graphics;
import java.applet.Applet;

public class Scoping extends Applet {
int x=1; //全局变量

public void paint(Graphics g) {
g.drawString("See command line for output", 25, 25 );
int x=5; //局部变量
System.out.println("local x in paint is "+x);
a(); //为什么a()方法中的x变量是用的Scoping 类中定义的全局变量x,
b();
a();
b();
System.out.println("\nlocal x in paint is "+x);

}

void a() {
int x=25;
System.out.println("\nlocal x in a is "+x+" after entering a");

++x;
System.out.println("local x in a is "+x+" before exiting a");
}

void b() {
System.out.println("\ninstance variable x is "+x+" on entering b");

x*=10;
System.out.println("\ninstance variable x is "+x+" on entering b");
}
}

程序输出如下:

local x in paint is 5

local x in a is 25 after entering a
local x in a is 26 before exiting a

instance variable x is 1 on entering b

instance variable x is 10 on entering b

local x in a is 25 after entering a
local x in a is 26 before exiting a

instance variable x is 10 on entering b

instance variable x is 100 on entering b

local x in paint is 5

如上代码所示a()方法在public void paint(Graphics g){}中而paint中已定义了个局部的变量x,那么为什么在paint中a()方法的中的x没给屏蔽掉而还是用的那个全局变量,是不是a()在paint外定义的缘故呢??
...全文
150 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
redlaputa 2004-09-14
  • 打赏
  • 举报
回复
a()调用的是他自己的int x=25;
没调用int x=1; //全局变量

很简单的问题啊
toto2004 2004-09-14
  • 打赏
  • 举报
回复
to redlaputa(吾心如秋思,爱随雨后归)
可能误会我的意思了,简单点问吧为什么在paint方法中第一个b()中的
System.out.println("\ninstance variable x is "+x+" on entering b");
输出的x是 1 而不是 paint()中定义的 5 呢?

to lecy(阿德)那为什么b()在paint()中了还用的是全局变量呢?
lecy 2004-09-14
  • 打赏
  • 举报
回复
a用的是局部变量
b用的是全局变量
其实在b里完全可用this.x
都是程序员自己给自己找的,为什么自己不写清楚点呢?
redlaputa 2004-09-14
  • 打赏
  • 举报
回复
x*=10;
晕,这句话不是定义
只是个运算而已
如果是定义,前面要加定义关键字int
应该这样

int x=(this.x*=10);
toto2004 2004-09-14
  • 打赏
  • 举报
回复
对了我问错了是应该是b()方法,在public void paint(Graphics g){}中而paint中已定义了个局部的变量x,那么为什么在paint中b()方法的中的x没给屏蔽掉而还是用的那个全局变量,是不是b()在paint外定义的缘故呢??
ema 2004-09-14
  • 打赏
  • 举报
回复
一个方法中的变量对另一个方法不可见,只在方法内有用,另一个方法无法调用,这样做是有好处,利于封装,以后更改了某个方法,如果是个独立的话,也不会对程序其他块有什么影响。对这题而言也就是a(),b()要么使用自己的x,要么使用全局变量中的x,对于b()方法而言,如果没有int x=1; //全局变量这一行,编译不会通过的。
toto2004 2004-09-14
  • 打赏
  • 举报
回复
up

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧