java内部类和静态内部类的区别

时间:2023-03-11 15:01:14

1 相同点

使用的时候,import的时候,除了包名,还要带外部类。

2 不同点

2.1 对象创建的方式不同

静态内部类创建对象的时候,独立于外部类及其对象,就好像它是一个独立的类,可以和外部类一样使用。

内部类创建对象的时候,不能独立于外部类,必须要先创建外部类的对象,然后再用这个对象来new出内部类的对象。

2.2 内部类不可以有非常量的静态成员

原因很简单,静态成员可以不依赖于对象使用,如果内部类有静态成员的话,就相当于外部类对象直接调用内部类的静态成员,一个是对象,一个是类,不伦不类的。

所以,要给内部类的定义静态成员,必须要使用静态内部类。

报错

The field instance cannot be declared static in a non-static inner type, unless initialized with a constant expression

就算是内部类用了静态的常量,也没有什么用,在外面也不能脱离了内部类对象访问。