这道题目主要考察对类加载概念的认识,如果你认识ClassLoader加载类的三步骤的话,这题应该不是很难。
类加载器加载一个类的三个步骤:
(1) 加载:查找并加载类的二进制数据。
(2) 连接:包括验证、准备和解析类的二进制数据。
1 验证:确保被加载类的二进制数据。
2 准备:为类的静态变量分配内存,并将其初始化为默认值。
3 解析:把类中的符号引用转换为直接引用。
(3) 把类的静态变量赋予正确的初始值。
类加载器的学问太大了,在这里就不多介绍了。
看一下下面两段代码分别输出什么?
//code_1
public class SingleInstance {
private static SingleInstance si = new SingleInstance(); //注意这里
public static int num_1;
public static int num_2 = 0;
public SingleInstance() {
num_1 ++;
num_2 ++;
}
public static SingleInstance getInstance() {
return si;
}
public void print() {
System.out.println(num_1 + ":" + num_2);
}
public static void main(String[] args) {
SingleInstance.getInstance().print();
}
}
//code_2
public class SingleInstance {
public static int num_1;
public static int num_2 = 0;
private static SingleInstance si = new SingleInstance(); //注意,跟上面不一样了
public SingleInstance() {
num_1 ++;
num_2 ++;
}
public static SingleInstance getInstance() {
return si;
}
public void print() {
System.out.println(num_1 + ":" + num_2);
}
public static void main(String[] args) {
SingleInstance.getInstance().print();
}
}
答案(答案经过两次Base64的编码):
code_1 : TVRvdw==
code_2 : TVRveA==
分享到:
相关推荐
JAVA类加载器的工作原理 JAVA类加载器是JAVA虚拟机(JVM)的一部分,负责...在JAVA面试题中,也经常出现“一个类是否能被两个不同类加载器加载”的问题。这是一个考察类加载器工作原理和JAVA类加载机制的重要问题。
- 类加载机制:了解双亲委派模型,类加载器的职责,以及如何自定义类加载器。 - 内存模型:堆内存、栈内存、方法区(元空间)的结构与作用,以及内存溢出问题的分析与解决。 - 垃圾回收:GC的工作原理,垃圾收集...
- **SSH (Struts + Spring + Hibernate) 框架面试题**: 综合考察三个框架之间的集成和协作。 #### 三、数据库和框架配置 - **数据库在 JDBC 中的连接方法**: JDBC 连接池、驱动加载等。 - **Struts 和 Hibernate ...
2. **面向对象设计**:考察设计模式的理解,如单例模式、工厂模式、装饰器模式、代理模式等,以及SOLID原则的运用。 3. **并发编程**:涉及线程同步与通信(synchronized、wait/notify、Lock接口)、并发工具类(如...
- 类加载机制:了解类加载器的工作原理。 **第二节 Java并发面试题** - 并发工具类:Semaphore、CountDownLatch、CyclicBarrier、ThreadPoolExecutor等。 - 线程安全:volatile、synchronized、Atomic变量的使用。 ...
### Java面试题知识点概览 #### 面向对象概念 1. **super()与this()的区别**: - `super()`用于调用父类的构造方法或父类成员方法。 - `this()`用于调用本类中的其他构造方法。 2. **作用域public, protected, ...
6. **设计模式**:设计模式是软件工程的最佳实践,面试中常考察单例、工厂、观察者、装饰器、代理等常见设计模式的应用和理解。 7. **IO流**:Java的输入输出流体系复杂而强大,面试中可能会涉及到文件操作、字符流...
- **随着类的加载而加载**:静态成员随着类的加载而加载,早于任何对象的存在。 - **优先于对象存在**:静态成员属于类而不是某个具体的对象,因此可以在创建对象之前就被访问。 - **被所有对象所共享**:所有对象...
5. **JVM**:Java虚拟机的内存管理、垃圾收集机制、性能优化、类加载过程、类加载器、JVM调优工具等都是面试中常见的问题。理解JVM的工作原理对于优化程序性能至关重要。 6. **MySQL**:数据库相关面试题涵盖SQL...
Java面试题总汇是针对Java开发者的一份宝贵的资源,涵盖了广泛的知识点,旨在帮助求职者在面试中展现出全面的技术实力。这份资料集包含了各种类型的题目,涵盖了基础语法、面向对象编程、集合框架、多线程、JVM内存...
2017年,尽管已是几年前,但那时的前端面试题仍然能反映出当时的主流技术和趋势,对于今天的开发者来说,仍具有相当的学习价值。下面我们将详细探讨这些面试题所涵盖的知识点。 首先,前端开发的基础部分是必不可少...
- 类加载器:了解类的加载过程,以及自定义类加载器。 - 获取类信息:Class类的使用,获取类的构造器、方法、字段等信息。 - 动态调用:通过反射动态执行方法和访问字段。 6. **网络编程**: - Socket编程:TCP...
Java工程师面试题汇总涵盖了广泛的IT领域知识,包括基础的Java语法、数据库原理、多线程概念、ORM框架MyBatis、缓存系统Redis、微服务框架Spring Cloud以及全文搜索引擎Elasticsearch。这些知识点是Java开发者在职业...
8. **JVM优化**:包括类加载机制、类加载器、类加载过程、JVM性能监控工具(jconsole、VisualVM等),以及如何调整JVM参数进行性能优化。 9. **Spring框架**:作为企业级应用的主流框架,Spring的IoC容器、AOP、MVC...
- 类加载机制:双亲委派模型和类加载器的层次结构。 10. **Spring框架**: - IOC(Inversion of Control)与DI(Dependency Injection)原理。 - AOP(面向切面编程):切点、通知、织入的概念,以及Spring AOP...
"java面试题-外企软件工程师面试题大全.rar"这个压缩包文件很可能包含了大量关于Java编程、设计模式、并发处理、数据结构与算法、框架应用等方面的面试题目,旨在帮助求职者准备这些挑战。 1. **Java基础知识**:...
1. **类加载器层次结构**:Java的类加载系统由多个类加载器组成,包括启动类加载器、扩展类加载器和应用类加载器等。 2. **双亲委派模型**:这是一种类加载器之间的协作模式,其中每个类加载器在加载类之前都会先...
前端面试题汇总主要涵盖HTML和CSS相关的重要知识点,旨在考察面试者对于网页构建的基础知识、浏览器兼容性、页面性能优化以及SEO策略等的理解。以下是对这些面试题的详细解析: 1. **浏览器测试**:面试者应熟悉...
本资源包含一系列的面试题,旨在帮助求职者全面准备这两个领域的面试。 在网页编程方面,面试题可能涵盖HTML、CSS、JavaScript等基础知识。HTML是构建网页结构的基础,面试中可能会涉及标签的使用、语义化元素的...
Java面试题超详细解答 Java作为一门广泛应用的编程语言,其面试题目涵盖了众多知识点,从基础语法到高级特性,从理论概念到实际应用。这里我们将深入探讨这些面试题所涉及的Java技术要点。 1. **Java基础** - **...