1.同一个类的2个对象,class对象是否相等?
Class<FunctionImport1Cat> aClass01 = FunctionImport1Cat.class;
Class<?> aClass02 = Class.forName("com.example.mxjc.java8.base.domain.FunctionImport1Cat");
//是否相等?
System.out.println(aClass01==aClass02);
解答:new出2个地址不同的FunctionImport1Cat,由对象点出的class对象比较是一样,因此相等
2.获取class对象的3种方式
//获取class对象的3种方式
//1.通过类.class
Class<FunctionImport1> functionImport1Class = FunctionImport1.class;
//2.通过class。forname()获取class
Class<?> aClass = Class.forName("com.example.mxjc.java8.base.domain.FunctionImport1Cat");
//3.通过对象获取class
FunctionImport1Cat functionImport1Cat = new FunctionImport1Cat();
Class<? extends FunctionImport1Cat> aClass1 = functionImport1Cat.getClass();
通过反射获取对象
//无参构造函数
Class<?> aClass = Class.forName("com.example.mxjc.java8.base.domain.FunctionImport1Cat");
FunctionImport1Cat cat = (FunctionImport1Cat) aClass.newInstance();
System.out.println(cat);
//有参构造函数
Constructor<?> constructorCat2 = aClass.getDeclaredConstructor(String.class);
FunctionImport1Cat cat2 = (FunctionImport1Cat) constructorCat2.newInstance("你好");
System.out.println(cat2);
getFields、getMethods、getCostructors 与getDeclatedFields、getDeclatedMethods、getDeclaredConstructors区别
解答:getFields、getMethods、getCostructors 获取类与超类中public权限内容(字段、方法),
getDeclatedMethods、getDeclaredConstructors获取类全部权限内容(字段、方法)
为反射对象设置值
//为反射对象设置值
FunctionImport1Cat cat4 = (FunctionImport1Cat) aClass.newInstance();
Field food = aClass.getDeclaredField("food");
//private权限需要设置访问权限
food.setAccessible(true);
food.set(cat4,"daka");
System.out.println(cat4.getFood());
执行反射对象方法
//通过反射执行方法
System.out.println("execute reflex method");
Method show = aClass.getDeclaredMethod("show", String.class, String.class);
show.setAccessible(true);
String shows = (String) show.invoke(cat4, "aa","bb");
System.out.println(shows);