Java教程-Java局部内部类

Java局部内部类
在Java中,创建在方法内部的类称为局部内部类。局部内部类是定义在块内部的内部类。通常,这个块是一个方法体。有时这个块可以是一个for循环或一个if子句。局部内部类不是任何封闭类的成员。它们属于定义它们的块,因此局部内部类不能有任何与它们关联的访问修饰符。但是,它们可以被标记为final或abstract。这些类可以访问封闭它们的类的字段。
如果要调用局部内部类的方法,必须在方法内部实例化该类。
Java局部内部类示例
LocalInner1.java
public class localInner1{
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[]){
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));
}
}
规则:局部变量不能是private、public或protected。
Java局部内部类的规则
- 无法从方法外部调用局部内部类。
- 局部内部类在JDK 1.7之前无法访问非final局部变量。从JDK 1.8开始,可以在局部内部类中访问非final局部变量。
具有局部变量的局部内部类的示例
LocalInner2.java
class localInner2{
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[]){
localInner2 obj=new localInner2();
obj.display();
}
}
输出:
50