public class Reflect { public static Car initCar() throws Throwable{ String className = "mycollection.Car"; //load Class(byte code) into JVM Memory ClassLoader cl = Thread.currentThread().getContextClassLoader(); Class<?> clazz = cl.loadClass(className); /** * 基于安全考虑的类加载的委托机制,避免系统的库文件被误替换(.class 字节码), * 首先会从ClassLoader(根类加载器,加载jre的核心类库) * ExtClassLoader(加载ext中的Jar包) * AppClassLoader(应用类加载 负责加载Classpath下的类) */ System.out.println("当前类加载器:"+cl); System.out.println("父加载器:"+cl.getParent()); System.out.println("祖父加载器"+cl.getParent().getParent()); //init a Obj Constructor<?> cons = clazz.getDeclaredConstructor((Class[])null); Car car = (Car) cons.newInstance(); //reflect method and set attributes Method setBrand = clazz.getMethod("setBrand", String.class); setBrand.invoke(car, "夏利"); Method setColor = clazz.getMethod("setColor", String.class); setColor.invoke(car, "蓝色"); Method setMaxSpeed = clazz.getMethod("setMaxSpeed", String.class); setMaxSpeed.invoke(car, "110"); return car; } public static void main(String ...args) throws Throwable{ Car initCar = initCar(); System.out.println(initCar.getBrand()); } }
Java 类加载 以及反射
猜你喜欢
转载自blog.csdn.net/zsf5201314z/article/details/78188857
今日推荐
周排行