Java反射的理解
一、什么是反射
反射是Java提供的动态获取对象和调用对象方法的功能。我们知道在Java中,获取对象的最常用的办法是通过关键字“new”,但这要我们事先将需要获取的对象写死在代码里,在代码运行期间无法改变。而Java的反射机制可以让我们动态获取对象,在代码运行期间才决定获取哪个对象。
二、反射的作用
Java引入反射机制,是为了提高程序的灵活性,减少代码之间的耦合度。比如我们要实例化一个Person类,如果不使用反射,我们只能通过关键字“new”进行实例化:
1 Person person = new Person();
被实例化的类写死在了代码中,运行期间不可更改。但如果我们使用反射,则代码如下:
1 public class Test1 { 2 public static void main(String[] args) { 3 4 Object object; 5 String className = "person.Person"; //Person类的全类名 6 7 try { 8 object = Class.forName(className).newInstance(); //获取Person类的运行时类并实例化 9 } catch (Exception e) { 10 e.printStackTrace(); 11 } 12 } 13 }
反射支持我们使用全类名来获取对象,并且可以通过变量来传值。这样,我们就可以在代码的运行期间动态的决定实例化哪个类。不仅如此,我们还可以将类描述定义到配置文件中,如果想要实例化其他类,修改配置文件就可以了,而不需要修改代码再重新编译。这样就降低了代码之间的耦合度。
Java的反射机制还提供了很多方法可以获取运行时类、进行类实例化、获取类的属性、获取类的方法、获取类的构造函数等。
反射机制一般在框架中使用的较多,因为框架需要适应多种情况,对灵活性要求教高。理解好反射,是理解框架技术的基础。