通过面试题解析通过面试题解析 Java 类加载机制类加载机制
类加载是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一。它使得 Java 类可以被动态加载到 Java
虚拟机中并执行。下面小编和大家来一起学习一下吧
在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题:
class Grandpa
{
static
{
System.out.println("爷爷在静态代码块");
}
}
class Father extends Grandpa
{
static
{
System.out.println("爸爸在静态代码块");
}
public static int factor = 25;
public Father()
{
System.out.println("我是爸爸~");
}
}
class Son extends Father
{
static
{
System.out.println("儿子在静态代码块");
}
public Son()
{
System.out.println("我是儿子~");
}
}
public class InitializationDemo
{
public static void main(String[] args)
{
System.out.println("爸爸的岁数:" + Son.factor); //入口
}
}
请写出最后的输出字符串。
正确答案是:
爷爷在静态代码块
爸爸在静态代码块
爸爸的岁数:25
我相信很多同学看到这个题目之后,表情是崩溃的,完全不知道从何入手。有的甚至遇到了几次,仍然无法找到正确的解答思
路。
其实这种面试题考察的就是你对其实这种面试题考察的就是你对Java类加载机制的理解。类加载机制的理解。
如果你对Java加载机制不理解,那么你是无法解答这道题目的。
所以这篇文章,我先带大家学习Java类加载的基础知识,然后再实战分析几道题目让大家掌握思路。
下面我们先来学习下Java类加载机制的七个阶段。
Java类加载机制的七个阶段类加载机制的七个阶段
当我们的Java代码编译完成后,会生成对应的 class 文件。接着我们运行java Demo命令的时候,我们其实是启动了JVM 虚拟
机执行 class 字节码文件的内容。而 JVM 虚拟机执行 class 字节码的过程可以分为七个阶段:加载、验证、准备、解析、初加载、验证、准备、解析、初
始化、使用、卸载。始化、使用、卸载。
加载加载
下面是对于加载过程最为官方的描述。
加载阶段是类加载过程的第一个阶段。在这个阶段,JVM 的主要目的是将字节码从各个位置(网络、磁盘等)转
化为二进制字节流加载到内存中,接着会为这个类在 JVM 的方法区创建一个对应的 Class 对象,这个 Class 对象