User实体类User.java
package reflect;
/**
* 用户实体类
* @author xhe
*
*/
public class User {
private String name;
private int age;
public User() {}
public User(String name, int age) {
super();
this.name = name;
this.age = age;
}
protected String getName() {
return name;
}
protected void setName(String name) {
this.name = name;
}
protected int getAge() {
return age;
}
protected void setAge(int age) {
this.age = age;
}
}
Demo01.java
package reflect;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* 反射获取类的信息(属性、构造器、方法)
* @author xhe
*
*/
public class Demo01 {
public static void main(String[] args) throws Exception {
String path = "reflect.User";
Class<?> clazz = Class.forName(path);
//打印该类的hashCode
System.out.println(clazz.hashCode());
//获取类的名字
System.out.println(clazz.getName()); //获得包名+类名 reflect.User
System.out.println(clazz.getSimpleName()); //获得类名:User
//获得属性信息
//Field[] fields = clazz.getFields(); //只能获取public修饰的属性
//Field name = clazz.getDeclaredField("name"); //获得指定的属性
Field[] fields2 = clazz.getDeclaredFields(); //获得所有属性:包含private、protected修饰的属性
for(Field field:fields2){
System.out.println(field);
}
//获得方法信息
//Method[] methods = clazz.getMethods(); //获得public修饰的方法
Method[] methods = clazz.getDeclaredMethods(); //获得所有方法包括private、protected修饰
//Method m01 = clazz.getDeclaredMethod("getName", null);
//如果方法有参,则必须传递参数类型对应的的class
//Method m02 = clazz.getDeclaredMethod("setName", String.class);
for(Method m:methods){
System.out.println("方法:"+m);
}
//获得构造器信息
Constructor<?>[] constructors = clazz.getDeclaredConstructors();
//Constructor<?> constructor = clazz.getDeclaredConstructor(null); //获得无参构造器
//Constructor<?> constructor2 = clazz.getDeclaredConstructor(String.class,int.class); //获得带参构造器
//System.out.println(constructor2);
for(Constructor<?> c:constructors){
System.out.println("构造器:"+c);
}
}
}