作为初学java且无知的我,写下这段文字是多么的忐忑。如果有人被如下文字误导了,在醒悟的时候请提醒下我,因为我仍然被我自己误导中。多谢!
如下截屏《Java编程思想(第四版)》
从这一段话,我抽象出
1:Class对象是存在的,包含一个类有关信息,而且用来创建类的“常规”对象;
2:编译一个新类,就会产生一个Class对象(....)?.class文件是二进制文件,Class对象被保存在其中?
3:Class对象和类加载器相关。
查看JDK API接口
java.lang
类 Class<T>
java.lang.Object继承者
java.lang.Class<T>
Class 没有公共构造方法。Class对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。
方法:
getClassLoader() 获取该类的类装载器。
getComponentType() 如果当前类表示一个数组,则返回表示该数组组件的 Class 对象,否则返回 null。
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编程思想(第四版)》 中简略描述类加载过程
1:查找和类名匹配的.class二进制字节码文件;
2:加载到内存,并接受验证;同时生成了类对应Class对象,而且还存在一个Class对应的引用;
3:通过此Class对象找到此类的装载器创建这个类的对象;
4:Class类中提供了一系列的方法。
总结:
1:Class对象在加载过程中生成,一个类存在一个Class对象,和实例化对象个数无关;
2:对象创建的基石,记录了类的加载器,通过Class对象可以获得类的基本信息;
3:概念对于后期学习反射和jvm有很大作用。
文章介绍Class对象比较少,其实就是为了表达这个东西它存在,而且作用还不小。