首页 > 技术文章 > 静态内部类:

baby-zhude 2018-01-13 17:14 原文

1、用static修饰的内部类,称为静态内部类,完全属于外部类本身,不属于外部类某一个对象

2、static关键字的作用是把修饰的成员变成类相关,而不是实例相关

3、静态内部类可以包含静态成员,也可以包含非静态成员

4、静态类内部不可以访问外部类的实例成员,只能访问外部类的类成员,即使是静态内部类的实例方法也不能访问外部类的实例成员,只能访问外部类的静态成员

5、外部类不可以定义为静态类,Java中静态类只有一种,那就是静态内部类,顶级类不能用static 修饰

public class StaticClassW{
	private int a=5;
	private static int b=10;
	
	private static class StaticClassN{
		public static int c=20;
		public int d=30;
		public static void print(){
			//-下面代码会报错,静态内部类不能访问外部类实例成员
			//System.out.println(a);

			//-静态内部类只可以访问外部类类成员
			System.out.println(b);
		}

		public void printA(){
			System.out.println(d);
		}
	}

	private static class StaticClassNN{
		public int d=40;

		public void printA(){
			System.out.println(d);
		}
	}

	public static void main(String[] args){
		//-要想访问静态内部类的实例成员,需先创建实例对象,才可以调用,因为实例成员是属于实例的
		StaticClassN sc=new StaticClassN();
		sc.printA();

		StaticClassNN sc1=new StaticClassNN();
		sc1.printA();
		
		//-访问静态内部类的类成员,可以直接由该类访问,因为类成员是属于类的
		StaticClassN.print();
		System.out.println(StaticClassN.c);

		//-要想访问静态内部类的实例成员,需先创建实例对象,才可以调用,因为实例成员是属于实例的,下面代码编译就会报错
		//StaticClassN.printA();
		
	}
}

 编译结果:

 运行结果:

注:编译结果中$1.class为匿名类

推荐阅读