通过反射获得运行时类的完整结构
Field,Method,Constructor,Superclass,Interface,Annotation
- 实现的全部接口
- 所继承的父类
- 全部的构造器
- 全部的方法
- 全部的Field
- 注解
- …
package reflect;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
//获取类的信息
public class Test07 {
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException {
Class c1 = Class.forName("reflect.User");
// User user = new User();
// Class c1 = user.getClass();
//获取类的名字
System.out.println("获取类的名字-----------------------------------------------------");
System.out.println(c1.getName());//获取包名+类名
System.out.println(c1.getSimpleName());//获取类名
//获取类的属性
System.out.println("获取类的属性-----------------------------------------------------");
Field[] fields = c1.getFields();//只能找到public属性
fields = c1.getDeclaredFields();//找到全部的属性
for (Field field : fields) {
System.out.println(field);
}
//获得指定属性的值
Field name = c1.getDeclaredField("name");
System.out.println(name);
//获得类的方法
System.out.println("获取类的方法-----------------------------------------------------");
Method[] methods = c1.getMethods();
for (Method method : methods) {
System.out.println("公共的:"+method);//获得本类及其父类所有的public方法
}
methods = c1.getDeclaredMethods();
for (Method method : methods) {
System.out.println("全部的:"+method);//获得本类全部方法
}
//获得指定方法
Method getName = c1.getMethod("getName",null);
Method setName = c1.getMethod("setName", String.class);
System.out.println(getName);
System.out.println(setName);
//获得类的构造器
System.out.println("获取类的构造器-----------------------------------------------------");
Constructor[] constructors = c1.getConstructors();
for (Constructor constructor : constructors) {
System.out.println(constructor);
}
constructors = c1.getDeclaredConstructors();
for (Constructor constructor : constructors) {
System.out.println("##"+constructor);
}
//获得类的指定构造器
Constructor DeclaredConstructor = c1.getDeclaredConstructor(String.class,int.class,int.class);
System.out.println("指定的:"+DeclaredConstructor);
}
}
运行结果
获取类的名字----------------------------------------------------- reflect.User User 获取类的属性----------------------------------------------------- private java.lang.String reflect.User.name private int reflect.User.age private int reflect.User.id private java.lang.String reflect.User.name 获取类的方法----------------------------------------------------- 公共的:public java.lang.String reflect.User.toString() 公共的:public java.lang.String reflect.User.getName() 公共的:public int reflect.User.getId() 公共的:public void reflect.User.setName(java.lang.String) 公共的:public void reflect.User.setId(int) 公共的:public void reflect.User.setAge(int) 公共的:public int reflect.User.getAge() 公共的:public final void java.lang.Object.wait() throws java.lang.InterruptedException 公共的:public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException 公共的:public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException 公共的:public boolean java.lang.Object.equals(java.lang.Object) 公共的:public native int java.lang.Object.hashCode() 公共的:public final native java.lang.Class java.lang.Object.getClass() 公共的:public final native void java.lang.Object.notify() 公共的:public final native void java.lang.Object.notifyAll() 全部的:public java.lang.String reflect.User.toString() 全部的:public java.lang.String reflect.User.getName() 全部的:public int reflect.User.getId() 全部的:public void reflect.User.setName(java.lang.String) 全部的:public void reflect.User.setId(int) 全部的:public void reflect.User.setAge(int) 全部的:public int reflect.User.getAge() public java.lang.String reflect.User.getName() public void reflect.User.setName(java.lang.String) 获取类的构造器----------------------------------------------------- public reflect.User() public reflect.User(java.lang.String,int,int) ##public reflect.User() ##public reflect.User(java.lang.String,int,int) 指定的:public reflect.User(java.lang.String,int,int)



