黑马程序员技术交流社区

标题: 局部内部类如何访问外部变量 [打印本页]

作者: 微凉的暮色    时间: 2015-6-29 18:37
标题: 局部内部类如何访问外部变量
本帖最后由 微凉的暮色 于 2015-6-29 18:39 编辑


package lianxi;
public class Outer {
        int num = 8;

        public void method(){
               
                 final int num = 5;//-->怎么访问这个
                  
                 class Inner{
                         int num = 3;
                         public void show(){
                                 System.out.println(num); //结果:3
                                 System.out.println(this.num); //结果:3
                                 System.out.println(Outer.this.num); //结果:8
                         }
                 }
        
                 Inner in = new Inner();
                 in.show();                  
        }
        public static void main(String[] args) {
                new Outer().method();
        }
        
}


作者: 琼琼~    时间: 2015-6-29 22:16
要么就换个变量名,有个帖子里说可以强转类型。

作者: 琼琼~    时间: 2015-6-29 23:19
this. 是本类中的num
除非换个名字,或者去掉本类中的num,用 System.out.println(num);访问
作者: 微凉的暮色    时间: 2015-6-30 08:04
琼琼~ 发表于 2015-6-29 23:19
this. 是本类中的num
除非换个名字,或者去掉本类中的num,用 System.out.println(num);访问 ...

:o 强转是怎么回事?
话说 class文件里是这样写 this.val$num 问题是这个奇怪的符号 怎么用java解释
作者: 微凉的暮色    时间: 2015-6-30 08:09
本帖最后由 微凉的暮色 于 2015-6-30 08:10 编辑
琼琼~ 发表于 2015-6-29 23:19
this. 是本类中的num
除非换个名字,或者去掉本类中的num,用 System.out.println(num);访问 ...
下面是翻遍过来的代码,可以说引用很齐全,就是不认识
  1. package lianxi;

  2. import java.io.PrintStream;

  3. public class Outer
  4. {
  5.   int num = 8;
  6.   int out_num = 8;

  7.   public void method()
  8.   {
  9.     int num = 5;
  10.     int method_num = 5;

  11.     1Inner in = new Object(method_num)
  12.     {
  13.       int num;
  14.       int in_num;

  15.       public void show()
  16.       {
  17.         int num = 1;
  18.         int show_num = 1;

  19.         System.out.println(num);
  20.         System.out.println(this.num);
  21.         System.out.println(Outer.this.num);
  22.         System.out.println(show_num);
  23.         System.out.println(this.in_num);
  24.         System.out.println(this.val$method_num);// [b]反编译的代码[/b]
  25.         System.out.println(Outer.this.out_num);
  26.       }
  27.     };
  28.     in.show(); }

  29.   public static void main(String[] args) {
  30.     new Outer().method();
  31.   }
  32. }
复制代码





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