JDK描述
public final class Class
extends Object implements Serializable, GenericDeclaration, Type, AnnotatedElementClass 类的实例表示正在运行的Java应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象。
Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。
以下示例使用 Class 对象来显示对象的类名:
void printClassName(Object obj) { System.out.println("The class of " + obj + " is " + obj.getClass().getName()); }
使用
原理
Java中所有的对象都继承Object对象,在Object中有一个方法:getClass(),这个方法返回对象的Class类,Class类是一个保存类的元数据的类,由JVM创建。如类Shape的变量、函数等描述信息都保存在Shape的Class实例之中。
Class的相关代码大多是native方法,暂时先放放
获得Class类
- 使用Class.forName("shape");
- 使用对象的getClass()方法
- 使用类的常量,如String.class
使用Class实例生成对应类的实例
- 使用Class的newInstance方法
Class obj=Class.forName("shapes");Object ShapesInstance=obj.newInstance();Classobj=Class.forName("shapes");Shape shape=obj.newInstance();
方法
class的方法可以获得类加载器、类内部声明的构造函数、属性和方法,还可以查找资源,获取父类相关信息,判断是否是数组、接口、基本类型等。还可以根据Class实例化其描述的对象。
- getClassLoader() 获取该类的类装载器。默认调用native方法
- getComponentType() 如果当前类表示一个数组,则返回表示该数组组件的 Class 对象,否则返回 null。 这是一个native方法
- getConstructor(Class[]) 返回当前 Class 对象表示的类的指定的公有构造子对象。
- getConstructors() 返回当前 Class 对象表示的类的所有公有构造子对象数组。
- getDeclaredConstructor(Class[]) 返回当前 Class 对象表示的类的指定已说明的一个构造子对象。
- getDeclaredConstructors() 返回当前 Class 对象表示的类的所有已说明的构造子对象数组。
- getDeclaredField(String) 返回当前 Class对象表示的类或接口的指定已说明的一个域对象。 * getDeclaredFields() 返回当前 Class 对象表示的类或接口的所有已说明的域对象数组。
- getDeclaredMethod(String, Class[])返回当前Class对象表示的类或接口的指定已说明的一个方法对象。
- getDeclaredMethods() 返回 Class 对象表示的类或接口的所有已说明的方法数组。
- getField(String) 返回当前 Class 对象表示的类或接口的指定的公有成员域对象。
- getFields() 返回当前 Class 对象表示的类或接口的所有可访问的公有域对象数组。
- getInterfaces() 返回当前对象表示的类或接口实现的接口。
- getMethod(String, Class[]) 返回当前 Class 对象表示的类或接口的指定的公有成员方法对象。
- getMethods() 返回当前 Class 对象表示的类或接口的所有公有成员方法对象数组,包括已声明的和从父类继承的方法。
- getModifiers() 返回该类或接口的 Java 语言修改器代码。
- getName() 返回 Class 对象表示的类型(类、接口、数组或基类型)的完整路径名字符串。
- getResource(String) 按指定名查找资源。
- getResourceAsStream(String) 用给定名查找资源。
- getSigners() 获取类标记。
- getSuperclass() 如果此对象表示除 Object 外的任一类, 那么返回此对象的父类对象。
- isArray() 如果 Class 对象表示一个数组则返回 true, 否则返回 false。
- isAssignableFrom(Class) 判定 Class 对象表示的类或接口是否同参数指定的 Class 表示的类或接口相同,或是其父类。
- isInstance(Object) 此方法是 Java 语言 instanceof 操作的动态等价方法。
- isInterface() 判定指定的 Class 对象是否表示一个接口类型。
- isPrimitive() 判定指定的 Class 对象是否表示一个 Java 的基类型。
- newInstance() 创建类的新实例。
- toString() 将对象转换为字符串。
总结
- Java中Class类详解、用法及泛化 []
- System.getSecurityManager() 默认没有安全管理器,如何设置,作用是什么?
- 类加载机制ClassLoader