首页 > 技术文章 > Java基础知识整理4:Class

ssj234 2017-02-12 19:54 原文

JDK描述

public final class Class
extends Object
implements Serializable, GenericDeclaration, Type, AnnotatedElement

Class 类的实例表示正在运行的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();

Class<Shape> obj=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() 将对象转换为字符串。

总结

推荐阅读