目录
- 1. 静态内部类
- 2. 获取静态内部类对象
- 3. 静态内部类只能访问外部类的静态成员
- 4. 成员内部类 vs 静态内部类
1. 静态内部类
静态内部类:被static 修饰的内部类
class OutClass{
int a;
private int b;
public static int c;
public void print(){
System.out.println("OutClass");
}
//静态内部类
static class InnerClass{
int a;
int d;
private int e;
public void print(){
System.out.println("InnerClass");
}
}
}
2. 获取静态内部类对象
静态内部类的创建不需要外部类对象
public static void main(String[] args) {
OutClass.InnerClass in = new OutClass.InnerClass();
}
3. 静态内部类只能访问外部类的静态成员
Error❌:
class OutClass{
int a = 10;
class InnerClass{
System.out.println(a);
}
}
静态成员成员都是在加载类的时候就创建好的 , 非静态成员依赖对象的创建 , 因为静态内部类需要不外部类对象就可以 创建,没有外部类对象,所以只能也访问静态成员。
class OutClass{
int a = 1;
private int b = 2;
public static int c = 3;
public void print(){
System.out.println("OutClass");
}
static class InnerClass{
int d = 4;
int e = 5;
private int f = 6;
public void print(){
System.out.println("InnerClass");
System.out.println(c);
System.out.println(d);
System.out.println(e);
System.out.println(f);
}
}
}
但也不是完全不能访问,在静态内部类中创建个外部类对象,通过对象.成员名访问。
class OutClass{
int a = 1;
private int b = 2;
public static int c = 3;
public void print(){
System.out.println("OutClass");
}
static class InnerClass{
public void print(){
System.out.println("InnerClass");
OutClass out = new OutClass();
System.out.println(out.a);
System.out.println(out.b);
System.out.println(c);
}
}
}
4. 成员内部类 vs 静态内部类
| 修饰 | 无 static | static |
| 属于 | 外部类对象 | 外部类 |
| 创建 | out.new Inner() | new OutClass.Inner() |
| 是否需要外部对象 | 需要 | 不需要 |
| 能访问外部实例变量 | ✅ | ❌ |
| 能访问外部静态变量 | ✅ | ✅ |
| 能定义 static 成员 | ❌(常量除外) | ✅ |





