标签:
在学习反射之前,让我们先了解“类(Class)”。“方法”、“属性”、“类”都是名词,那么相应的在Java中会有这样一些特殊的类:“方法类(Method类)”、“属性类(Field类)”、“构造器类(Constructor类)”、“类类(Class类)”。
如上所示,任何Java的类或接口都是Class类的一个实例。
反射就是Java自我管理这些(类,对象)的机制。
1) 反射的作用
2) Class加载
类加载到内存:Java将磁盘类文件加载到内存中吗,为一个对象(实例),这个对象是Class的实例。
3) Class实例代表Java中类型
Class cls = String.class; Class cls = Class.forName("java.lang.String"); Class cls = "abc".getClass();
1.通过放射获得队形的类/属性/方法/构造器
反射演示_“发现”对象的类/属性/方法/构造器
package reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Arrays; /** * 反射演示 */ public class ReflectDemo { public static void main(String[] args) throws ClassNotFoundException { reflect("s"); //java.lang.String reflect(1); //java.lang.Integer } /** * 反射方法,用于发现 * obj 的类型是什么 * obj 有哪些属性 * obj 有哪些方法 * obj 有哪些构造器 * @param obj 表示被“反射”的对象,被用于“发现”的对象 */ public static void reflect(Object obj) { //1. getClass() // 返回对象的类型,是Object类的方法 Class<?> cls = obj.getClass(); System.out.println("类:" + cls.getName()); //2. getDeclaredFields(); // 返回在类上获得声明的所有属性(字段) Field[] fields = cls.getDeclaredFields(); System.out.println("属性:"); for(Field field : fields) { System.out.println( field.getType()+" :" + //属性类型 field.getName()); //属性名称 } //3. getDeclaredMethods // 返回在类上获得声明的所有方法 Method[] methods = cls.getDeclaredMethods(); System.out.println("方法:"); for(Method method : methods) { System.out.print(method.getReturnType()+" "); System.out.print(method.getName()+" "); System.out.println( Arrays.toString(method.getParameterTypes())); } //4. getDeclaredConstructors // 返回在类上获得声明的所有构造器 Constructor[] constructors = cls.getDeclaredConstructors(); System.out.println("构造器:"); for(Constructor c : constructors) { System.out.print(c.getName() + " "); System.out.println( Arrays.toString(c.getParameterTypes())); } } }
标签:
原文地址:http://www.cnblogs.com/chaizp/p/5128297.html