面试题:单例模式输出静态变量

面试题

复制代码
一、写出两种情况下的运行结果。第一种如下面的代码所示;第二种是把"1=="所在行注释掉,把"2=="行的注释去掉。
class Singleton {
	private static Singleton singleton = new Singleton();	//1==
	static int i;
	static int j = 0;
	//private static Singleton singleton = new Singleton();        //2==
	private Singleton() {
		i++;
		j++;
	}
	public static Singleton getInstance() {
		return singleton;
	}
}
	public static void main(String[] args) {
		Singleton.getInstance();
		System.out.println("i=" + Singleton.i + ",j=" + Singleton.j);
}
结果1:i=1,j=0
结果2:i=1,j=1

前几天面试有这么一道题,我没有搞明白,最后研究了半天原来是加载顺序的问题。

结果一加载顺序:

原因:

1 首先执行main中的Singleton singleton = Singleton.getInstance();

2 类的加载:加载类Singleton

3 类的验证

4 类的准备:为静态变量分配内存,设置默认值。这里为singleton(引用类型)设置为null,i,j(基本数据类型)设置默认值0

5 类的初始化(按照赋值语句进行修改):

执行private static Singleton singleton = new Singleton();

执行Singleton的构造器:value1++;value2++; 此时i,j均等于1

执行

public static int i;

public static int j = 0;

此时i=1,j=0

结果2加载顺序:1 1

原因:

1 首先执行main中的Singleton singleton = Singleton.getInstance();

2 类的加载:加载类Singleton

3 类的验证

4 类的准备:为静态变量分配内存,设置默认值。这里为i,j(基本数据类型)设置默认值0,singleton2(引用类型)设置为null,

5 类的初始化(按照赋值语句进行修改):

执行

public static int i = 0;

此时vi=0(value1不变,依然是0);

执行

private static Singleton singleton = new Singleton();

执行Singleton的构造器:i++;j++;

此时i,j均等于1,即为最后结果

相关推荐
哥只是传说中的小白3 分钟前
Nano Banana Pro高并发接入Grsai Api实战!0.09/张无限批量生成(附接入实战+开源工具)
开发语言·数据库·ai作画·开源·aigc·php·api
wtsolutions14 分钟前
Sheet-to-Doc占位符系统详解:让数据自动填入Word指定位置
开发语言·c#
沛沛老爹16 分钟前
深入理解Agent Skills——AI助手的“专业工具箱“实战入门
java·人工智能·交互·rag·企业开发·web转型ai
m0_6356474819 分钟前
Qt使用第三方组件库新手教程(一)
开发语言·c++·qt
雒珣19 分钟前
控制QT生成目录
开发语言·qt
蓝程序44 分钟前
Spring AI学习 程序接入大模型(HTTP接入)
java·spring
jllllyuz1 小时前
单载波中继系统资源分配算法综述与实现
开发语言·matlab
小途软件1 小时前
ssm607家政公司服务平台的设计与实现+vue
java·人工智能·pytorch·python·深度学习·语言模型
Hello.Reader1 小时前
PyFlink Table Arrow 原理、Exactly-Once、Batch Size、内存风险与最佳实践
开发语言·batch
星火开发设计1 小时前
二叉树详解及C++实现
java·数据结构·c++·学习·二叉树·知识·期末考试