Class类
来源:互联网 发布:网络黄金骗局举报电话 编辑:程序博客网 时间:2024/06/06 18:01
一、认识Class类
反射机制允许在运行时发现和使用类型的信息。在Java中用来表示运行时类型信息的对应类就是Class类,也继承Object类其内声明了数个应该在所有Java类中被改写的方法:hashCode()、equals()、clone()、toString()、getClass()等。其中getClass()返回一个Class类的对象。Class类样继承自Object,其实体用以表达Java程序运行时的类和接口
public final class Class<T> implements java.io.Serializable,GenericDeclaration,Type, AnnotatedElement { private static final int ANNOTATION= 0x00002000; private static final int ENUM = 0x00004000; private static final int SYNTHETIC = 0x00001000; private static native void registerNatives(); static { registerNatives(); } private Class(ClassLoader loader) {/* * (私有构造,只能由JVM创建该类) */classLoader = loader; }
Class类被创建Class对象,注意,Class对象表示的是自己手动编写类的类型信息,比如创建一个Shapes类,JVM就会创建一个Shapes对应Class类的Class对象,该Class对象保存了Shapes类相关的类型信息。实际上在Java中每个类都有一个Class对象,每当我们编写并且编译一个新创建的类就会产生一个对应Class对象并且这个Class对象会被保存在同名.class文件里(编译后的字节码文件保存的就是Class对象),那为什么需要这样一个Class对象呢?是这样的,当我们new一个对象或者引用静态成员变量时,Java虚拟机(JVM)中的类加载器子系统会将对应Class对象加载到JVM中,然后JVM再根据这个类型信息相关的Class对象创建我们需要实例对象或者提供静态变量的引用值。需要特别注意的是,手动编写的每个class类,无论创建多少个实例对象,在JVM中都只有一个Class对象,即在内存中每个类有且只有一个相对应的Class对象,通过下图理解(内存中的简易现象图):
二、综上:
(1)Class类也是类的一种,与class关键字是不一样的。
(2)手动编写的类被编译后会产生一个Class对象,表示的是创建的类的类型信息,保存在同名.class的文件中(字节码文件),比如创建一个Shapes类,编译Shapes类后就会创建其包含Shapes类相关类型信息的Class对象,并保存在Shapes.class字节码文件中。
(3)每个通过关键字class标识的类,在内存中有且只有一个与之对应的Class对象来描述其类型信息,无论创建多少个实例对象,其依据的都是用一个Class对象。
(4)Class类只存私有构造函数,因此对应Class对象只能有JVM创建和加载
(5)Class类的对象作用是运行时提供或获得某个对象的类型信息,(反射机制)
三、Class类加载
实际上所有的类都是在对其第一次使用时动态加载到JVM中的,当程序创建第一个对类的静态成员引用时,就会加载这个被使用的类(实际上加载的就是这个类的字节码文件),注意,使用new操作符创建类的新实例对象也会被当作对类的静态成员的引用(构造函数也是类的静态方法)。Java程序在它们开始运行之前并非被完全加载到内存的,是按需加载, 所以在使用该类时,类加载器首先会检查这个类的Class对象是否已被加载(类的实例对象创建时依据Class对象中类型信息完成的),如果还没有加载,默认的类加载器就会先根据类名查找.class文件(编译后Class对象被保存在同名的.class文件中),在这个类的字节码文件被加载时,它们必须接受相关验证,以确保其没有被破坏并且不包含不良Java代码(这是java的安全机制检测),完全没有问题后就会被动态加载到内存中,此时相当于Class对象也就被载入内存了(毕竟.class字节码文件保存的就是Class对象),同时也就可以被用来创建这个类的所有实例对象。下面通过一个简单例子来说明Class对象被加载的时机问题
- Class类
- Class(类)
- Class类
- 类(Class)
- Class类
- class类
- Class类
- Class类
- Class类
- class 类
- 类 Class
- Class类
- class类
- Class类
- 类.class
- 类(class)
- Class类
- 类class
- UNIX网络编程卷1:套接字联网API-第一部分:简介
- Android 实现微信登录
- 基于FPGA的VGA显示,简单的历程和注释(DE2-115)
- android 中的接口回调
- EL表达式和JSTL标签的区别
- Class类
- Python 与 Javascript 之比较
- 人工智能数据集描述——SVHN
- 【重大更新】DevExpress v17.1新版亮点(CodeRush篇)
- 本质
- Inno Setup入门实例教程 Inno Setup打包工具新手教程(图文)
- SDN
- Android Studio中Gradle的部分相关配置
- Linux-vi编辑器拷贝整行