问答详情
源自:7-8 Java 中的方法内部类

关于方法内部类的变量问题

在这种程序中有三层变量,分别是外部类中声明的成员变量、外部类的方法中的局部变量、该方法中的方法内部类中声明的该类的成员变量;

假设在该方法内部类中的方法对这三层变量都要调用:

1。要是这些变量都没有重名的,如何调用?

2、要是这三层的变量中都有重名的,如何调用并区分开?


提问者:wswzh0329 2015-10-05 00:52

个回答

  • 倔驴
    2015-10-06 11:14:57
    已采纳

    根据之前看到的关于成员变量和局部变量的介绍中我还看到了这样一句话“局部变量是在类的方法中定义,在方法中临时保存数据”,也就是说这个方法中的变量是临时性的,还有我看了其他人关于这方面的解答,他们是这样说的“

    方法中的变量是一个局部变量,局部变量是储存在栈内存中,当方法结束后(弹栈),这个变量就消失了(方法就消失了),所以内部类可能没办法读取到这个变量.顺便说下 如果你完全是自己照着imooc里面的教程学的,你估计看不懂我说的,因为imooc到第二季还没提到过内存方面的内容.(我也是不懂,自己找资料学的)

    我想他的意思也就是那个方法中的变量可能就是一个临时变量,数据不能一直保存,所以方法内部类无法调用吧,我是这么理解的,希望能帮到你。

  • wswzh0329
    2015-10-06 11:37:53

    。。这是我自己在eclipse上面尝试的结果

    package com.shiyan2;


    import com.shiyan3.Test.Inner;


    public class Shiyan {


    /* //普通方法中的内部类的调用

        static int a=2;     //可以通过(Shiyan.this.a)和(Shiyan.a)和(new Shiyan().a)调用;要是没有相同的还能用(a)来调用

       int b=7;     //普通变量     可以通过(Shiyan.this.b)和(new Shiyan().b)来调用;要是没有相同的话可以用(b)来调用;

       

       public void print(){

     int b=2;              //方法中的变量不能设为public

     //该如何调用??????????

     class Inner{

     public int  c=4; //方法内部类中的成员变量可以设置为public

         public int b=6;  //(this.b)和(new Inner().b)来调用

     public void print(){

      int d=4; 

      int c=5;//为什么默认的friendly可以,更加私有的private不可以,只能用final????????

     System.out.println(new Shiyan().a);

     System.out.println(Shiyan.this.b);

     System.out.println(this.c);

     System.out.println(d);

     }

     

     }

    Inner in=new Inner();

    in.print();

      

       }*/


    /*//静态方法中的内部类    注:内部类中的方法只能是普通方法

    public int a=1;      //只能(new Shiyan().a)来调用

    public static int A=3;//(Shiyan.A)和(new Shiyan().A)和(Shiyan.this.A) 要是没有相同的还能用(A)

    public static void print(){

    int b=2;      //位移的变量形式,要么设为final常量

    //要是有相同的b,如何取这个b的值??????????????????

    class Inner{

    public  int c=8;    //只能是普通方法

                      //(this.c)和(new Inner().c)来调用;要是没有相同的,还能(c);

    public  void print(){   //只能是普通方法,静态方法就会报错!

    int d=4;   //唯一的变量形式,理由跟上面的b相同

    int c=4;

    System.out.println(Shiyan.this.A);  //为什么可以用?

    System.out.println(b);

    System.out.println(this.c);

    System.out.println(d);

    }

    }

    Inner in=new Inner();

    in.print();

    }

    */

    //测试类

    /*

       public static void main(String[] args) {

    Shiyan test=new Shiyan();

    test.print();

    }*/

    }


  • 倔驴
    2015-10-06 11:33:53

    恩恩,你说的对,我再去找书看看去,你要是找到了麻烦记得告诉我一下,谢了哈!

  • 倔驴
    2015-10-06 01:15:17

    我是根据你的问题自己敲代码试的,所以可能有些不对的还请见谅。

    1,如果三层变量都不相同,可以直接调用,如:a,b,c,则直接+a,+b,+c,即可。

    2,如果三层变量都为a,在调用时如果只写+a,则只会调用该方法的方法内部类中声明的该类的成员变量,也就是最底下那层,如果想调用外部类中声明的变量,则可以使用:(外部类名.this.变量名)这种形式即可,但是调用外部方法中的局部变量我也不知道了,希望有其他大神看到了能帮忙解决一下。