标签:read RKE 配置 public 使用 load work dna getc
People p =new People();
Class c = p.getClass();
Class c1=People.class;
Class c2=Class.forName("tianpo.com.demo.People");
//比较内存地址,类加载器只会创建一次
System.out.println(c==c2);
//比较的是属性值
System.out.println(c.equals(c2));
其实就是把class文件进行结构拆解:
Class c =Class.forName("tianpo.com.demo.People");
## 有参
Constructor constructor=c.getConstructor(String.class,int.class);
## 无参
Constructor constructor1=c.getConstructor();
Object obj=constructor.newInstance("dd",22);
People p =(People)obj;
System.out.println(p);
//构造函数是私有的
private People(String name, int age) {
super();
this.name = name;
this.age = age;
}
Class c =Class.forName("tianpo.com.demo.People");
Constructor constructor=c.getDeclaredConstructor(String.class,int.class);
//暴力反射,取消运行时权限检查
constructor.setAccessible(true);
Object obj=constructor.newInstance("dd",22);
System.out.println(obj);
Class c = Class.forName("tianpo.com.demo.People");
Constructor con = c.getConstructor();
Method m =c.getMethod("eat");
Object obj1=con.newInstance();
m.invoke(obj1);
Class c = Class.forName("tianpo.com.demo.People");
# 获取所有public类型的成员变量
Field[] fs=c.getFields();
# 获取所有private
Field[] fs1=c.getDeclaredFields();
for(Field field:fs){
System.out.println(field);
}
Field field=c.getDeclaredField("age");
Constructor con = c.getConstructor();
Method m =c.getMethod("eat");
Object obj1=con.newInstance();
//动态赋值
field.set(obj1,18);
System.out.println(obj1);
ArrayList<String> array = new ArrayList<String>();
array.add("张三");
// 编译时会做类型检查
//array.add(10);
Class c = array.getClass();
Method m = c.getMethod("add",Object.class);
m.invoke(array,10);
m.invoke(array,13.8);
System.out.println(array);
className = tianpo.com.demo.People
methodName = eat
className = tianpo.com.demo.Student
methodName = Study
className = tianpo.com.demo.Worker
methodName = Work
FileReader rd = new FileReader("config.properties");
Properties pro = new Properties();
pro.load(rd);
rd.close();
String className = pro.getProperty("className");
String methodName = pro.getProperty("methodName");
Class c =Class.forName(className);
Method m = c.getMethod(methodName);
Object obj=c.newInstance();
m.invoke(obj);
标签:read RKE 配置 public 使用 load work dna getc
原文地址:https://www.cnblogs.com/tianboblog/p/9218289.html