Java反射机制

Class c1 = Class.forname("User");

//获得类的名字

c1.getName();

c1.getSimpleName();//不含包名;

//获得类的属性

getField() 只能获得public属性

getDeclaredFields() 找到全部的属性

Field[] fields = c1.getDeclaredFields();

for(Field field : fields){

  System.out.println(field);

}

//获得指定属性的值

Field name = c1.getDeclaredField("name");//name 为User 的一个属性

//获得类的方法

c1.getMethods();//获得本类和父类的全部方法

c1.getDeclaredMethods();//只获得本类

//获得指定方法

c1.getMethod()

//获得指定构造器

c1.getConstructors()

 

通过反射动态创建对象

 

 

Constructor constructor = c1.getDeclaredConstructor(String.class, int.class, int.class);

User user = (User)constructor.newInstance("sss", 001,11);

通过反射获取方法

User user = (User)c1.newInstance();

Method setName = c1.getDeclaredMethod("setName", String.class);

setName.invoke(user, "kuang");

通过反射操作属性

User user = (User)c1.newInstance();

Field name = c1.getDeclaredField("name");

name.setAccessible(true);//不能直接操作私有属性,需要这一步来关闭程序的安全监测

name.set(user,"sss");

user.getName();

 

posted on 2020-08-14 11:04  WHardCS  阅读(56)  评论(0)    收藏  举报