Class 类的讲解。
对于每一个类而言,JRE 都为其保留了一个不变的 Class 类型的对象。一个 Class 对象包含了特定某个结构 (class/interface/enum/annotation/primitive type/void/[])的有关信息。
Class本身也是一个类Class对象只能由系统创建对象- 一个加载的类在
JVM中只会有一个Class实例 - 一个
Class对象对应的是一个加载到JVM中的一个.class文件 - 每一个类的实例都会记得自己是由哪个
Class实例所生成 - 通过
Class可以完整的得到一个类的所有被加载的结构 Class类是Reflection的根源,针对任何你想同台加载、运行的类,唯有先获得对应的Class对象
Class 类的常用方法
| 方法名 | 功能说明 |
|---|---|
| static ClassforName(String name) | 返回指定类名 name 的 Class 对象 |
| Object newInstance() | 调用缺省构造函数,返回 Class 对象的一个实例 |
| getName() | 返回此 Class 对象所表示的实体 (类、接口、数组类或 void) 的名称 |
| Class getSuperClass() | 返回当前 Class 对象的父类的 Class 对象 |
| Class[] getinterfaces() | 获取当前 Class 对象的接口 |
| ClassLoader getClassLoader() | 返回该类的类加载器 |
| Constructor[] getConstructors() | 返回一个包含某些 Constructor 对象的数组 |
| Method getMethod(String name,Class.. T) | 返回一个 Method 对象,此对象的形参类型为 paramType |
| Field[] getDeclaredFields() | 返回 Field 对象的一个数组 |
| InputStream getResourceAsStream(String name) | 返回输入流 用法 - java - Properties |
获取 Class 类的实例
获取已知的具体的类,通过类的
class属性获取,此方法最安全可靠,性能最高Class person = Person.class;
已知某一个类的实例,通过调用该实例的
getClass()方法获取Class对象Class person = person.getClass();
已知一个类的全类名,且该类在类路径下,通过获取
Class类的静态方法forName()获取,可能抛除ClassNotFoundExceptionClass person = Class.forName("path")
内置基本数据类型可以直接
类名.Type还可以用
ClassLoader
1 | package com.redisc; |
哪些类型可以有 Class 对象
class: 外部类,成员(成员内部类、静态内部类)、局部内部类、匿名内部类interface: 接口[]:数组enum:枚举annotation: 注解@interfaceprimitive type: 基本数据类型void
1 | public class Test { |