package st01;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* 反射测试
* @author hp
*
*/
public class testReflex {
public static void main(String[] args) throws NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchFieldException {
try {
Class<User> clazz = (Class<User>) Class.forName("st01.User");
//获取类名,属性,方法,构造方法
System.out.println("类名:"+clazz.getSimpleName());
Field[] fields = clazz.getDeclaredFields();
for(Field f:fields){
System.out.println("属性:"+f.getName());
}
Method[] method = clazz.getDeclaredMethods();
for(Method m:method){
System.out.println("普通方法:"+m.getName());
}
Constructor[] construct = clazz.getDeclaredConstructors();
for(Constructor c:construct){
System.out.println("构造方法:"+c);
}
Constructor temp = clazz.getDeclaredConstructor(String.class,int.class,String.class);
System.out.println(temp);
//通过反射调用对象,构造方法
User u = clazz.newInstance();//调用无参构造
Constructor<User> con = clazz.getDeclaredConstructor(String.class,int.class,String.class);
User u1 = con.newInstance("王飞飞",18,"男");
System.out.println(u1.getName());
//通过反射api,调用普通方法
User u3 = clazz.newInstance();
Method m = clazz.getDeclaredMethod("setName", String.class);
m.invoke(u3, "王大大");
System.out.println(u3.getName());
//通过反射api,操作属性
User u4 = clazz.newInstance();
Field f = clazz.getDeclaredField("name");
f.setAccessible(true);//设置私有属性为可访问,不需要安全检查了
f.set(u4, "王柏柏");
System.out.println(u4.getName());
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
javaBean类User
package st01;
public class User{
private String name;
private int age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public User(String name, int age, String sex) {
super();
this.name = name;
this.age = age;
this.sex = sex;
}
public User(){
}
}