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     }

 

 

posted on 2017-08-03 21:16  VbisoWen  阅读(130)  评论(0编辑  收藏  举报

导航