📄 a07631881c75001d1dddb6604daa6ad2
字号:
//【例4-23】 静态局部类和实例局部类的定义、访问控制、约束与引用。
//程序清单4-23: StaticIntanceLocalClass.java
package e4_23;
public class StaticIntanceLocalClass {
public static void main(String[] args) {
Outer outer = new Outer();
outer.intanceMethod();// 实例名.实例方法()
Outer.staticMethod();// 类名.静态方法()
// 局部类所在代码块或方法体以外的地方不可见
// new Outer().new Inner1();
}
}
class Outer {
private int x;
private static int y;
// 在外部类的实例代码块中定义实例局部类
{// 实例初始化代码块
int lx = 0;
final int ly = 1;
class Inner1 {// 实例局部类
public void InnerM1() {
x = 1;// 实例局部类能直接访问外部类的成员变量
Outer.this.y = 10;// 可用"OuterClass.this"获得外部类的实例
// 在实例局部类所在代码块中,不能访问非final类型的局部变量
// System.out.print(lx);
// 在实例局部类所在代码块中,能访问final类型的局部变量
System.out.println("在实例局部" + this.getClass()
+ "中访问其代码块中的final int ly = " + ly);
System.out.println("在实例局部" + this.getClass()
+ "中访问Outer类中的private static int y = " + y);
System.out.println("在实例局部" + this.getClass()
+ "中访问Outer类中的private int x = " + x);
}
}
// 只能在方法体或代码块中创建局部类例,且创建的实例也只能在局部域中被访问。
new Inner1().InnerM1();
// 局部类不能加访问控制修饰符public、protected、private
// public class inner2 { }
}
// 在外部类的静态代码块中定义静态局部类
static {// 静态初始化代码块
class Inner2 {// 静态局部类
public Inner2() {
// 静态局部类只能访问外部类的静态变量和静态方法
y = 100;
staticMethod();
// 静态局部类不能访问外部类的实例变量和实例方法,
// x = 2;
// intanceMethod();
System.out.println("在静态局部" + this.getClass()
+ "中访问Outer类中的private static int y = " + y);
}
}
// 只能在方法体或代码块中创建局部类例,且创建的实例也只能在局部域中被访问。
new Inner2();
}
public void intanceMethod() {// 在外部类的实例方法中定义实例局部类
class Inner4 {// 实例局部类的嵌套定义
// new Inner3();
}
class Inner3 {
class Inner4 {// 实例局部类的嵌套定义
public Inner4() {
System.out.println("在嵌套实例局部" + this.getClass()
+ "中访问Outer类中的private static int y = " + y);
}
}
}
// 局部类只在其所在代码块域或方法域中可见
// Outer.Inner2 inner2;
new Inner3().new Inner4();
}
static void staticMethod() {
class Inner4 {// 在外部类的静态方法中定义静态局部类
public Inner4() {
y = 200;// 静态局部类只能访问外部类的静态变量和静态方法
System.out.println("在静态局部" + this.getClass()
+ "中访问Outer类中的private static int y = " + y);
// 静态局部类不能访问外部类的实例变量和实例方法,
// x = 2;
// intanceMethod();
}
}
new Inner4();
// 接口不能定义成局部类
// interface I { }
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -