package cn.yu.wang.reflect;
public class Hello {
private int id1;
private int id2=2;
public int id3=3;
private String name1;
private String name2=“name2”;
public String name3=“name3”;
public Hello() {
System.out.println(“我是默认构造”);
}
public Hello(String name) {
System.out.println(“我是有参构造”+name);
}
private void m1() {
System.out.println(“我是私有无参方法”);
}
private void m2(String name) {
System.out.println(“我是私有有参方法”+name);
}
public void m3() {
System.out.println(“我是公有无参方法”);
}
public void m4(String name) {
System.out.println(“我是公有有参方法”+name);
}
public int getId2() {
return id2;
}
public void setId2(int id2) {
this.id2 = id2;
}
public int getId3() {
return id3;
}
public void setId3(int id3) {
this.id3 = id3;
}
}
package cn.yu.wang.reflect;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Test {
public static void main(String[] args) throws Exception {
//要想操作这个类,先拿到这个类,创建类对象
Class<?> clazz = Class.forName(“cn.yu.wang.reflect.Hello”);
//获取构造方法
Constructor<?> hello = clazz.getDeclaredConstructor();
//hello 代表已经拿到了默认构造
//利用构造方法来创建对象实例,无参构造
hello.newInstance();
//有参构造
Constructor<?> hello2 = clazz.getDeclaredConstructor(String.class);
hello2.newInstance("hello2");
//获取所有的构造
Constructor<?>[] allcon = clazz.getDeclaredConstructors();
for (Constructor<?> constructor : allcon) {
System.out.println(constructor);
}
//获取私有属性
Field id2 = clazz.getDeclaredField("id2");
//私有属性设为可见
id2.setAccessible(true);
//从对象实例获取值
Object obj = clazz.newInstance();
System.out.println(id2.get(obj));
//调用set方法改值
//第一个参数:field属性所属对象
id2.set(obj, 99);
System.out.println(id2.get(obj));
//获取公有属性
Field id3 = clazz.getField("id3");
System.out.println(id3.get(obj));
//公有无参方法
Method m3 = clazz.getDeclaredMethod("m3");
//执行obj对象的方法
m3.invoke(obj);
//公有有参方法
Method m4 = clazz.getDeclaredMethod("m4", String.class);
m4.invoke(obj, "m4");
//私有无参方法
Method m1 = clazz.getDeclaredMethod("m1");
m1.setAccessible(true);
m1.invoke(obj);
//私有有参方法
Method m2 = clazz.getDeclaredMethod("m2", String.class);
m2.setAccessible(true);
m2.invoke(obj, "m2");
// //执行所有方法
// Method[] allm = clazz.getDeclaredMethods();
// for (Method method : allm) {
// method.invoke(obj);
// }
}
}