这是一道坑人的面试题,看代码:
package com.sprone.classloader1;
public class ClassLoader1 {
public static void main(String[] args) {
Singleton singleton = Singleton.getInstance();
System.out.println("a= " + Singleton.a);
System.out.println("a= " + Singleton.b);
}
}
class Singleton {
private static Singleton singleton = new Singleton();// code1
public static int a;
public static int b = 0;
// code2
private Singleton() {
a++;
b++;
}
public static Singleton getInstance() {
return singleton;
}
}
打印结果是什么?把code1 的代码 剪切到code2 结果是什么?
答案:1,0 剪切后1,1
分析:类的加载 ,链接与初始化过程
加载:查找并加载类的二进制数据
链接:验证:确保被加载的类的正确性
准备:为类的静态变量分配内存,并将其初始化为默认值 比如private static int a = 3;在准备阶段分配内
存设置为0(int的默认值)
解析
问题1:对象对应的Class什么时候产生的? 假设是运行时,可想而知,JVM效率如蚂蚁,JVM团队也不会再运行时的时候才去生成Class对象,在我们编译之后.class文件里面都编译好了,每一个对象对应都有一个Class对象,而这个Class在字节码文件解析,为我们提供了一些生成对象的接口,我们常用的反射代码的生成都是在编译的时候生成的。
静态代码块顺序执行 a没有赋值,在准备阶段给其默认值。执行完code1 的时候 a为1; 继续下面的代码块,后面没有赋值,a=1,而b有重新赋值为0;
剪切后,new在后面 最终的值是在构造方法,所以都是1
分享到:
相关推荐
项目经理面试那些事儿-面试知识点大全(思维导图)
【一线互联网大厂Java核心面试题库】Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等..
文章来源自微信公众号 码匠笔记 https://mp.weixin.qq.com/s/1IygP2GAo6Dwi5GHzClhpA
十余年JAVA从业经验,精通JAVA技术体系,有志于做JAVA技能提升的朋友可与我联系,交个朋友 十余年JAVA从业经验,精通JAVA技术体系,有志于做JAVA技能提升的朋友可与我联系,交个朋友 十余年JAVA从业经验,精通JAVA...
### Java程序员上班那些事儿 #### 一、求职者与企业之间的认知差异 ##### 1.1 应聘者的自我定位问题 - **高大全式的技能列表**:许多求职者在简历上罗列了大量的技能,从传统编程语言如C++、VB,到现代技术如Java...
公开课第五节:测试管理的那些事儿.mp4 公开课第六节:自动化测试的设计模式.mp4 公开课第七节(1):自动化测试的设计模式2.avi 公开课第八节:自动化测试的设计模式3.avi 公开课第九节:多线程和自动化测试的并发...
总结Dubbo.md 总结Java基础.md 总结Java多线程.md 总结Java集合.md 总结JVM.md 总结Mybatis.md ...计算机网络原理-http那些事儿.md 计算机网络面试常见问题.md Redis-面试常见的问题.md Spring面试常见问题.md
Java作为一门广泛使用...通过阅读《Java面试题笔试题大全》、《Java程序员上班那点事儿》、《Java程序员面试宝典》、《Java企业面试题》以及《华为_中软等大公司JAVA面试试题》等资料,可以系统地复习和巩固这些知识。
这些内容在"Java程序员上班那点事儿"中可能都有所涉及,而"面试指南"则会更加聚焦于面试场景,给出针对性的复习建议。 JVM是Java程序员必须了解的部分,面试中经常会涉及到内存模型(堆、栈、方法区等)、垃圾回收...
在求职过程中,面试是至关重要的环节,而面试的准备不仅限于专业知识的积累,还包括了形象、仪态、言谈举止等多方面的细节。本文主要针对面试前的准备工作,提供了一些实用的“黑技巧”,帮助求职者提升面试成功率。...
在面试过程中,掌握一定的策略和技巧能够显著提升获得Offer的成功率。以下是一些关于面试的实用建议,尤其针对自由提问环节: 1. **自我介绍的引导作用**:自我介绍不仅是为了让面试官了解你,更是为了引导他们提出...
在面试过程中,自我介绍是向面试官展示自己能力和特质的重要环节。一个好的自我介绍可以帮助求职者在众多竞争者中脱颖而出,增加获得理想Offer的机会。以下是对自我介绍环节中需要注意的关键点的详细解析: 1. **...
《FPGA设计系列资料》是一份综合性的学习资源,涵盖了硬件工程师面试的必备知识点以及FPGA设计的核心技术。这份资料旨在帮助对FPGA设计感兴趣的工程师提升技能,为面试做好充分准备,同时也为已经在职的工程师提供...
RPC(Remote Procedure Call)协议是计算机通信中的一种技术,它允许程序通过网络调用远程机器上的函数或方法,就像调用本地函数一样简单。RPC协议的核心思想是隐藏底层的网络通信细节,使得开发者能专注于应用逻辑...
46_体验一下面试官对于分库分表这个事儿的一个连环炮 47_来来来!咱们聊一下你们公司是怎么玩儿分库分表的? 48_你们当时是如何把系统不停机迁移到分库分表的? 49_好啊!那如何设计可以动态扩容缩容的分库分表方案...
### Java程序员 上班那点事儿 #### 知识点概览 1. **技术全面性与实际需求的差异** - 应聘者的技能全面但缺乏针对性。 - 企业需求更加具体化。 2. **求职者的自我认知与定位** - 如何明确自己的职业定位。 - ...
公开课第五节:测试管理的那些事儿.mp4 公开课第六节:自动化测试的设计模式.mp4 公开课第七节(1):自动化测试的设计模式2.avi 公开课第八节:自动化测试的设计模式3.avi 公开课第九节:多线程和自动化测试的并发...