Java反射获取类的完整结构
2017-06-03 22:19
337 查看
1.获取属性:
2.获取方法:
3.获取构造器
4.其他
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(); } }
相关文章推荐
- java - 通过反射调用类的完整结构
- 21天精通java基础之Day19通过反射机制获得类的完整结构
- java反射(三):通过反射类获取类的属性结构(1)
- java中反射机制通过字节码文件对象获取字段和函数的方法
- java用数据库获取的list数据构造hashmap树结构
- java.lang.reflec 运用及反射方法获取实例
- Java--Reflect(反射)专题3——获取类的方法的所有信息
- java中通过反射获取成员方法并使用
- Java之反射获取私有成员变量-yellowcong
- Java自定义注解和运行时靠反射获取注解
- java 通过反射获取泛型的类型
- Java反射,根据类名创建带参数的实例(获取参数类型,参数等)
- java 反射获取成员
- Java反射特性--获取其他类实例并调用其方法
- java反射获取类信息
- java反射各种属性获取
- java中通过反射获取方法并且调用(getMethod和invoke深入)实践
- Java 反射之获取方法对象
- java反射获取相关值
- Java反射获取成员方法