为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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

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

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


正在回答

4 回答

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

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

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

0 回复 有任何疑惑可以回复我~
#1

wswzh0329 提问者

。。局部变量是临时性的没错,但是类在方法中,调用那个局部变量的时候也是属于在方法的执行中吧,方法没有结束,这个局部变量还是应该存在的?
2015-10-06 回复 有任何疑惑可以回复我~
#2

wswzh0329 提问者

。。还有 如果其他三层的变量中没有相同的变量名,在内部类方法中直接用(变量名)就能调用那个局部变量了不是吗?说明应该是能够被内部类调用的!
2015-10-06 回复 有任何疑惑可以回复我~
#3

wswzh0329 提问者

非常感谢!
2015-10-18 回复 有任何疑惑可以回复我~
#4

wswzh0329 提问者

。。不知道你搞懂没,现在回来看发现能够理解回答你的那个人说的了,方法中的局部变量在这个方法执行完毕之后就消失了,但是内部类或者说内部类的对象仍然存在,只要还有引用指向这个内部类对象,那么该对象就不会被释放,而此时要用到的局部变量已经不存在了,所以就会出错!只有final的局部变量的作用域跟该类的作用域一样!
2015-10-18 回复 有任何疑惑可以回复我~
查看1条回复

。。这是我自己在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();

}*/

}


0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~
#1

wswzh0329 提问者

。。你有找到答案吗
2015-10-06 回复 有任何疑惑可以回复我~

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

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

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

0 回复 有任何疑惑可以回复我~
#1

wswzh0329 提问者

。。非常感谢你的解答! 其实今天回头一想发现有四层变量,外部类的成员变量、方法中的局部变量、该方法中的内部类的成员变量、内部类的方法中的局部变量, 不过类内的变量调用应该跟前面学到的一样调用,就是在类内部成员变量跟局部变量的调用; 然后外部类的成员变量应该(是new Outer().变量名)和(外部类名.this.变量名)都可以; 剩下的外部类方法中的局部变量还是调用不出来。。。
2015-10-06 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信