⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 staticintancelocalclass.java

📁 java程序设计教程的源码
💻 JAVA
字号:
//【例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 + -