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局部内部类的规则

  1. 无法从方法外部调用局部内部类。
  2. 局部内部类在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

标签: java, Java面试题, Java下载, java教程, java技术, Java学习, Java学习教程, Java语言, Java开发, Java入门教程, Java进阶教程, Java高级教程, Java笔试题, Java编程思想