Java局部内部类

1 什么是Java局部内部类

Java语言中,在方法内部创建的类称为局部内部类。如果要调用局部内部类的方法,则必须在方法内部实例化这个类。

2 Java局部内部类的例子

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * Java局部内部类的例子
 */
public class Demo{
    private int data=30;//成员变量
    void display(){
        //局部内部类
        class Local{
            void msg(){System.out.println(data);}
        }
        Local l=new Local();
        l.msg();
    }
    public static void main(String args[]){
        Demo obj=new Demo();
        obj.display();
    }
}

输出结果为:

30

3 Java局部内部类工作原理

Java局部内部类的原理是,Java编译器将创建一个名为Simple$1Local的类,该类具有外部类的引用。反编译后的源码如下:

import java.io.PrintStream;  

class localInner1$Local  
{  
    final localInner1 this$0;  
    localInner1$Local()  
    {     
        super();  
        this$0 = Simple.this;  
    }  
    void msg()  
    {  
        System.out.println(localInner1.access$000(localInner1.this));  
    }  
}  

注意:局部变量不能是private,public或protected。

4 Java局部内部类的使用规则

  • 局部内部类不能从方法外部调用。
  • 局部内部类在JDK1.7之前不能访问非final的局部变量。从JDK1.8开始,可以在局部内部类中访问非final局部变量。

5 带有局部变量的局部内部类

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * 带有局部变量的Java局部内部类的例子
 */
class Demo{

    private int data=30;//成员变量

    void display(){
        int value=50;//仅在jdk 1.7之前,局部变量必须是final

        class Local{
            void msg(){System.out.println(value);}
        }

        Local l=new Local();
        l.msg();
    }

    public static void main(String args[]){
        Demo obj=new Demo();
        obj.display();
    }
}

输出结果为:

50

 

推荐好课