我一直與UrlClassLoader委託層次結構和繼承層次結構混淆。 我創建的類擴展URLClassLoader的和執行:childOfUrlClassLoader.getParent().getClass().getName()
這給了我: sun.misc.Launcher$AppClassLoader
。 在此之後我拜訪上面的類(source)所提到UrlClassLoader委託和繼承層次結構
249 static class AppClassLoader extends URLClassLoader {
//...
308 protected synchronized Class<?> loadClass(String name, boolean resolve)
309 throws ClassNotFoundException
310 {
311 // First, check if the class has already been loaded
312 Class c = findLoadedClass(name);
313 if (c == null) {
314 try {
315 if (parent != null) {
316 c = parent.loadClass(name, false);
317
// ...
329 return c;
330 }
然後我查誰是AppClassLoader的父。預計我得到sun.misc.Launcher$ExtClassLoader
和ExtClassLoader的父母是null
。
我有幾個問題:
1)誰給我班自AppClassLoader.loadClass
代碼有行
294 return (super.loadClass(name, resolve));
它看起來像循環,不是嗎?
2)爲什麼不具備的ExtClassLoader作爲BootstrapClassLoader
父母,但null
?
3)爲什麼AppClassLoader類擴展UrlClassLoader?