📜  Java Local内部类

📅  最后修改于: 2020-09-26 09:28:28             🧑  作者: Mango

Java Local内部类

在方法内部创建的类在Java中称为本地内部类。如果要调用本地内部类的方法,则必须在方法内部实例化此类。

Java本地内部类示例

public class localInner1{
 private int data=30;//instance variable
 void display(){
  class Local{
   void msg(){System.out.println(data);}
  }
  Local l=new Local();
  l.msg();
 }
 public static void main(String args[]){
  localInner1 obj=new localInner1();
  obj.display();
 }
}

输出:

30

编译器生成的内部类

在这种情况下,编译器将创建一个名为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));
    }
}

规则:局部变量不能是私有的,公共的或受保护的。

Java Local Inner类的规则

1)本地内部类不能从方法外部调用。
2)局部内部类在JDK 1.7之前不能访问非最终局部变量。从JDK 1.8开始,可以在局部内部类中访问非最终局部变量。

具有局部变量的局部内部类的示例

class localInner2{
 private int data=30;//instance variable
 void display(){
  int value=50;//local variable must be final till jdk 1.7 only
  class Local{
   void msg(){System.out.println(value);}
  }
  Local l=new Local();
  l.msg();
 }
 public static void main(String args[]){
  localInner2 obj=new localInner2();
  obj.display();
 }
}

输出:

50