全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 1206|回复: 9
打印 上一主题 下一主题

[疑问] 面试题java

[复制链接]
跳转到指定楼层
1#
发表于 2022-1-11 10:38:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大佬知道为啥运行结果是0 1吗,百思不得其解
推荐
发表于 2022-1-11 11:00:13 | 只看该作者
本帖最后由 darius 于 2022-1-11 11:01 编辑

这不是考你jvm的类加载机制

在准备阶段 会把静态变量在方法区分配内存,并设置默认初始值。
在初始化阶段  会依据赋值语句主动为类变量赋值。

1、首先执行main中的getInstance();
2、类的加载:加载类Singleton
3、类的验证
4、类的准备:为静态变量分配内存,设置默认值。这里为instance(引用类型)设置为null,x,y(基本数据类型)设置默认值0
5、类的初始化(按照赋值语句顺序进行修改):
执行private static Singleton instance = new Singleton();
执行Singleton的构造器:x++; y++; 此时x,y均等于1

执行
public static int x = 0;
public static int y;
此时x=0,y=1
2#
发表于 2022-1-11 10:54:45 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
3#
发表于 2022-1-11 10:55:52 来自手机 | 只看该作者
跟执行顺序有关 你debug一下就知道了,执行完getInstant后又对x赋值0
5#
发表于 2022-1-11 11:00:32 | 只看该作者
都他妈是八股文
6#
发表于 2022-1-11 11:07:14 | 只看该作者
百思不得骑姐?

简单说就是构造类的时候,先执行构造函数,然后再执行静态变量赋值
7#
发表于 2022-1-11 11:14:37 | 只看该作者
我觉得你Debug一下你就知道什么原因了
8#
发表于 2022-1-11 11:17:09 | 只看该作者
darius 发表于 2022-1-11 11:00
这不是考你jvm的类加载机制

在准备阶段 会把静态变量在方法区分配内存,并设置默认初始值。

大佬厉害,能说这么清晰明了
9#
 楼主| 发表于 2022-1-11 11:23:37 | 只看该作者
darius 发表于 2022-1-11 11:00
这不是考你jvm的类加载机制

在准备阶段 会把静态变量在方法区分配内存,并设置默认初始值。

懂了,厉害
10#
发表于 2022-1-11 11:23:51 | 只看该作者
看点正常的东西吧。别学成了孔乙己。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-5-14 07:27 , Processed in 0.063042 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表