找回密码
 立即注册
CeraNetworksBGVM服务器主机交流会员请立即修改密码Sharktech防护
查看: 66|回复: 9

面试题java

[复制链接]

1

主题

11

回帖

39

积分

新手上路

积分
39
发表于 2022-1-11 10:38:23 | 显示全部楼层 |阅读模式
大佬知道为啥运行结果是0 1吗,百思不得其解


回复

使用道具 举报

56

主题

934

回帖

2672

积分

金牌会员

积分
2672
发表于 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
回复

使用道具 举报

32

主题

314

回帖

1180

积分

金牌会员

积分
1180
发表于 2022-1-11 10:54:45 | 显示全部楼层
本帖最后由 ekucn 于 2022-1-11 10:58 编辑

这是新数组的时候不会初始化该类.

你把第二行换到后面[ol]
  • public class Singleton {
  •         public static int x = 0;
  •         public static int y;
  •         private static Singleton instance = new Singleton();[/ol]复制代码

    再试试。。。。答案就是1.1了。。。


    话说什么面试还问这种单例模式问题。。。




  • 回复

    使用道具 举报

    41

    主题

    1581

    回帖

    4205

    积分

    论坛元老

    积分
    4205
    发表于 2022-1-11 10:55:52 | 显示全部楼层
    跟执行顺序有关 你debug一下就知道了,执行完getInstant后又对x赋值0
    回复

    使用道具 举报

    1

    主题

    87

    回帖

    261

    积分

    中级会员

    积分
    261
    发表于 2022-1-11 11:00:32 | 显示全部楼层
    都他妈是八股文

    回复

    使用道具 举报

    107

    主题

    978

    回帖

    3415

    积分

    论坛元老

    积分
    3415
    发表于 2022-1-11 11:07:14 | 显示全部楼层
    百思不得骑姐?

    简单说就是构造类的时候,先执行构造函数,然后再执行静态变量赋值
    回复

    使用道具 举报

    53

    主题

    463

    回帖

    2147

    积分

    金牌会员

    积分
    2147
    发表于 2022-1-11 11:14:37 | 显示全部楼层
    我觉得你Debug一下你就知道什么原因了
    回复

    使用道具 举报

    3

    主题

    95

    回帖

    271

    积分

    中级会员

    积分
    271
    发表于 2022-1-11 11:17:09 | 显示全部楼层

    darius 发表于 2022-1-11 11:00

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

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

    大佬厉害,能说这么清晰明了

    回复

    使用道具 举报

    1

    主题

    11

    回帖

    39

    积分

    新手上路

    积分
    39
     楼主| 发表于 2022-1-11 11:00:00 | 显示全部楼层

    darius 发表于 2022-1-11 11:00

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

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

    懂了,厉害

    回复

    使用道具 举报

    10

    主题

    107

    回帖

    360

    积分

    中级会员

    积分
    360
    发表于 2022-1-11 11:23:37 | 显示全部楼层
    看点正常的东西吧。别学成了孔乙己。。。。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|HS2V主机综合交流论坛

    GMT+8, 2024-10-19 06:16 , Processed in 0.121253 second(s), 4 queries , Gzip On, Redis On.

    Powered by Discuz! X3.5 |   访问量:   |   访客量:  

    © 2001-2024 Discuz! Team. |   今日访问量:    |   今日访客量:  

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