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

来源:7-8 Java 中的方法内部类

勤奋学习的kid

2015-09-25 13:08

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就对了,是什么原因

写回答 关注

1回答

  • 天启之魂
    2015-09-25 13:52:02

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

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

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

Java入门第二季 升级版

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

530560 学习 · 6091 问题

查看课程

相似问题