JAVA三种实现单例模式方法(二):使用静态内部类实现单例设计模式

静态代码块和静态内部类的加载顺序:当调用外部类的构造函数是,外部类的静态代码块同时被加载,但是其内部类不会同时被加载;当且仅当内部类的静态域或其构造方法或其静态方法被调用时,内部内才被加载

因此,通过内部内实现单例,就能实现延迟加载。

package instance.innerClass;
public class InstanceInnerClass {
        private String str;
	private Long currentTime;
	
	private static class InnerClass {
		private static final InstanceInnerClass instance = new InstanceInnerClass();
	}
	
	public static InstanceInnerClass getInstance() {
		return InnerClass.instance;
	}
	
	private InstanceInnerClass() {
		initProperties();
	}
	
	private void initProperties() {
		this.str = "hello world!";
		this.currentTime = System.currentTimeMillis();
	}
	
	public void print() {
		System.out.println("time:" + currentTime + " >>> " + str );
	}

	public static void main (String[] args) {
		for (int i = 0; i < 3; i++) {
			new Thread( new Runnable() {
				@Override
				public void run() {
					InstanceInnerClass instance = InstanceInnerClass.getInstance();
					System.out.println("hashCode:" + instance.hashCode());
					instance.print();
				}
			}).start();
		}
	}
}

其他:

使用静态内部类实现单例设计模式http://www.cnblogs.com/zeng1994/p/7397637.html

朝花夕拾——Java静态内部类加载:https://blog.csdn.net/zhang_yanye/article/details/50344447

内部类加载顺序及静态内部类单例模式:https://blog.csdn.net/zmx729618/article/details/69227762

猜你喜欢

转载自blog.csdn.net/jingzi123456789/article/details/80481493