学习掌握Java的反射,是为了之后高级的Java学习铺路。所以在基本了解Java的基础之上,让我们来看Java的反射。首先从Class类的使用开始。
之前在编写每个类的时候,并没有想太多,就是仅仅为了创造一个需要使用的对象,没有考虑到面向对象的思想。可能想一下的话,我会认为:我所创建的类,就是一个对象,在用的时候使用之,对其进行各种操作等,这就是所谓的面向对象。然而,在了解Class类之后,是更进一步的,从编程的根本出发,我是这样认为的,从编程的角度说,我所创造的这个类,究竟是谁的对象?结果就是面向对象里面皆对象的Class类,类是对象,类是Class类的对象。
任何一个类都是Class类的实例对象。这句话怎么理解呢。我认为这个就是站在面向对象编程语言的世界去看待,就Class类就好比天空,任何一个类就好比地上的万事万物,从天空上可以看到地上的任何事物,所以Class类就可以看到,专业语言就是实例化任何一个类。
当时在看到这块时,并没有什么感觉。在之后的动态类加载才恍然大悟。我们所面对的Class究竟有多厉害。
就来说说用Class类实例化类的三个方法。
比如现在这里有一个定义类food();
1.在知道了类名之后,任何一个类都有一个隐含的静态成员变量class
Class c1=food.class;
2.假设food类有一个实例对象food f1=new food(); 那么
Class c2=f1.getClass();
刚才写到2方法后我也冒出这个想法,咦那么这c1,c2究竟是哪个的实例对象呢?明明都有f1是food的实例对象,那c2又是什么,c1还好理解。
在回顾视频之后,点出:
官网指出,c1,c2表示了food的类类型(class type)
听下来的意思就是,c2就好比是苹果成熟,f1就好比是小苹果,当c2就是比f1吊,因为f1是Class实例化对象food类的再次实例化对象,c2就直接是Class手下的了。
3.通过类名直接创建
Class c3=null;
c3=Class.forname("XXXXX"); //XXXX为具体类位置:包名+类名
而第三种方法也将是以后使用最多的方法。就我目前所理解的。
从以上三种方法就是可以用类的类类型来创建类的实例对象,需要注意的是在实例对象时要进行强制转换。
注:学习内容源于慕课网。