黑马程序员技术交流社区
标题:
关于变量自增的问题
[打印本页]
作者:
刘海东
时间:
2013-4-26 07:58
标题:
关于变量自增的问题
本帖最后由 刘海东 于 2013-4-26 13:38 编辑
在学习图形化界面设计时,遇到的:
count的位置定义在不同的位置上,得到的结果不一样。
f.addMouseListener(new MouseAdapter(){
public void mouseEntered(MouseEvent e){
int count = 1;
System.out.println("鼠标进入"+ count++);
}
});
复制代码
打印的是:
鼠标进入1
鼠标进入1
鼠标进入1
鼠标进入1
鼠标进入1
而这个位置上:
f.addMouseListener(new MouseAdapter(){
private int count = 1;
public void mouseEntered(MouseEvent e){
System.out.println("鼠标进入"+ count++);
}
});
复制代码
得到的结果却是:
鼠标进入1
鼠标进入2
鼠标进入3
鼠标进入4
鼠标进入5
作何解释???
作者:
李德全
时间:
2013-4-26 08:12
上面那个每次使用时都要int count = 1 一次,使用后就释放了。
下面那个只是第一次使用时定义一次count,之后就++了。
作者:
李德全
时间:
2013-4-26 08:16
李德全 发表于 2013-4-26 08:12
上面那个每次使用时都要int count = 1 一次,使用后就释放了。
下面那个只是第一次使用时定义一次count,之 ...
我是新手,但是猜测你这个程序是检测鼠标点击的,你上面那个每次鼠标动作,都会调用mouseEntered,所以就会定义并赋值1.一调用就改变不了count这个哥们为1的命运。
下面那个就不一样了。老总没有说你这一辈子就这样了。给了这个count一个基础——1,将来发展,就得看鼠标这个哥们给力不给力了。
作者:
harborbest
时间:
2013-4-26 08:28
其实你这是一个匿名内部类,
f.addMouseListener(new MouseAdapter(){
public void mouseEntered(MouseEvent e){
//如果在这里定义一个变量,他的作用域就在mouseEntered(MouseEvent e)方法里,当调用这个方法的时候,这个局部变量就会被释放,虽然它也累加了。
int count = 1;
System.out.println("鼠标进入"+ count++);
}
});
复制代码
f.addMouseListener(new MouseAdapter(){
//如果在这里定义一个变量,他的作用域就在 new MouseAdapter()匿名类里,当调用完这个方法的时候,这个成员变量是不会被释放的。
int count = 1;
public void mouseEntered(MouseEvent e){
System.out.println("鼠标进入"+ count++);
}
});
复制代码
其实这个问题是一个成员变量和局部变量作用域的思考!
作者:
袁梦希
时间:
2013-4-26 10:57
如果有问题了 请及时结贴,把帖子的类型改成“已解决”。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2