一、反射的概述
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
以上的总结就是什么是反射
反射就是把java类中的各种成分映射成一个个的Java对象
例如:一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成一个个对象。
(其实:一个类中这些成员方法、构造方法、在加入类中都有一个类来描述)
如图是类的正常加载过程:反射的原理在与class对象。
熟悉一下加载的时候:Class对象的由来是将class文件读入内存,并为之创建一个Class对象。
1、获取Class对象的三种方式
1.1 Object ——> getClass();
1.2 任何数据类型(包括基本数据类型)都有一个“静态”的class属性
1.3 通过Class类的静态方法:forName(String className)(常用)
1. <span style="font-size:18px;">package fanshe; 2. /** 3. * 获取Class对象的三种方式 4. * 1 Object ——> getClass(); 5. * 2 任何数据类型(包括基本数据类型)都有一个“静态”的class属性 6. * 3 通过Class类的静态方法:forName(String className)(常用) 7. * 8. */ 9. public class Fanshe { 10. public static void main(String[] args) { 11. //第一种方式获取Class对象 12. Student stu1 = new Student();//这一new 产生一个Student对象,一个Class对象。 13. Class stuClass = stu1.getClass();//获取Class对象 14. System.out.println(stuClass.getName()); 15. 16. //第二种方式获取Class对象 17. Class stuClass2 = Student.class; 18. System.out.println(stuClass == stuClass2);//判断第一种方式获取的Class对象和第二种方式获取的是否是同一个 19. 20. //第三种方式获取Class对象 21. try { 22. Class stuClass3 = Class.forName("fanshe.Student");//注意此字符串必须是真实路径,就是带包名的类路径,包名.类名 23. System.out.println(stuClass3 == stuClass2);//判断三种方式是否获取的是同一个Class对象 24. } catch (ClassNotFoundException e) { 25. e.printStackTrace(); 26. } 27. 28. } 29. }</span>
注意:在运行期间,一个类,只有一个Class对象产生。
三种方式常用第三种,第一种对象都有了还要反射干什么。第二种需要导入类的包,依赖太强,不导包就抛编译错误。一般都第三种,一个字符串可以传入也可写在配置文件中等多种方法。
转载文章:http://blog.csdn.net/sinat_38259539/article/details/71799078