1.获取Class对象
City是一个普通的pojo。以下暂时如何使用反射获取类对象。
public class TestClass { public static void main(String[] args) { City city = new City(); Class c1 = City.class; Class c2 = city.getClass(); Class c3 = null; try { c3 = Class.forName("com.example.demo.entity.City"); } catch (ClassNotFoundException e) { e.printStackTrace(); } System.out.println(c1); System.out.println(c2); System.out.println(c3); }
结果:
class com.example.demo.entity.City
class com.example.demo.entity.City
class com.example.demo.entity.City
2.Class.forName()、Class.forName().newInstance() 、New 三者区别
new:实例化对象,生成一个object类型,并在堆中开辟一块内存,并将object放入。
Class.forName():获得一个已加载过的class对象。(new可以没有加载也可以已经加载了)
Class.forName().newInstance() :等同于new,但是new可以根据参数调用其他的构造函数,但是newInstance()只能调用无参的构造方法。同时也是反射的缺点,效率都比较低