Java中的Class类
综述:
Java中的Class也是属于一种特殊的类,它记录着类的信息,是一种记录类的信息的类。
在Java程序中:
在Java程序运行期间,系统始终为所有对象维护一个运行时类型标志。这个信息会跟踪每个对象所属的类,JVM(虚拟机)需要据此来执行正确的方法。此时,如果要访问这些信息,就可以利用Class类获取这些信息,就像其他对象会描述一个对象的属性一样,Class对象会描述一个特定类的属性。
如何获取一个类的信息:
1.运用Object中的getClass方法,该方法会返回一个Class类型的实例。比如:
String e = new String("hello");
Class cl = e.getClass();
此时cl就成为了String 类的 一个Class实例。
2.使用静态方法forName获取类名对应的Class对象。比如:
String className = "java.util.String";
Class cl = Class.forName(className);
此处要注意,如果类在一个包里,包的名字也作为类的一部分,如果只是简写,比如:
String className = "String";
Class cl = Class.forName(className);
是会报错的。
3.使用.class字段
若A为任意的Java类型(或void)关键字,A.class将匹配所代表的类对象。
比如:
String className = "hello";
Class cl = String.class;
要注意,一个Class对象实际上表示的是一个类型,这可能是类,也可能不是,比如int为基本的数据类型,但它不是一个类,但int.class是一个Class类型的对象,它描述的是int类型的信息
基本的实际应用:
1.获取一个对象的类名。
Class里有getName方法,用于返回一个保存类名的字符串(同样包括包的名称),例如:
String test = "hello";
Class cl = String.class;
String className = cl.getName();// 此时字符串的内容为:java.util.String
2.实现两个类对象的比较。
由于虚拟机只为每个类型管理一个唯一的Class对象,所以可以用 == 运算符实现两个类对象的比较。比如:
if(A.getClass() == String.class) ...
如果A是一个String类型的对象,该表达式就为真,但是其与 instanceof 运算符不同,即使A为String的子类,该表达式即为假
3.用来用构造器来构造实例,比如:
String name = "java.util.String";
Class cl = Class.forName(name);
Object obj = cl.getConstructor().newInstance();
此处为简单演示,具体应用可以参照构造器的相关知识。