Java 类加载 以及反射

来源:互联网 发布:摩尔斯电码软件 编辑:程序博客网 时间:2024/06/04 01:34


public class Reflect {public static Car initCar() throws Throwable{String className = "mycollection.Car";//load Class(byte code) into JVM MemoryClassLoader 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 ObjConstructor<?> cons = clazz.getDeclaredConstructor((Class[])null);Car car = (Car) cons.newInstance();//reflect method and set attributesMethod 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());}}


阅读全文
0 0
原创粉丝点击