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就对了,是什么原因
因为内部类可以直接访问外部类的成员(变量和方法),所以代码二没问题
但是代码一中a是一个局部变量,局部变量是储存在栈内存中,当方法结束后(弹栈),这个变量就消失了(方法就消失了),所以内部了可能没办法读取到这个变量.只有加了final将这个变为常量,将这个a的值储存到方法区的常量池里面后,才能被访问到
顺便说下 如果你完全是自己照着imooc里面的教程学的,你估计看不懂我说的,因为imooc到第二季还没提到过内存方面的内容.(我也是不懂,自己找资料学的)