1.背景:spring中大量使用了Java的反射特性进行IOC,有必要了解Java反射机制
2.基本概念:反射是Java语言的一个特性,允许程序在运行时进行自我检查和内部成员的操作。如下代码
3.反射的优点与缺点:反射是一种动态编译(在运行时确定类型,绑定对象),与之对应的是静态编译(在编译时确定类型,绑定对象)。反射能发挥Java的灵活性,降低类之间的耦合性。在JavaEE编程中经常用到,尤其Spring的IOC就是使用了Java的发射这一特性。虽然反射能很好的发挥Java的灵活性,但这也是以牺牲一部分性能为代价的。
4.反射常用的API
(1)获取class对象
在JavaAPI中,获取Class类对象有三种方法:
第一种,使用Class.forName静态方法。当你知道该类的全路径名时,你可以使用该方法获取Class类对象。如下例子
Classclz=Class.forName("java.lang.String");
第二种,使用.class方法。
这种方法只适合在编译前就知道操作的Class。如下例子
Classclz=String.class;
第三种,使用类对象的getClass()方法。如下例子
Stringstr=newString("tony");
Classclz=str.getClass();
(2)通过反射创建类对象
通过反射创建类对象主要有两种方式:通过Class对象的newInstance()方法、通过Constructor对象的newInstance()方法。
第一种:通过Class对象的newInstance()方法。如下例子
Classclz=User.class;
Useruser=(User)clz.newInstance();
第二种:通过Constructor对象的newInstance()方法。如下例子
Classclz=User.class;
Constructorconstructor=clz.getConstructor();
Useruser=(User)constructor.newInstance();
通过Constructor对象创建类对象可以选择特定构造方法,而通过Class对象则只能使用默认的无参数构造方法。下面的代码就调用了一个有参数的构造方法进行了类对象的初始化。如下
Classclz=User.class;
Constructorconstructor=clz.getConstructor(String.class,int.class);
Useruser=(User)constructor.newInstance("tony",18);
(3)通过反射获取属性、方法、构造器等
我们通过Class对象的getFields()方法可以获取Class类的属性,但无法获取私有属性。而如果使用Class对象的getDeclaredFields()方法则可以获取包括私有属性在内的所有属性。
以上就是长沙中公优就业java培训机构的小编针对“Java基础学习:Java反射机制学习”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。
Java基础学习