36、java.lang.Class类
程序员文章站
2022-03-08 22:18:22
...
一、Class
- Class 类的实例表示正在运行的 Java 应用程序中的类和接口。
- 枚举是一种类,注释是一种接口。
- 每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。
- 基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象。
- Class 没有公共构造方法。
- Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。
二、理解
- Java程序中的各个Java类属于同一类事物,描述这类事物的java类名就是Class
- 对比:Person类代表人,它的实例对象就是张三李四这样一个个具体的人,
- Class类代表java类,它的各个实例对象又分别对应什么呢?
- 对应各个类在内存中的字节码,例如,Person类的字节码,ArrayList类的字节码,等等
- 一个类被类加载器加载到内存中,占用一片存储空间,这个空间里面的内容就是类的字节码,
- 不同的类的字节码是不同的,所以他们在内存中的内容是不同的,
- 这一个个空间可分别用一个个的对象来表示,这些对象显然具有相同的类型,这个类型就是Class
三、如何得到各个字节码对应的实例对象(Class类型)
- 类名.class,例如,System.class
- 对象.getClass(),例如,new Date().getClass()
- Class.forName(“类名”),例如,Class.forName(“java.util.Date”);
- 九个预定义Class实例对象,表示八个基本类型和 void。这些类对象由 Java 虚拟机创建,与其表示的基本类型同名
- 总之,只要是在源程序中出现的类型,都有各自的Class实例对象,例如,int[] , void
class ClassDemo
{
public static void main(String[] args) throws Exception
{
String str = "abc";
Class cls1 = str.getClass();
Class cls2 = String.class;
Class cls3 = Class.forName("java.lang.String");
System.out.println(cls1 == cls2);//true
System.out.println(cls2 == cls3);//true
System.out.println(cls1.isPrimitive());//false
System.out.println(int.class);//int
System.out.println(String.class);//class java.lang.String
System.out.println(int.class == Integer.class);//false
System.out.println(Integer.class);//class java.lang.Integer
System.out.println(int.class == Integer.TYPE);//true
System.out.println(int.class.isPrimitive());//true
System.out.println(int[].class);//class [I
System.out.println(String[].class);//class [Ljava.lang.String;
System.out.println(Float[].class);//class [Ljava.lang.Float;
System.out.println(float[].class);//class [F
System.out.println(long[].class);//class [J
System.out.println(void.class);//void
}
}
四、Class类常用方法
public final class Class<T> implements Serializable, GenericDeclaration, Type, AnnotatedElement
{
//返回与带有给定字符串名的类或接口相关联的 Class 对象,className - 所需类的完全限定名。
public static Class<?> forName(String className)
throws ClassNotFoundException{}
//如果存在该元素的指定类型的注释,则返回这些注释,否则返回 null
public <A extends Annotation> A getAnnotation(Class<A> annotationClass){}
//返回此元素上存在的所有注释
public Annotation[] getAnnotations(){}
//返回一个包含某些 Class 对象的数组,这些对象表示属于此 Class 对象所表示的类的成员的所有公共类和接口
public Class<?>[] getClasses(){}
//返回该类的类加载器
public ClassLoader getClassLoader(){}
//返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。parameterTypes 参数是 Class 对象的一个数组
public Constructor<T> getConstructor(Class<?>... parameterTypes)
throws NoSuchMethodException,
SecurityException{}
//返回一个包含某些 Constructor 对象的数组,这些对象反映此 Class 对象所表示的类的所有公共构造方法
public Constructor<?>[] getConstructors()
throws SecurityException{}
//返回此元素上存在的所有注释
public Annotation[] getDeclaredAnnotations(){}
//返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。name 参数是一个 String,用于指定所需字段的简称
public Field getField(String name)
throws NoSuchFieldException,
SecurityException{}
//确定此对象所表示的类或接口实现的接口。
public Class<?>[] getInterfaces(){}
//返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法
public Method getMethod(String name,
Class<?>... parameterTypes)
throws NoSuchMethodException,
SecurityException{}
//返回一个包含某些 Method 对象的数组
public Method[] getMethods()
throws SecurityException{}
//以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。
public String getName(){}
//获取此类的包
public Package getPackage(){}
//查找具有给定名称的资源
public InputStream getResourceAsStream(String name){}
//返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class
public Class<? super T> getSuperclass(){}
//如果此 Class 对象表示一个注释类型则返回 true
public boolean isAnnotation(){}
//当且仅当该类声明为源代码中的枚举时返回 true
public boolean isEnum(){}
//判定指定的 Object 是否与此 Class 所表示的对象赋值兼容。此方法是 Java 语言 instanceof 运算符的动态等效方法。
public boolean isInstance(Object obj){}
public boolean isInterface(){}
public boolean isArray(){}
//判定指定的 Class 对象是否表示一个基本类型
public boolean isPrimitive(){}
//创建此 Class 对象所表示的类的一个新实例。如同用一个带有一个空参数列表的 new 表达式实例化该类
public T newInstance()
throws InstantiationException,
IllegalAccessException{}
//将对象转换为字符串。字符串的表示形式为字符串 "class" 或 "interface" 后面紧跟一个空格,然后是该类的完全限定名,它具有 getName 返回的那种格式
public String toString(){}
}
下一篇: php页面缓存