我对java反射机制的理解

时间:2021-05-25 05:10:34

我们平常怎么用一个使用类,怎么使用类的方法?
其实就是创建一个对象,并且通过这个对象调用这个方法。不过这有一个问题,就是这个对象的载体就和这个对象产生了耦合,怎么降低两者间的耦合呢?java的反射机制就实现了这样的功

能,通过Class.forname().newinstance去构造一个类(注意对比Class.forname和Class.forname().newinstance()),这个类可以看做虚拟的类,然后通过这个类去获取方法,并调用。然后你

会发现是这个虚拟的类,与这个类的载体发生了耦合,从某个的角度上来说,这种耦合就降低了。因为这个虚拟类并不是这个系统的驱动类。

而反射机制的,我暂时所了解的应用有这么两个:
1.从Class.forname("数据库驱动")说起。这句语句的作用,我们一直说是加载驱动,为什么这么说呢?因为数据库驱动这个类里面有一个静态块,语句是DriverManager.registerDriver(new

Driver());,即是用来加载驱动的。也就是说,通过创建一个类的实例,来加载这个静态块,以实现加载驱动。
所以说,Class.forName的作用了你New "数据库驱动"的作用是一样的。

2.通过这个实例去获得方法,然后通过method.invoke("对象",“方法参数”。。。),去调用这个方法。

这是有关反射的,如下解释:
String str = "T";
Class c = Class.forName(str); //获取以T为类名的类
Object o = c.newInstance(); //实例化c