编程语言
首页 > 编程语言> > Java反射——调用运行时的类

Java反射——调用运行时的类

作者:互联网

1.调用运行时类的属性

 1 public static void testField() throws Exception {
 2         Class clazz = Person.class;
 3         //创建运行时类的对象
 4         Person p = (Person) clazz.newInstance();
 5         //获取指定的公有(public)属性(使用情况少)
 6         Field id = clazz.getField("id");
 7         /*
 8         设置当前的属性值
 9         set(参数1,参数2):参数1:指明设置哪个参数对象的属性,参数2:将此属性设置为多少
10         get(参数1):
11          */
12         id.set(p,101);
13         int pId = (int) id.get(p);
14         System.out.println(pId + "——" + id);
15     }

 

1 public static void testField1() throws Exception {
2         Class clazz = Person.class;
3         Person p = (Person) clazz.newInstance();
4         Field name = clazz.getDeclaredField("name");
5         name.setAccessible(true);
6         name.set(p,"tom");
7         System.out.println(name.get(p));
8     }

 

 

2.调用运行时类的方法

 1 public static void testMethod() throws Exception {
 2         Class clazz = Person.class;
 3         Person p = (Person) clazz.newInstance();
 4         /*
 5         获取类的指定方法:
 6         getDeclaredMethod():参数1:方法名  参数2:指明获取方法的参数列表
 7          */
 8         Method show = clazz.getDeclaredMethod("show",String.class);
 9         //保证当前方法可访问
10         show.setAccessible(true);
11         /*
12         调用方法的invoke():参数1即为方法的调用者 参数2:给方法形参赋值的实参
13         invoke()的返回值即为对应类中调用的返回值
14          */
15         Object returnValue = show.invoke(p, "CHN");//p.show("CHN");
16         System.out.println(returnValue);
17 
18         //调用静态方法
19         Method desc = clazz.getDeclaredMethod("desc");
20         desc.setAccessible(true);
21         //如果无返回值则得到null
22         Object invoke = desc.invoke(Person.class);
23         System.out.println(invoke);
24     }

 

3.调用运行时类的构造器

 1 public static void testConstructor() throws Exception {
 2         Class clazz = Person.class;
 3         /*
 4         获取指定的构造器
 5         getDeclaredConstructor():参数,指明构造器的参数列表
 6          */
 7         Constructor declaredConstructor = clazz.getDeclaredConstructor(String.class);
 8         //保证构造器是可访问的
 9         declaredConstructor.setAccessible(true);
10         //调用此构造器创建运行时类的对象
11         Person per = (Person) declaredConstructor.newInstance();
12         System.out.println(per);
13 
14     }

 

标签:反射,调用,Java,invoke,clazz,Person,参数,class
来源: https://www.cnblogs.com/jue1e0/p/16466028.html