Java 应用程序启动 - 第一个对象是如何创建的
Java application startup - how first object is created
当我们运行一个Java应用程序时,我们知道要加载的第一个对象是java.lang.Object
。但是,java.lang.Object
有抛出异常的方法,例如 CloneNotSupportedException
或 InterruptedException
,它们又是其他对象。
问题是:当 java.lang.Object
刚刚加载时,怎么可能已经创建了它的子对象(例如异常对象)?
loaded
and instantiated
are two different things.
粗略解释:
loaded
表示 JVM 将 class 加载到其基础 class 加载器中。这使得 class 可用于 实例化 。当 JVM 启动时,它首先通过 used/linked jar
文件加载所有 classes,而不 实例化 它们。这意味着,当创建第一个 new Object()
时,Object
使用的异常是已知的。这仍然是一个宣言。只有在抛出特定异常时才会创建异常实例。
有关技术上正确的解释,请参阅@Jim Garrison 提到的 link:
当我们运行一个Java应用程序时,我们知道要加载的第一个对象是java.lang.Object
。但是,java.lang.Object
有抛出异常的方法,例如 CloneNotSupportedException
或 InterruptedException
,它们又是其他对象。
问题是:当 java.lang.Object
刚刚加载时,怎么可能已经创建了它的子对象(例如异常对象)?
loaded
andinstantiated
are two different things.
粗略解释:
loaded
表示 JVM 将 class 加载到其基础 class 加载器中。这使得 class 可用于 实例化 。当 JVM 启动时,它首先通过 used/linked jar
文件加载所有 classes,而不 实例化 它们。这意味着,当创建第一个 new Object()
时,Object
使用的异常是已知的。这仍然是一个宣言。只有在抛出特定异常时才会创建异常实例。
有关技术上正确的解释,请参阅@Jim Garrison 提到的 link: