反射的概念网上有很多,对于不是要太深入研究的开发者,我感觉可以简单的理解,就是程序运行时(程序)才知道具体要操作的时哪个类(这在通过Class.forName("类名")得到Class对象时体现的最明显)。
1.得到类Class对象的三种方法
①Class cla = Class.forName("com.jk.Person");
个人认为三种方法里这个方法最科学,最低的侵入性,体现了反射的概念。比如在一个方法中使用,该方法不用在代码中导入 Person这个类,在方法走到这行代码时,才会去创建这个类。
②Class cla = Person.class;
这种方法就需要在代码里导入Person这个类了。
③Person person = new Person();
Class cla = person.getClass();
这里都已经创建出Person对象了,就现在的理解来说,这种方法可能有点多余。
2.通过该类的Class对象得到对应类对象
Constructor constructor = cla.getConstructor();
Person person = (Person)constructor.newInstance();
或者用简写:
Person person = (Person)cla.newInstance();
方法也可以使用反射的方式调用,或者直接用得到的对象进行调用