A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘海东 中级黑马   /  2013-4-26 07:58  /  1248 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘海东 于 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
作何解释???

评分

参与人数 2技术分 +1 黑马币 +20 收起 理由
时国虎 + 20 赞一个!
黄玉昆 + 1

查看全部评分

4 个回复

倒序浏览
上面那个每次使用时都要int count = 1  一次,使用后就释放了。
下面那个只是第一次使用时定义一次count,之后就++了。

评分

参与人数 1技术分 +2 收起 理由
黄玉昆 + 2

查看全部评分

回复 使用道具 举报
李德全 发表于 2013-4-26 08:12
上面那个每次使用时都要int count = 1  一次,使用后就释放了。
下面那个只是第一次使用时定义一次count,之 ...

我是新手,但是猜测你这个程序是检测鼠标点击的,你上面那个每次鼠标动作,都会调用mouseEntered,所以就会定义并赋值1.一调用就改变不了count这个哥们为1的命运。
下面那个就不一样了。老总没有说你这一辈子就这样了。给了这个count一个基础——1,将来发展,就得看鼠标这个哥们给力不给力了。
回复 使用道具 举报
其实你这是一个匿名内部类,
  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. });
复制代码
其实这个问题是一个成员变量和局部变量作用域的思考!

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
如果有问题了   请及时结贴,把帖子的类型改成“已解决”。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马