日志文章

2020-1-2 aflfte2011

应用反射API,获取类的信息

package com.aflfte.test;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * 应用反射API,获取类的信息(类的名称、属性、方法、构造器等)
 * 
 * 
 * @author jinhao
 *
 */
public class Demo02 {
public static void main(String[] args) {
String path="com.aflfte.test.bean.User";

try {
Class<?> cla=Class.forName(path);
//获取类的名字
System.out.println(cla.getName());//获取类的全路径(包名+类名)
System.out.println(cla.getSimpleName());//只获取类名称

//获取属性信息
//System.out.println(cla.getField("name"));//通过名称获取对应属性(注意:只能获取类的公开(public)属性)
//Field[] fs= cla.getFields();//获取类的所有属性(注意:这个方法只能获取公开(public)属性)
Field[] fs=cla.getDeclaredFields();//获取类的所有属性
Field f=cla.getDeclaredField("name");
for(Field ff:fs) {
System.out.println("属性:"+ff);
}
System.out.println(fs.length);
//System.out.println(f);

//获取方法信息
Method[] mes=cla.getDeclaredMethods();//获取类的所有方法
Method me=cla.getDeclaredMethod("getName", null);//获取指定名称的方法(方法名,方法参数类型对应的class对象没有参数用null)
Method me2=cla.getDeclaredMethod("setName", String.class);
for(Method m:mes) {
System.out.println("方法:"+m);
}


//获取构造器信息
Constructor<?>[] c=cla.getDeclaredConstructors();//获取所有构造器方法
Constructor<?> ccc=cla.getDeclaredConstructor(int.class,int.class,String.class);//获取指定参数构造器
System.out.println(ccc);
for(Constructor<?> cc:c) {
System.out.println("构造器:"+cc);
}




} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}


反射的源类


package com.aflfte.test.bean;

public class User {
private int id;
private int age;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User(int id, int age, String name) {
super();
this.id = id;
this.age = age;
this.name = name;
}
public User() {
super();
}

}

« 通过反射API动态操作:构造器、方法、属性 | 反射(测试java.lang.Class对象的获取方式)»