反射
获取任意对象的数据
对对象一无所知的情况下
public class Student {
private String name;
private Integer age;
public Student(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
import java.lang.reflect.Field;
public class Main {
public static void main(String[] args) throws IllegalAccessException {
Student student = new Student("段昌峰", 25);
// 在未知对象情况的条件下,读出对象的所有数据
// 获取class类对象,这个对象中存储了关于student对象的所有信息
Class<? extends Student> aClass = student.getClass();
// 获取class对象中的所有成员变量
Field[] fields = aClass.getDeclaredFields();
// 遍历成员变量,首先把成员变量的可访问性改为true
// 然后,通过getname和get方法获取成员变量的名称和值
for (Field field : fields) {
field.setAccessible(true);
System.out.println(field.getName()+"="+field.get(student));
}
}
}
通过配置文件,创建对象并且调用方法
首先编写配置文件
className=Teacher
methodName=teach
其次编写bean类
public class Teacher {
public Teacher() {
}
public void teach(){
System.out.println("老师正在教学");
}
}
最后编写main函数中的方法
//读取配置文件
Properties p = new Properties();
FileInputStream fi = new FileInputStream("./pros.properties");
p.load(fi);
String className = (String) p.get("className");
String methodName = (String) p.get("methodName");
//首先根据全类名获得class对象
Class<?> aClass = Class.forName(className);
//获得构造方法
//并使用构造方法newinstance生成对象
Constructor<?> constructor = aClass.getDeclaredConstructor();
Object o = constructor.newInstance();
//获得对象的对应方法
Method declaredMethod = aClass.getDeclaredMethod(methodName);
//通过invoke执行对应的方法
//invoke方法的参数列表分别是调用这个方法的对象和传入的参数
declaredMethod.invoke(o);
以上代码可以实现根据配置文件中的两个字符串,我们就可以生成这个对象,并且执行对象中的某个方法,以后我们就可以通过简单的更改配置文件来生成另一个对象,执行另一个方法。
标签:反射,Java,String,对象,age,基础,class,public,name From: https://www.cnblogs.com/DCFV/p/18292609