如这篇文章:http://android.blog.51cto.com/268543/384809 所示,通过反编译内部类的class文件,可知局部内部类只能访问final修饰的局部变量的原因。
下面是我自己动手试验:
- package com.cn.itcast;
- public class OuterTest {
- public static void main(String[] args) {
- new Outer().method(4);
- }
- }
- class Outer{
- private int i=3;
-
- public void method(final int y){
- final int beep=12;
- class Inner{
- public void function(){
- System.out.println(i);
- System.out.println(beep);
- System.out.println(y);
- }
- }
- new Inner().function();
- }
- }
复制代码 对于上述代码编译后产生的内部类字节码Outer$1Inner.class,进行反射,得到反编译代码如下:
- class com.cn.itcast.Outer$1Inner
- {
- com.cn.itcast.Outer$1Inner(com.cn.itcast.Outer,int);
- public void function();
- final com.cn.itcast.Outer this$0;
- private final int val$y;
- }
复制代码 我的疑问是:
为什么只有处于方法参数的局部变量y,内部类编译时产生了一个备份用的变量val$y;而处于方法内的局部变量beep却没有?
PS:反射的代码见参考文章的附件。
|
|