import operate415.demo.demo1.Str;
import operate427.demo.demo5.Demo1;import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;/*** 反射调用的大概了解简单小结调用** @author silence*/
public class Silence {public static void main(String[] args) throws Exception {//这两个较常用的方法获取classClass<?> clazz1 = Class.forName("operate427.demo.demo1.Demo1");Class<Demo1> clazz2 = Demo1.class;//-----------------------------------------//都是通过字节码引用调用//带Declared的是都是属于私有构造,属于私有的都需要设置setAccessible(true)//带S的是获取所有的方法 属性 或者构造//构造方法-----------------------------------//getConstructor()//获取单个指定的构造方法,需要传入对应的数据类型class Integer.class String.class// Constructor<?> constructor = clazz1.getConstructor();//通过 constructor.newInstance() 创建对象 这里需要传入实参//方法-----------------------------------// clazz1.getMethod()//获取单个方法,需要传入方法名 “method”, 参数类型.class//Method method = clazz1.getMethod("method", String.class);//属于私有的都需要设置setAccessible(true)//通过单个方法引用的invoke方法调用方法 method.invoke() 这里需要传入对象引用调用,有参数需要传入实参//属性-----------------------------------//获取单个属性需要传入属性名称//Field field = clazz1.getField("");// 属于私有的都需要设置setAccessible(true)//field.set(new Object(),""); set是设置值,需要传入需要设置对象的地址引用// String str = (String) field.get(""); get获取值}
}