package com.solex.test;
import java.lang.reflect.*;
import java.util.Arrays;
import org.junit.Test;
public class TestClass {
@Test
public void TestRef() throws Exception {
Class<?> c = null;
c = Class.forName("java.lang.String");// 加载类
System.out.println("类:" + c);
String str = (String) c.newInstance();// 创建类实例
System.out.println("一个类实例:" + str);
Class<?>[] in = c.getInterfaces();// 获取类实现的接口
System.out.println("类实现的接口:" + Arrays.toString(in));
Class<?> su = c.getSuperclass();// 获取类的父类
System.out.println("父类:" + su);
Constructor<?>[] cons = c.getConstructors();// 获取类的构造方法
System.out.println("构造方法:" + Arrays.toString(cons));
Method[] mes = c.getMethods();// 获取类的方法
System.out.println("方法:" + Arrays.toString(mes));
Field[] fies = c.getDeclaredFields();// 获取类的属性
System.out.println("属性:" + Arrays.toString(fies));
/**
* ----------------------
*/
Person p = new Person("Zhang", 15);
Class<? extends Person> cp = p.getClass();// 通过实例获取类
try {
Field ageField = cp.getDeclaredField("age");// 私有属性,需要设置可读
ageField.setAccessible(true);
Field nameField = cp.getField("name");// 公有属性
int age = (Integer) ageField.get(p);// 表明要获取的ageField属性是属于p对象的
String name = (String) nameField.get(p);// 表明要获取的nameField属性是属于p对象的
System.out.println("name:" + name + ",age:" + age);
/**
* 利用反射调用方法,并测试调用之后,参数变化
*/
Method methodAge = cp.getMethod("setAge", int.class);// 获取类的方法
methodAge.invoke(p, 26);// 利用反射调用方法
Method methodName = cp.getMethod("setName", String.class);// 获取类的方法
methodName.invoke(p, "Jerry");// 利用反射调用方法
age = (Integer) ageField.get(p);
name = (String) nameField.get(p);// 表明要获取的p对象的f2属性
System.out.println("name:" + name + ",age:" + age);
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person {
public String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.age = age;
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
System.out.println("调用setName");
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
System.out.println("调用setAge");
}
}
java.lang.reflect反射学习
最新推荐文章于 2021-06-24 21:46:05 发布