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

方法内部类中有关变量的问题

1.首先在一个方法内部类中,定义常量变量输出都是对的,但是如果在外部的方法中定义变量,然后在内部类中输出为什么会报错呢?

2.定义变量在外部类下和方法里会对方法内部类有什么不同影响吗?

3.具体代码如下

代码一:public class HelloWorld {                            

 public void show(){
 int a=1;  int b=2;
  class Inner{
   int c=3;
   public void print(){
    System.out.println("外部变量a"+a);
    System.out.println("内部变量"+c);
  }}
        Inner i=new Inner();
    i.print (); }
   public static void main(String[] args) {
  HelloWorld m=new HelloWorld();
m.show();
 }}

 代码二:public class HelloWorld {
       int a=1;int b=2;
        public void show(){
 class Inner{
   int c=3;
   public void print(){
    System.out.println("外部变量a"+a);
    System.out.println("内部变量"+c);
  }}
        Inner i=new Inner();
    i.print ();}
   public static void main(String[] args) {
  HelloWorld m=new HelloWorld();
m.show();}}

代码一划线处是错的。代码二则正确,并且代码一将int a=1改成final int a=1就对了,是什么原因

正在回答

2 回答

因为内部类可以直接访问外部类的成员(变量和方法),所以代码二没问题

但是代码一中a是一个局部变量,局部变量是储存在栈内存中,当方法结束后(弹栈),这个变量就消失了(方法就消失了),所以内部了可能没办法读取到这个变量.只有加了final将这个变为常量,将这个a的值储存到方法区的常量池里面后,才能被访问到

顺便说下 如果你完全是自己照着imooc里面的教程学的,你估计看不懂我说的,因为imooc到第二季还没提到过内存方面的内容.(我也是不懂,自己找资料学的)

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

举报

0/150
提交
取消

方法内部类中有关变量的问题

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