Java—反射
粗略的写一下,后面在更新
获取类的三种方式:
//第一种
Class aClass = Dog.class;
//第二种
Class bClass = Class.forName(“Reflect.Dog”);
//第三种
Dog dog = new Dog();
Class cClass = dog.getClass();
例子:
Student类
package Reflect.Test1;
/**
* @Author shall潇
* @Date 2021/2/19
* @Description
*/
public class Student {
public int id;
String name;
private String gender;
public Student() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private String getGender() {
return gender;
}
private void setGender(String gender) {
this.gender = gender;
}
private String show(int cnt,String name1){
return "I am "+this.name+"学号"+id+"性别:"+this.gender+","+name1+"老师叫我拿"+cnt+"杯拿铁";
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", gender='" + gender + '\'' +
'}';
}
}
测试类
package Reflect;
import Reflect.Test1.Student;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* @Author shall潇
* @Date 2021/2/19
* @Description
*/
public class TestStudent {
public static Student getStudent() throws Exception{ //获取类的对象
Class aClass = null;
Student stu;
try {
aClass = Class.forName("Reflect.Test1.Student");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.out.println(aClass.getPackage().getName());//包名
System.out.println(aClass.getName()); //类名
Constructor cons = aClass.getDeclaredConstructor(); //获取构造器
cons.setAccessible(true); //设置权限
Object o = cons.newInstance();
stu = (Student) o;
System.out.println(o);
return stu;
}
public static void setFields() throws Exception { //设置属性
Student s = getStudent();
Class<? extends Student> aClass = s.getClass();
Field[] fields = aClass.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
fields[i].setAccessible(true);
if(null!=fields[i].getName() && "id".equals(fields[i].getName())){
fields[i].set(s,123);
}else if(null!=fields[i].getName() && "name".equals(fields[i].getName())){
fields[i].set(s,"Jack");
}else if(null!=fields[i].getName() && "gender".equals(fields[i].getName())){
fields[i].set(s,"女");
}
}
System.out.println(s);
}
public static void main(String[] args) throws Exception {
// Field id = aClass.getField("id");
// id.set(s,"1002");
//
// Field gender = aClass.getDeclaredField("gender");
// gender.setAccessible(true);
// gender.set(s,"女");
//
// System.out.println(s);
//setFields();
Student s = getStudent(); //设置方法
Class<? extends Student> aClass = s.getClass();
Method gender = aClass.getDeclaredMethod("setGender",String.class);
gender.setAccessible(true);
gender.invoke(s,"男");
s.setId(1002);
s.setName("Lilly");
System.out.println(s);
Method show = aClass.getDeclaredMethod("show",int.class,String.class);
show.setAccessible(true);
Object o = show.invoke(s,25,"Tom");
System.out.println(o);
int modifiers = show.getModifiers(); //修饰符
System.out.println(modifiers);
}
}