获取类的三种方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Date;
public class Test {
// 主方法
public static void main(String args[]) {
Class<?> cls = new Date().getClass(); // 反射中,泛型只能写问号,通过实例获取class类对象
Class<?> cls1 = Date.class; // 反射中,泛型只能写问号,通过实例获取class类
Class<?> cls2 = Class.forName("java.util.Date"); // 反射中,泛型只能写问号,通过实例获取class类

System.out.println(cls); // 打印class java.util.Date
System.out.println(cls.getName()); // 打印java.util.Date

Object obj = cls.newInstance(); // 实例化对象,等价于new java.util.Date()
System.out.println(obj); // 打印时间

Method method[] = cls.getMethods();
for(Method item : method) {
System.out.println(item.getName()); // 循环输出所有的方法
}
}
}

反射调用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package com.demo;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Test2 {
// 主方法
public static void main(String args[]) throws Exception {
Class<?> cls = Person.class;
Object obj = cls.newInstance();

Method setName = cls.getMethod("setName", String.class); //通过反射取得方法
Field ageField = cls.getDeclaredField("age"); // 获取自身的属性
Method setAge = cls.getMethod("setAge", ageField.getType()); //获取类型的class
Method getName = cls.getMethod("getName");
Method getAge = cls.getMethod("getAge");

setName.invoke(obj, "cwj"); //调用该方法
setAge.invoke(obj, 18);

Field fields[] = cls.getFields(); // 获取父类的所有子类可以获取的属性
for(Field item : fields) {
System.out.println("---------------");
System.out.println(item);
}

Field nameField = cls.getDeclaredField("name"); // 获取自身的属性
nameField.set(obj, "qwer"); // 设置属性
System.out.println(nameField.get(obj)); // 获取属性

Object name = getName.invoke(obj);
Object age = getAge.invoke(obj);

System.out.println(name);
System.out.println(age);
}
}
class Person {
public String name;
public Integer age = 1;
public Person() {}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setAge(Integer age) {
this.age = age;
}
public int getAge() {
return this.age;
}
}