JAVA反射机制是在运行状态中,对于任意一个类,都可以知道这个类的全部属性和方法;对于任意一个对象,都可以调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。——百度百科html
每个java类都对应着一个Class对象,程序编译阶段Class类对象被变成字节码文件存放于类路径下(即.class文件),当java类第一次被装载时jvm会建立该类的Class对象。Class类对象中包含着该类的所有信息,包括变量、方法等。java
jvm启动时,并不是一次性将全部能识别的类所有都加载到内存中,实际上类的加载时机是在该类第一次被使用时被加载的。使用一个类时的大体的加载流程以下:jvm
类的空间分配:指分配静态常量成员的空间ide
类初始化:对静态常量成员进行初始化及静态代码块的执行,若有超类,先对超类初始化spa
1 package TestRefection; 2 3 import org.junit.Test; 4 5 public class ListTest { 6 7 @Test 8 public void testHelloWorld() { 9 try { 10 Class.forName("TestRefection.TestClass1"); 11 Class clazz = TestClass3.class; 12 new TestClass2(); 13 } catch (ClassNotFoundException e) { 14 // TODO Auto-generated catch block 15 e.printStackTrace(); 16 } 17 } 18 19 } 20 21 class TestClass1 { 22 static { 23 System.out.println("=================TestClass1================"); 24 } 25 } 26 27 class TestClass2 { 28 static { 29 System.out.println("=================TestClass2================"); 30 } 31 } 32 33 class TestClass3 { 34 static { 35 System.out.println("=================TestClass3================"); 36 } 37 } 38 39 -------------------------执行结果------------------------- 40 =================TestClass1================ 41 =================TestClass2================
为了在程序运行的过程经过反射对已有类或对象作一些操做,均须要获取Class对象,获取Class对象有如下三种方法:code
在Java中,Class类与java.lang.reflect类库一块儿对反射技术进行了全力的支持。其中反射库中Constructor类用于操做构造方法、Method类用于操做方法、Field类用于操做变量。其具体的使用能够见下一章。htm
关于反射技术的具体使用,不少书籍和文章都已经有了详细的说明,如下转载一篇反射技术的使用方法的文章,转载地址:对象
http://www.cnblogs.com/zhaoyanjun/p/6074887.htmlblog