Java学习笔记——静态内部类使用及意义
1、内部类
内部类是定义在另外一个类中的类,主要原因有:
内部类方法可以访问该类定义所在的作用域中的数据,包括私有的数据
内部类可以对同一个包的其他类隐藏
2、静态内部类和非静态内部类最大的区别是:
非静态内部类编译后隐式保存着外部类的引用(就算外部类对象没用了也GC不掉),但是静态内部类没有。
3、静态内部类
在 Java 中,静态内部类(Static Inner Class)是定义在另一个类内部的类,并且使用static关键字修饰。它有以下特点:
-
独立于外部类实例:静态内部类不依赖于外部类的实例而存在,即使外部类没有被实例化,也可以创建静态内部类的对象。
这是因为静态内部类和外部类的静态成员一样,都属于类本身,而不是外部类的某个实例。 所以可以直接用 -
访问权限:静态内部类可以访问外部类的静态成员(包括私有静态成员),但不能直接访问外部类的非静态成员。
-
创建对象方式:创建静态内部类的对象时,需要使用外部类名.静态内部类名的形式。
静态内部类的应用场景(单例模式的实现)
public class Singleton {
private Singleton() {}
private static class SingletonHolder {
private static final Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
}
拼团项目中的静态内部类应用
为什么这里要用静态内部类啊?
- 可以封装策略执行过程中要使用到的上下文内容
- 可以避免创建外部类的实例是由static修饰的静态内部类,它不依赖于外部类的实例,即不需要创建外部类实例就可以调用方法是(外部类名.静态内部类名)
- 这个内部类是工厂类所依赖的一个辅助类,逻辑上归属明确,增强了类结构的内聚性,也便于其他开发者理解其用途。


浙公网安备 33010602011771号