Java类的加载机制( 五 )

testClass = null; try { testClass = classLoader.loadClass("com.neo.classloader.Test2"); Object object = testClass.newInstance(); System.out.println(object.getClass().getClassLoader()); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } }} 
自定义类加载器的核心在于对字节码文件的获取 , 如果是加密的字节码则需要在该类中对文件进行解密 。由于这里只是演示 , 我并未对class文件进行加密 , 因此没有解密的过程 。这里有几点需要注意:
1、这里传递的文件名需要是类的全限定性名称 , 即com.paddx.test.classloading.Test格式的 , 因为 defineClass 方法是按这种格式进行处理的 。
2、最好不要重写loadClass方法 , 因为这样容易破坏双亲委托模式 。
3、这类Test 类本身可以被 AppClassLoader 类加载 , 因此我们不能把 com/paddx/test/classloading/Test.class 放在类路径下 。否则 , 由于双亲委托机制的存在 , 会直接导致该类由AppClassLoader 加载 , 而不会通过我们自定义类加载器来加载 。




推荐阅读