黑马程序员技术交流社区

标题: 关于变量自增的问题 [打印本页]

作者: 刘海东    时间: 2013-4-26 07:58
标题: 关于变量自增的问题
本帖最后由 刘海东 于 2013-4-26 13:38 编辑

在学习图形化界面设计时,遇到的:
count的位置定义在不同的位置上,得到的结果不一样。
  1. f.addMouseListener(new MouseAdapter(){
  2.           public void mouseEntered(MouseEvent e){
  3.                                 int count = 1;
  4.                                 System.out.println("鼠标进入"+ count++);
  5.                         }
  6.                 });
复制代码
打印的是:
鼠标进入1
鼠标进入1
鼠标进入1
鼠标进入1
鼠标进入1

而这个位置上:
  1.                 f.addMouseListener(new MouseAdapter(){
  2.                         private int count = 1;
  3.                         public void mouseEntered(MouseEvent e){
  4.                                System.out.println("鼠标进入"+ count++);
  5.                         }
  6.                 });
复制代码
得到的结果却是:
鼠标进入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
其实你这是一个匿名内部类,
  1. f.addMouseListener(new MouseAdapter(){
  2. public void mouseEntered(MouseEvent e){
  3. //如果在这里定义一个变量,他的作用域就在mouseEntered(MouseEvent e)方法里,当调用这个方法的时候,这个局部变量就会被释放,虽然它也累加了。
  4. int count = 1;
  5. System.out.println("鼠标进入"+ count++);
  6. }
  7. });
复制代码
  1. f.addMouseListener(new MouseAdapter(){
  2. //如果在这里定义一个变量,他的作用域就在 new MouseAdapter()匿名类里,当调用完这个方法的时候,这个成员变量是不会被释放的。
  3. int count = 1;
  4. public void mouseEntered(MouseEvent e){
  5. System.out.println("鼠标进入"+ count++);
  6. }
  7. });
复制代码
其实这个问题是一个成员变量和局部变量作用域的思考!

作者: 袁梦希    时间: 2013-4-26 10:57
如果有问题了   请及时结贴,把帖子的类型改成“已解决”。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2