构造Class对象的三种方式:
第一种方式:
(1)对于系统的类,必须写全名!
(2)该方式会将.Class文件装载到JVM中,会执行静态语句块!
Class c1 = Class.forName("Employee"); //c1引用保存内存地址指向堆中的对象,该对象代表的是Employee整个类.
第二种方式:
(1)java中每个类型都有 class 属性!
(2)该方法不会加载.Class文件,不执行静态语句块!
Class c2 = Employee.class;
第三种方式:
java语言中任何一个java对象都有 getClass 方法
Employee e = new Employee();
Class c3 = e.getClass(); //c3是运行时类 (e的运行时类是Employee)
注:因为Employee这个类在JVM中只有一个,所以c1,c2,c3的内存地址是相同的,指向堆中唯一的一个对象.
System.out.println(c1==c2); //true
System.out.println(c2==c3); //true
创建此 Class 对象所表示的类的一个新实例:
Class c = Class.forName("Employee");
Object o = c.newInstance(); //调用了Employee的无参数构造方法.
注:如果没有无参数构造方法,则会报错!
System.out.println(o); //Employee@c17164