Java classloader的体系结构(二)

2014-11-24 02:43:26 · 作者: · 浏览: 7
ate static native Class forName0(String name, boolean initialize,


  ClassLoader loader)


  throws ClassNotFoundException;


  上面中 ClassLoader.getCallerClassLoader 就是得到调用当前forName方法的类的类加载器


  static块在什么时候执行


  当调用forName(String)载入class时执行,如果调用ClassLoader.loadClass并不会执行.forName(String,false,ClassLoader)时也不会执行.


  如果载入Class时没有执行static块则在第一次实例化时执行.比如new ,Class.newInstance()操作


  static块仅执行一次


  各个java类由哪些classLoader加载


  java类可以通过实例.getClass.getClassLoader()得知


  接口由AppClassLoader(System ClassLoader,可以由ClassLoader.getSystemClassLoader()获得实例)载入


  ClassLoader类由bootstrap loader载入


  NoClassDefFoundError和ClassNotFoundException


  NoClassDefFoundError:当java源文件已编译成.class文件,但是ClassLoader在运行期间在其搜寻路径load某个类时,没有找到.class文件则报这个错


  ClassNotFoundException:试图通过一个String变量来创建一个Class类时不成功则抛出这个异常