内部类要点记录

内部类要点记录

编译

  1. 内部类只是一个编译时概念,一旦我们编译成功,就会成为完全不同的两个类。对于一个名为Outer的外部类和其内部定义的名为Inner的内部类。编译完成后会出现Outer.class和Outer$Inner.class两个类的字节码文件。
  2. Java程序从源文件创建到程序运行要经过两大步骤:1、源文件由编译器编译成字节码(ByteCode) 2、字节码由java虚拟机解释运行。因为java程序既要编译同时也要经过JVM的解释运行。所以编译比运行早。

综合以上,得出结论:内部类编译成class文件与new无关,new在jvm运行class文件时才起效。
所以会导致以下结果:

public class Out {
	      
    public void test(String a) {  
        class In{     
            public void function() {  
            	//下面的变量a会报这个错:
//Local variable a defined in an enclosing scope must be final or effectively final
                System.out.println(a);  
            }  
        }  
        a="hello";  
        new In().function();  
    }  
       
    public static void main(String[] args) {  
        new Out().test("hi");  
    }  

}

这样调用内部类方法时会造成外部类局部变量和内部类中对应的变量的不一致,导致代码报错。因此不能修改变量a的值.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值