Java 的 Class 类 提供了很多 API, 通过这些 API 就可以操作对象, 属性, 行为等等;
测试前请自行穿件测试类: UserEntity
package devi.mint.reflect;
import devi.mint.entity.UserEntity;
import java.lang.reflect.*;
/**
* 反射技术探索
* 使用反射查看类信息
*/
public class ReflectCheckClassContent {
private static UserEntity user = new UserEntity();
public static void main(String[] args) {
//===============获取模板类(开始)=============================
//1. 在编译器不知道类名, 在运行期可以获得该类名时
try {
Class userEntityClass1 = Class.forName("devi.mint.entity.UserEntity");
System.out.println("UserEntity 的模板类: " + userEntityClass1);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//2. 在编译器知道类名
Class<UserEntity> userEntityClass2 = UserEntity.class;
System.out.println("UserEntity 的模板类2: " + userEntityClass2);
//3. 该类的实例对象已经得到, 通过实例对象获得 模板类
Class userEntityClass3 = user.getClass();
System.out.println("UserEntity 的模板类3: " + userEntityClass3);
//================获取模板类(结束)=============================
//================用反射查看类声明信息(开始)========================
System.out.println("============== 声明 =================");
String name = userEntityClass3.getSimpleName();
System.out.println("类名: " + name);
String packageName = userEntityClass3.getPackage().getName();
System.out.println("包名: " + packageName);
int modifiers = userEntityClass3.getModifiers();
String modifier = Modifier.toString(modifiers);
System.out.println("类修饰符(1: public)“ " + modifier);
String superClassName = userEntityClass3.getSuperclass().getSimpleName();
System.out.println("获取父类的名称: " + superClassName);
Class[] interfaces = userEntityClass3.getInterfaces();
String interfaceStr = "";
if (interfaces.length != 0) {
interfaceStr = "implement ";
for (int i = 0; i <= interfaces.length - 1; i++ ){
interfaceStr = interfaceStr + interfaces[i].getSimpleName();
if (i != interfaces.length - 1) {
interfaceStr = interfaceStr + 1;
}
}
}
System.out.println("获取接口: " + interfaceStr);
//打印完整的类声明
System.out.println("打印完整的类声明: ");
System.out.println("package " + packageName + ";");
System.out.println(modifier + " " + name + " extend " + superClassName + " " + interfaceStr + "{}");
//================用反射查看类声明信息(结束)========================
//================用反射查看类属性信息(开始)========================
System.out.println("============== 属性 =================");
Field[] allFields = userEntityClass3.getFields(); //获取所有的属性(包括继承获得的)
Field[] declaredFields = userEntityClass3.getDeclaredFields(); // 获取自身声明的属性
for (Field declaredField : declaredFields) {
String fieldName = declaredField.getName();
String fieldModifier = Modifier.toString(declaredField.getModifiers());
String fieldType = declaredField.getType().getSimpleName();
System.out.println(fieldModifier + " " + fieldType + " " + fieldName + ";");
}
//================用反射查看类属性信息(结束)========================
//================用反射查看类构造信息(开始)========================
System.out.println("============== 构造 =================");
// 获取所有的公共构造
Constructor[] allPublicConstructors = userEntityClass3.getConstructors();
//获取所有的构造(包括私有构造)
Constructor[] allConstructors = userEntityClass3.getDeclaredConstructors();
for (Constructor constructor : allConstructors) {
String consModifier = Modifier.toString(constructor.getModifiers());
String consName = constructor.getName();
Parameter[] consParameters = constructor.getParameters();
Class[] consExceptionTypes = constructor.getExceptionTypes();
String paraStr = "";
//打印参数
if(consParameters.length != 0){
for (int i = 0; i <= consParameters.length - 1; i++) {
paraStr = paraStr
+ consParameters[i].getType().getSimpleName()
+ " "
+ consParameters[i].getName();
if (i != consParameters.length - 1) {
paraStr += ",";
}
}
}
//打印抛出异常
String exStr = "";
if (consExceptionTypes.length != 0) {
exStr += " throws ";
for (int i = 0; i <= consExceptionTypes.length - 1; i++) {
exStr = exStr
+ consExceptionTypes[i].getSimpleName();
if (i != consExceptionTypes.length - 1) {
exStr += ",";
}
}
}
System.out.println(consModifier + " " + consName + "(" + paraStr + ")" + exStr + "{}");
}
//================用反射查看类构造信息(结束)========================
//================用反射查看类行为信息(开始)========================
System.out.println("============== 行为方法 =================");
Method[] declaredMethods = userEntityClass3.getDeclaredMethods();
if (declaredFields.length != 0) {
for (Method method : declaredMethods) {
String methodMod = Modifier.toString(method.getModifiers());
String returnType = method.getReturnType().getSimpleName();
String methodName = method.getName();
Parameter[] parameters = method.getParameters();
Class<?>[] exceptionTypes = method.getExceptionTypes();
//参数拼接
String paramStr = "";
if (parameters.length != 0) {
for (int i = 0; i <= parameters.length - 1; i++) {
paramStr = paramStr
+ parameters[i].getType().getSimpleName()
+ " "
+ parameters[i].getName();
if (i != parameters.length - 1) {
paramStr = paramStr + ",";
}
}
}
//抛出异常拼接
String exStr = "";
if (exceptionTypes.length != 0) {
exStr += " throws ";
for (int i = 0; i <= exceptionTypes.length - 1; i++) {
exStr = exStr
+ exceptionTypes[i].getSimpleName();
if (i != exceptionTypes.length - 1) {
exStr += ",";
}
}
}
System.out.println(methodMod + " "+ returnType + " " + methodName + "(" + paramStr + ")" + exStr + "{}");
}
}
//================用反射查看类行为信息(结束)========================
}
}