反射
来源:互联网 发布: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]); } }