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

📄 staticmemberclass.java

📁 java程序设计教程的源码
💻 JAVA
字号:
//【例4-21】  静态成员类的定义、访问控制、约束与引用。
//程序清单4-21:  StaticMemberClass.java
package e4_21;

public class StaticMemberClass {// 主类
	public static void main(String[] args) {
		// 可直接通过外部类名引用静态成员类:new 外部类名.内部类构造方法( )
		Outer.Inner1 inner1 = new Outer.Inner1();
		Outer.Inner2 inner2 = new Outer.Inner2();
		// 不能使用外部类的实例引用静态成员类
		// Outer.Inner2 inner2 = new Outer().new Inner2();
		new Test();
		// 嵌套静态成员类的使用
		Outer.Inner3.Inner4 inner4 = new Outer.Inner3.Inner4();
		// 调用外部类实例方法
		new Outer().instanceMethod();
	}
}

class Test {
	public Test() {
		// 成员类的访问控制与成员方法、成员变量的访问控制相同,见表4-2
		// 默认成员类可跨类引用
		Outer.Inner3 inner3 = new Outer.Inner3();
		// 私有成员类只在其外部类中可见,不能跨类引用
		// Outer.Inner5 inner5 = new Outer.Inner5();
	}
}

class Outer {// 外部类
	private int x = 10;

	private static int y = 100;

	// ①静态成员类能定义于外部类的顶层代码
	public static class Inner1 {// 公有静态成员类
		public Inner1() {
			// 静态成员类能直接访问外部类的静态方法和静态变量
			staticMethod();
			System.out.println("外部类Outer的静态变量y = " + y);
			// 静态成员类不能直接访问外部类的实例方法和实例变量
			// instanceMethod();
			// System.out.println("外部类Outer的静态变量x = " + x);
			System.out.println("静态成员类Inner1的反射是:" + this);
			// 静态成员类不能使用"外部类.this",实例成员类则可以使用之
			// System.out.println("外部类Outer的反射是:" + Outer.this);
		}
	}

	protected static class Inner2 {// 保护静态成员类
		public Inner2() {
			System.out.println("静态成员类Inner2的反射是:" + this);
		}
	}

	static class Inner3 {// 默认静态成员类
		// ②静态成员类能定义于外部类的其他静态成员类的顶层代码中(嵌套定义)
		public static class Inner4 {
			public Inner4() {
				System.out.println("嵌套静态成员类Inner4的反射是:" + this);
			}
		}

		public Inner3() {
			System.out.println("静态成员类Inner3的反射是:" + this);
		}
	}

	private static class Inner5 {// 私有静态成员类
		public Inner5() {
			System.out.println("静态成员类Inner5的反射是:" + this);
		}
	}

	private static void staticMethod() {// 外部类静态成员方法
		// ③静态成员类不能定义于外部类的成员方法
		// static class Inner6 { }
		// 静态方法中不能使用"外部类.this",实例方法中则可以使用之
		// System.out.println("外部类Outer的反射是:" + Outer.this);
	}

	void instanceMethod() {// 外部类实例成员方法
		// 嵌套静态成员类的使用
		Inner3.Inner4 inner4 = new Inner3.Inner4();
		// 私有静态成员类只在其所在的外部类中被访问
		Inner5 inner5 = new Inner5();
		// 在实例方法中能使用"外部类.this",求得外部类的反射值
		System.out.println("外部类Outer的反射是:" + Outer.this);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -