问题
当 jvm 运行以下代码时
MyObject o=new MyObject() //first access MyObject
我们知道 jvm 将启动 MyObject 的加载类,但我想知道 jvm 是如何知道 MyObject 未加载的。
动机
我想知道,因为如果 jvm 运行这些代码
public class Main{
public static void main(){
ClassLoader myLoader = new ClassLoader(null) {
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
// omitted here
}
}
myLoader.loadClass("MyObject"); //#1
MyObject o=new MyObject() //#2
}
}
我们知道没有#1,MyObject 会被Main 类的classloader 加载,但是有了#1,MyObject 的类会在#2 加载,jvm 是如何判断的呢?