------- android培训、java培训、期待与您交流! ----------
package cn.itcast.day02; public class ClassLoaderTest { /** * @param args * @throws ClassNotFoundException */ public static void main(String[] args) throws ClassNotFoundException { // TODO Auto-generated method stub System.out.println(ClassLoaderTest.class.getClassLoader().getClass() .getName()); System.out.println(System.class.getClassLoader()); //结构为null,他是有BootStrap(引导程序)加载的,他是有c++语言编写的,所以他为null ClassLoader loader = ClassLoaderTest.class.getClassLoader(); while(loader != null){ System.out.println(loader.getClass().getName()); loader = loader.getParent(); } System.out.println(loader); /* * sun.misc.Launcher$AppClassLoader sun.misc.Launcher$ExtClassLoader null */ System.out.println(new ClassLoaderAttachment().toString()); Class clazz = new MyClassLoad("itcastlib").loadClass("ClassLoaderAttachment"); //ClassLoaderAttachment d1 = (ClassLoaderAttachment) clazz.newInstance(); } }
答:可以,但在应用的时候,需要用自己的类加载器去加载,否则,系统的类加载器永远只是去加载jre.jar包中的那个java.lang.String。由于在tomcat的web应用程序中,都是由webapp自己的类加载器先自己加载WEB-INF/classess目录中的类,然后才委托上级的类加载器加载,如果我们在tomcat的web应用程序中写一个java.lang.String,这时候Servlet程序加载的就是我们自己写的java.lang.String,但是这么干就会出很多潜在的问题,原来所有用了java.lang.String类的都将出现问题。