java反射机制(1)
百度百科:
java 反射机制:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
java 本身不是动态语言,但是通过java中的反射机制能够获取java中类的属性,方法,和构造方法等。
作用:方便开发。
1 @Test 2 public void testAllWays() { 3 try { 4 //1.类名获取类 5 //Class<?> clazz=Class.forName("basic.reflect.Person"); 6 //2.通过对象获取类 7 Class<?> clazz=new Person().getClass(); 8 //3.类获取 9 //Class<? extends Object> clazz=Person.class; 10 11 //获取类的所有属性,打印所有属性 12 Field[] fields =clazz.getDeclaredFields(); 13 for(Field f:fields) { 14 System.out.println(f); 15 } 16 System.out.println("===================================="); 17 //获取类的所有方法 18 Method[] methods=clazz.getDeclaredMethods(); 19 for(Method m:methods) { 20 System.out.println(m); 21 } 22 System.out.println("======================================="); 23 //获取指定方法名的方法,方法中没有形参 24 Method m=clazz.getDeclaredMethod("getName", new Class[] {}); 25 System.out.println(m); 26 //方法中有形参,要在class数组中指定形参类型 27 Method m1=clazz.getDeclaredMethod("setName", new Class[] {String.class}); 28 System.out.println(m1); 29 //获取指定的属性 30 Field field1=clazz.getDeclaredField("id"); 31 System.out.println(field1); 32 33 34 } catch (NoSuchMethodException e) { 35 // TODO Auto-generated catch block 36 e.printStackTrace(); 37 } catch (SecurityException e) { 38 // TODO Auto-generated catch block 39 e.printStackTrace(); 40 } catch (NoSuchFieldException e) { 41 // TODO Auto-generated catch block 42 e.printStackTrace(); 43 } 44 45 } 46
1 /* 2 * 获取并声明构造函数 3 */ 4 @Test 5 public void testConstructor() { 6 try { 7 Class<?> clazz=Class.forName("basic.reflect.Person"); 8 //获取无参的构造函数 9 Constructor<?> constructor=clazz.getConstructor(new Class[] {}); 10 System.out.println(constructor); 11 //获取有参的构造函数 需要指定参数声明类型 12 Constructor<?> constructor2=clazz.getConstructor(new Class[] {Integer.class,String.class,String.class}); 13 System.out.println(constructor2); 14 15 //声明无参的构造函数 16 Object instance=constructor.newInstance(new Object[]{}); 17 System.out.println(instance); 18 19 //声明有参的构造函数 20 Object instance1=constructor2.newInstance(new Object[] {1,"李四","北京"}); 21 System.out.println(instance1); 22 23 } catch (ClassNotFoundException e) { 24 // TODO Auto-generated catch block 25 e.printStackTrace(); 26 } catch (NoSuchMethodException e) { 27 // TODO Auto-generated catch block 28 e.printStackTrace(); 29 } catch (SecurityException e) { 30 // TODO Auto-generated catch block 31 e.printStackTrace(); 32 } catch (InstantiationException e) { 33 // TODO Auto-generated catch block 34 e.printStackTrace(); 35 } catch (IllegalAccessException e) { 36 // TODO Auto-generated catch block 37 e.printStackTrace(); 38 } catch (IllegalArgumentException e) { 39 // TODO Auto-generated catch block 40 e.printStackTrace(); 41 } catch (InvocationTargetException e) { 42 // TODO Auto-generated catch block 43 e.printStackTrace(); 44 } 45 46 47 48 }