静态内部类
静态内部类与非静态内部类之间存在一个最大的区别,我们知道非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围类,但是静态内部类却没有。没有这个引用就意味着:
它的创建是不需要依赖外围类的创建。
它不能使用任何外围类的非static成员变量和方法。
Example(静态内部类实现单例模式)
public class Singleton {
//声明为 private 避免调用默认构造方法创建对象
private Singleton() {
}
// 声明为 private 表明静态内部该类只能在该 Singleton 类中被访问
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getUniqueInstance() {
return SingletonHolder.INSTANCE;
}
}
当 Singleton
类加载时,静态内部类 SingletonHolder
没有被加载进内存。只有当调用 getUniqueInstance()
方法从而触发 SingletonHolder.INSTANCE
时 SingletonHolder
才会被加载,此时初始化 INSTANCE
实例,并且 JVM
能确保 INSTANCE
只被实例化一次。
这种方式不仅具有延迟初始化的好处,而且由 JVM
提供了对线程安全的支持。
序列化
ArrayList
实现了 java.io.Serializable
接口,这意味着ArrayList
支持序列化,能通过序列化去传输。
这个序列化是什么东西?