Java局部内部类是指在一个方法或代码块内部定义的内部类。与成员内部类不同,局部内部类只能在定义它的方法或代码块内部使用,无法在外部访问。
public class Out {
/*属性和方法*/
private int outVariable = 1;
/*外部类定义的属性*/
private int commonVariable = 2;
/*静态的信息 */
private static int outStaticVariable = 3;
/*成员外部方法*/
public void outerMethod() {
System.out.println("我是外部类的outerMethod方法");
}
/*静态外部方法*/
public static void outerStaticMethod() {
System.out.println("我是外部类的outerStaticMethod静态方法");
}
/*成员方法,内部定义局部内部类*/
public void outerCreatMethod(int value) {
//public int a = 1; // 不行,局部内部类不能有访问权限修饰符
//static int a = 1; // 也不能有static 修饰
final int a = 1;
int a1 = 1; // 默认为final
/*女性*/
boolean sex = false;
//sex = true; // 有且仅有赋值一次
/*局部内部类,类前不能有访问修饰符*/
class In {
private int inVariable = 10;
private int commonVariable = 20;
/*局部内部类方法*/
public void InnerShow() {
System.out.println("innerVariable:" + inVariable);
//局部变量
System.out.println("是否男性:" + sex);
System.out.println("参数value:" + value);
//调用外部类的信息
System.out.println("outerVariable:" + outVariable);
System.out.println("内部的commonVariable:" + commonVariable);
System.out.println("外部的commonVariable:" + Out.this.commonVariable);
System.out.println("outerStaticVariable:" + outStaticVariable);
outerMethod();
outerStaticMethod();
}
}
//局部内部类只能在方法内使用
In in = new In();
in.InnerShow();
}
/* 开始程序 */
public static void main(String[] args) {
Out out = new Out();
out.outerCreatMethod(100);
}
}
总结:【抓住关键——作用域,作为方法的局部成员存在】
局部内部类不能有访问权限修饰符,无法创建静态信息。 局部内部类就像是方法里面的一个局部变量一样,是不能有访问权限修饰符和static修饰符的。
只能在方法内部使用。
可以直接访问方法内的局部变量和参数。【存在限制,需要 final 或有效的final修饰的】,但是不能更改。
①直接被final修饰的变量。
②已被赋值且始终未改变的变量(有且仅有赋值一次),引用指向不能改变。注:JDK8以前(不包括8)只能访问被final修饰的变量。
编译器也有自己独立的字节码文件,命名格式:外部类名字$数字内部类名字.class
注:当局部内部类的变量修改时,就会产生如下错误:
Variable ‘xxx’ is accessed from within inner class, needs to be final or effectively final
传入局部内部类所在方法的参数同理,如果一直不变则可使用,反之则会报错。