您的位置:首页 > 编程语言 > Java开发

Java反射获取类的完整结构

2017-06-03 22:19 337 查看
1.获取属性:

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

public class TestField {
public static void main(String[] args) {
Class clazz = Person.class;

//1.getField()只能获取到运行时类中及其父类中声明为public的属性
Field[] fields = clazz.getFields();
for (int i = 0; i < fields.length; i++) {
System.out.println(fields[i]);
}

//2.getDeclaredFields获取运行时类声明的所有属性
Field[] fields1 = clazz.getDeclaredFields();
for (Field f : fields1) {
System.out.println(f.getName());
}

//获取属性的各个部分的内容
Field[] fields2 = clazz.getDeclaredFields();
for (Field f : fields2) {
//1.获取每个属性的权限修饰符
int i = f.getModifiers();
String str = Modifier.toString(i);
//2.获取属性的变量类型
Class type = f.getType();
//3.获取属性名
System.out.println(f.getName());
}
}
}


2.获取方法:

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class TestMethod {
public static void main(String[] args) {
Class clazz = Person.class;
//1.getMethods()获取运行时类及其父类中所有的声明为public的方法
Method[] m1 = clazz.getMethods();
for (Method m : m1) {
System.out.println(m);
}

//2.getDeclaredMethods()获取运行时类本身声明的所有的方法,父类的就不行了!
Method[] m2 = clazz.getDeclaredMethods();
for (Method m : m2) {
System.out.println(m);
}

/*
注解、权限修饰符、返回值类型、方法名、形参列表、异常
*/
Method[] m3 = clazz.getDeclaredMethods();
for (Method m : m3) {
//注解
Annotation[] ann = m.getAnnotations();
//权限修饰符
String str = Modifier.toString(m.getModifiers());
//返回值类型
Class returnType = m.getReturnType();
//方法名
m.getName();
//形参列表
Class[] params =  m.getParameterTypes();
//异常
Class[] exp = m.getExceptionTypes();
}
}
}


3.获取构造器

import java.lang.reflect.Constructor;

public class TestConstructor {
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
String className = "com.test.Person";
Class clazz = Class.forName(className);
Constructor[] cons = clazz.getDeclaredConstructors();
}
}


4.其他

import com.sun.xml.internal.bind.v2.runtime.reflect.Lister;

import java.lang.annotation.Annotation;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

public class TestOther {
public static void main(String[] args) {
Class clazz = Person.class;
//1.获取运行时类的父类
Class superclass = clazz.getSuperclass();

//2.获取带泛型的父类
Type type1 = clazz.getGenericSuperclass();

//3.获取父类的泛型
ParameterizedType parameterizedType = (ParameterizedType)type1;
Type[] ars = parameterizedType.getActualTypeArguments();

//4.获取实现的接口
Class[] interfaces = clazz.getInterfaces();

//5.获取所在的包
Package p = clazz.getPackage();

//6.获取注解
Annotation[] annotations = clazz.getAnnotations();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: