package com.etime1012.test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
/**
* @Author zp
* @Date 2022/10/12 6:16 PM
* @Description: TODO
*/
public class Test {
public static void main(String[] args) {
try {
/**
* 三种获取class对象的方法
*/
Student student = new Student();
Class<? extends Student> aClass = student.getClass();
Class<?> aClass1 = Class.forName("com.etime1012.test.Student");
Class<Student> aClass2 = Student.class;
// System.out.println(aClass==aClass1);
// System.out.println(aClass==aClass2);
/**
* 两种方法使用反射获取类的实例
*/
Student student1 = aClass.newInstance();
Constructor<? extends Student> constructor = aClass.getConstructor();
Student student2 = constructor.newInstance();
//反射调用setName,getName方法
Method setName = aClass.getMethod("setName", String.class);
setName.invoke(student1,"zp");
Method getName = aClass.getMethod("getName");
// System.out.println(getName.invoke(student1));
/**
* 反射使用field来操作age属性
*/
Field age = aClass.getDeclaredField("age");
Method setAge = aClass.getMethod("setAge", int.class);
setAge.invoke(student1,18);
age.setAccessible(true);
// System.out.println(age.get(student1));
// //获取变量变量名字
// System.out.println(age.getName());
// //获取属性类型
// System.out.println(age.getType());
// //获取属性的修饰符
// System.out.println(Modifier.toString(age.getModifiers()));
/**
* 使用get/set方法操作addr属性
*/
Method setAddr = aClass.getMethod("setAddr", String.class);
Method getAddr = aClass.getMethod("getAddr");
//设置student1的地址
setAddr.invoke(student1,"大温江");
//获取student1的地址
System.out.println(getAddr.invoke(student1));
}catch (Exception e){
System.out.println(e);
}
}
}
反射的复习
最新推荐文章于 2024-09-15 19:46:31 发布