java.lang.Class是一个比较特殊的类,它封装了被装入到JVM中的类(类和接口)的信息。
当一个类或者是接口被转入到JVM中,便会产生与之关联的java.lang.Class对象,通过这个对象可以对被装入的类的信息进行访问。
获得一个类所对应的Class对象,有三种方式。
1.通过使用java.lang.Object中的.getClass()方法
比如:
Date date1 = new Date();
Date date2 = new Date();
Class d1 = date1.getClass();
Class d2 = date2.getClass();
System.out.println(d1.getName()); //java.util.Date
System.out.println(d1== d2); //true
上面代码中,date1.getClass()方法中返回的是封装了Date的信息的java.lang.Class对象
注意:代码中的date1和date2的getClass方法返回了相同的class对象(c1==c2的值为true)。这是因为,对于相同的类,JVM只会
载入一次,而与该类对应的class对象也只会存在一个,无论该类实例化了多少对象。
2.使用.Class的方式
使用类名加“.Class”的方式即会返回与该类对应的Class对象。例如:
Class s = String.Class;
System.out.println(s.getName()); // java.lang.String
这个方法可以直接获得与指定类联的Class对象,而并不需要有该类的对象存在。
3.使用Class.forName方法
Class有一个的静态方法.forName:
该方法可以根据字符串参数所指定的类名获取与该类关联的Class对象。如果该类还没有被装入,该方法会将该类装入JVM。
需要注意的是:forName方法的参数是类的完整限定名(即包含包名)。