Java中的Class类以及获取Class对象的三种⽅式Java中的Class类以及获取Class对象的三种⽅式
java.lang.Class
之前Hadoop⾥⾯job.setMapperClass(Map.class)之类的⽅法⽤到了xxx.class的写法,当时也没有深究。这两天⼜遇到了Class()的写法,稍微看了⼀下。
java API⾥这样写道:
Class 类的实例表⽰正在运⾏的 Java 应⽤程序中的类和接⼝。枚举是⼀种类,注释是⼀种接⼝。每个数组属于被映射为 Class 对象的⼀个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表⽰为 Class 对象。
Class 没有公共构造⽅法。Class 对象是在加载类时由 Java 虚拟机以及通过调⽤类加载器中的 defineClass ⽅法⾃动构造的。
每个类在编译后都会产⽣⼀个Class对象,被保存在同名.class⽂件中。运⾏时,类加载器检查所需的类的Class对象是否已经加载,如果没有,就从.class⽂件中加载该类的Class对象,然后⽤该Class对象创建该类的所有对象。
获得⼀个Class对象
className.class
形如className.class,我们称之为类字⾯常量。
1Class c = java.awt.Button.class;
2Class c = Integer.TYPE;
注意:
TYPE⽤于基本数据类型的包装器类。TYPE字段是⼀个引⽤,指向对应的基本数据类型的Class对象。所以:
1boolean.class 等价于 Boolean.TYPE
2char.class 等价于 Char.TYPE
<
java.lang.Object类的getClass()⽅法返回此时Object的Runtime类。
故⽽在可以获得实例的情况下,可以使⽤该⽅法:
Class c = Class();
如:
1TextField t = new TextField();
2Class c = t.getClass();
3Class s = c.getSuperclass();
Class.forName(String className)
Class.forName(str)返回与带有给定字符串名的类或接⼝相关联的 Class 对象。要求str为所需类的完全限定名。如:
Class c1 = Class.forName (“java.lang.String”);
String str = “java.awt.Button”;
Class c2 = Class.forName (str);
Class c3 = Class.forName (“java.util.LinkedList$Entry”);
五菱单排小货车报价同时forName()⽅法要求必须catch异常 ClassNotFoundException。
如下例⼦程序:
1import java.awt.Button;
2
油罐车为什么爆炸3public class Test {
4
2013motogp5 public static void main(String[] args) {
6 String str = "java.awt.Button";
7 try {
8 Class c2 = Class.forName(str);
9 System.out.Name());
10 }
重庆机动车交通违章查询11 catch(Exception e) {
12
13 }
14 }
15}
Referencej20 发动机
奔驰cclass1.
2. Thinking in Java
发布评论