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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈圳 高级黑马   /  2013-2-23 22:22  /  1615 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Outer
  2. {
  3.         private int num=3;
  4.         void method()
  5.         {
  6.                 final int nums=4;
  7.                 class Inner
  8.                 {
  9.                         private int num=5;
  10.                         void show()
  11.                         {
  12.                                 int num=6;
  13.                                 System.out.println(num);
  14.                                 System.out.println(this.num);
  15.                                 System.out.println(Outer.this.num);
  16.                                 System.out.println(nums);
  17.                         }
  18.                 }
  19.                 Inner in=new Inner();
  20.                 in.show();
  21.         }
  22. }
  23. class Demo
  24. {
  25.         public static void main(String[] args)
  26.         {
  27.                 new Outer().method();
  28.         }
  29.                
  30. }
复制代码
内部类可以存放在局部位置上。
内部类在局部位置上只能访问局部中被final修饰的局部变量。

刚写日记汇总内部类知识的时候,看到了知识点局部内部类只能访问局部中被方法访问的局部变量.然后我在类中各个地方都加入了同名变量.num并赋不同的值.
Outer.this.num=3;
this.num=5;
num=6;
被final修饰的局部变量.如果没有this.num是可以访问的,但是加入了就没办法访问了.程序不报错,但是除了改名以外,始终没有任何办法能访问到被final修饰的变量.
大家看下.

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
本帖最后由 刘圣繁 于 2013-3-1 10:23 编辑

不是说有两个同名变量的话 内部类必须刻意的去找 那个final变量访问 而是说局部内部类如果要想访问局部的变量的话那么此变量必须是fnal类型的  访问本类的成员变量当然不用final  这个final没关系  你这两个变量同名了就变成这种情况了
这是个局部变量作用范围问题 举例说明
函数里面有个内部类 内部类里面有个函数  姑且这就好比下面这个例子
public  void show(){
        int num=3;
        for(int j=0;j<5;j++)
        {
         int num=9;
         System.out.print("我是谁的变量?  请看我的值num="+num);
         }
    }
这里有两个num   for循环输出语句打印的是99999  即在for循环里面  当访问到num的时候  会先找for循环里面时候有这个变量 没有的话再去for外面找  
里面这个num将外面那个num覆盖了
回复 使用道具 举报
你这个是局部内部类方法中的局部变量和外部类中的方法同名了。会优先调用离它近的局部变量
回复 使用道具 举报
学习了,,,
回复 使用道具 举报
学习学习,大家多交流哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马