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