标签:blog io ar java for sp 文件 on 2014
反射就是通过获取到的运行时类来获取到类所有的结构,如属性,方法,变量等
1、首先如何创建Class实例
Class class = Person.clsss;
1.1过程:源文件经过编译(javac.exe)会后。得到一个或者多个.class文件,经过运行(java.exe)这步,就需要进行类的加载(通过jvm的加载器)加载到内存中的缓存,每一个放入缓存的文件就是一个Class的实例
java.lang.Class就是反射的源头,接下来涉及到的类都在java.lang.reflect子包下面
1.2实例化Class类的三种方法:
//1调用运行时类的class属性
Class clazz1 = Person.class;
//2通过运行时磊的对象,调用getClass方法
Person p = new Person();
Class clazz2=p.getClass();
//3通过调用Class的静态方法forName(String className) 方法会报ClassNotFoundException
String className = "com.test.Person";
Class clazz3 = Class.forName(className);
2、有了Class实例以后,可以创建类对应的运行时的对象,获取类的完整的类的结构,包括:属性、方法、构造器、
包、父类、接口、泛型、注解、异常、内部类
如:Method[] m1 = class.getMethods();获取对应的运行时类中声明的权限为public的方法
Method[] m2= class.gettDeclaredMethods();获取到对应的运行时类的所有的方法,包括private和protected
@Test public void test1{ Class clazz = Class.forName("com.test.java.Animal"); Object object = clazz.newInstance(); Animal a = (Animal)object; System.out.println(a); } @Test public void test2{ Class clazz = Animal.class; Constructor constructor = clazz.getDeclaredConstructor(String.class,int.class); constructor.setAccessible(true); Animal animal = (Animal)constructor.newInstance("Tom",20); System.out.println(a); }
还可以调用对应的运行时类的制定的结构
标签:blog io ar java for sp 文件 on 2014
原文地址:http://blog.csdn.net/runningtortoises/article/details/40826283