Class 是一个类,它的构造方法是私有的,它由类加载器创建 Class 对象,我们可以通过 对象的 getClass() 方法获取到 Class 对象。
Class 表示类一个类的本身,它可以得到一个类里面的完整结构,包括类里面的属性,方法定义等等。
方法名称 | 描述 |
---|---|
public static Class<?> forName(String className) throws ClassNotFoundException | 传入一个完整的报名加类名来实例化 Class 对象 |
public Constructor<?>[] getConstructors() throws SecurityException | 获取一个类里面的所有的构造函数 |
public Field[] getDeclaredFields() throws SecurityException | 获取本类里面所有单独定义的属性 |
public Field[] getFields() throws SecurityException | 获取该类里面的权限是 public 类型的属性 |
public Method[] getMethods() throws SecurityException | 获取一个类里面的全部方法 |
public Class<?>[] getInterfaces() | 获取所有被这个类实现的接口 |
public String getName() | 得到当前类对象完整的包+类名称 |
public T newInstance() throws InstantiationException,IllegalAccessException | 根据 Class 定义的类实例化对象 |
因为 Class 没有任何构造方法,如果想使用 Class 对象就需要通过 forName 方法来实例化对象。除了这个方法,我们也可以通过 类.class
或者 对象.getClass()
方法实例化。
我们先定义一个供我们访问的测试类 PersonForClass.java
package com.haicoder.net.cls;
public class PersonForClass {
private Integer age;
private String name;
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public PersonForClass() {
}
public PersonForClass(Integer age, String name) {
this.age = age;
this.name = name;
}
}
定义一个测试类
package com.haicoder.net.cls;
public class ClassTest {
public static void main(String[] args) {
System.out.println("嗨客网(www.haicoder.net)");
Class<?> class1 = null;
Class<?> class2 = null;
Class<?> class3 = null;
try {
class1 = Class.forName("com.haicoder.net.cls.PersonForClass");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
class2 = new PersonForClass().getClass();
class3 = PersonForClass.class;
System.out.println(" Class.forName() 得到的类名称:" + class1.getName());
System.out.println(" 对象.getClass 得到的类名称:" + class2.getName());
System.out.println(" 类.class 得到的类名称:" + class3.getName());
}
}
运行结果如下:
通过运行结果我们看到三种方式得到的结果是一样的,但是通过 forName 这种方式来获取是比较通用的。 类.class
或者 对象.getClass()
都需要知道具体的实现类,如果不知道实现类在使用的时候会有一些限制,但是 forName 里面传递的是一个字符串,类的路径。它让程序具备了更大的灵活性。
Class 类表示的是一个类的本身,通过它的对象,你可以获取到类里面的相关信息,比如属性的信息,方法的信息等等。