Class类
系统里面保存的runtime type identification跟踪了每个object属于的class。
虚拟机利用runtime type information再根据上面的信息来选择正确的方法去执行。事实上虚拟机为每个类型都管理一个Class对象。
在Java里面,上述信息也可以通过一个特殊的class来获得——CLass。
那么如何得到Class类的实例呢?coreJava上列举了三种方法。
- Object类的getClass方法;
-
Employee e; ... Class cl = e.getClass();//这里得到一个Class实例,可以使用getName来获得此实例代表的类名字,如果类在包里面,包的名字也会作为类名的一部分。 String name = cl.getName();
- Class类的forName方法(此方法需要异常处理器)
-
//当类名保存在字符串中并可在运行中改变(循环结构),就可以使用这个方法。 static Class forName(String className);//returns the Class object representing the class with name className String className = "java.util.Random";//这里的字符串必须是类名或者接口名,否则会抛出异常,所以需要异常处理器 Class cl = Class.forName(className);
- 对任意Java类型T使用T.class
-
Class cl1 = java.util.Random.class; Class cl2 = Double[].class; Class cl3 = int.class;//值得注意的是,一个Class对象实际上表示的是一个类型,而这个类型不一定是类
The Class class is actually a generic class. For example, Employee.class is of type Class.
对于类来说,有一个快速创建类的实例的方法newInstance.可以和上面的getClass以及forName结合起来。
//java.lang.Class Object newInstance();//返回类的一个新实例,调用默认构造器(无参数) //java.lang.reflect.Constructor Object newInstance(Object[] args);//提供参数 Object m = e.getClass().newInstance();//一个例子 m = Class.forName(e.getClass().getName()).newInstance();//这样貌似也可以