反射

来源:互联网 发布:mysql安装后连接不上 编辑:程序博客网 时间:2024/06/03 13:22

反射,可以在运行时期动态创建对象;获取对象的属性、方法

反射创建对象

String className = "com.wsk.b_reflect.Admin";// 得到字节码Class<?> clazz = Class.forName(className);// 创建对象1:默认构造器Admin admin1 = (Admin)clazz.newInstance();// 创建对象2:通过带参构造器Constructor<?> constructor = clazz.getDeclaredConstructor(String.class,int.class);Admin admin2 = (Admin)constructor.newInstance("tom",2);

反射获取属性名及值

// 获取类的字节码Class<?> clazz = Class.forName("com.wsk.b_reflect.Admin");// 调用类的默认构造器创建对象Admin admin = (Admin)clazz.newInstance();// 获取所有的属性名Field[] fs = clazz.getDeclaredFields();for(Field f:fs){    // 设置强制访问    f.setAccessible(true);    // 名称    String name = f.getName();    // 值    Object object = f.get(admin);    System.out.println(name+object);}

获取方法名及调用方法

// 获取类的字节码    Class<?> clazz = Class.forName("com.wsk.b_reflect.Admin");    // 调用类的默认构造器创建对象    Admin admin = (Admin)clazz.newInstance();    // 获取方法    Method m1 = clazz.getDeclaredMethod("setName", String.class);    m1.invoke(admin, "jeck");    Method m2 = clazz.getDeclaredMethod("getName");    Object invoke = m2.invoke(admin);    System.out.println("123"+invoke);    Method[] methods = clazz.getDeclaredMethods();    for(Method m:methods){        String name = m.getName();        System.out.println(name);        Class<?>[] parameterTypes = m.getParameterTypes();        for (int i = 0; i < parameterTypes.length; i++) {            System.out.println("    "+parameterTypes[i]);        }    }
原创粉丝点击