博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对Class类的理解与整理
阅读量:6812 次
发布时间:2019-06-26

本文共 2235 字,大约阅读时间需要 7 分钟。

hot3.png

1、Class类理解作用。

    1.1、Class是一个java类。跟Java API中定义的诸如Thread、Integer类、我们自己定义的类是一样,也继承了Object(Class是Object的直接子类)。总之,必须明确一点,它其实只是个类,只不过名字比较特殊。更进一步说,Class是一个java中的泛型类型。

    1.2、Class类是普通类的抽象。对于我们自己定义的类,我们用类来抽象现实中的某些事物,比如我们定义一个名称为Car的类来抽象现实生活中的车,然后可以实例化这个类,用这些实例来表示我的车、你的车、黄的车、红的车等等。好了,现在回到Class 类上来,这个类它抽象什么了?它的实例又表示什么呢?在一个运行的程序中,会有许多类和接口存在。我们就用Class这个来来表示对这些类和接口的抽象,而Class类的每个实例则代表运行中的一个类。例如,运行的程序有A、B、C三个类,那么Class类就是对A、B、C三个类的抽象。所谓抽象,就是提取这些类的一些共同特征,比如说这些类都有类名,都有对应的hashcode,可以判断类型属于class、interface、enum还是annotation。这些可以封装成Class类的域,另外可以定义一些方法,比如获取某个方法、获取类型名等等。这样就封装了一个表示类型(type)的类。

    其实任何一个类,都会有一个Class对象于这个类对应,在这个Class对象中,保存着实例化该类时所需要的基本信息,A.class  其实返回的是一个类A的Class对象。、

    1.3、Class类是反射的基础。没有Class类,反射就没办法实现。

2、Class类的作用。

    1.1、存储普通类的详细信息。在Java中,每个类(假设为A)都有一个相应的Class对象。也就是说,当我们编写一个类,编译完成后,在生成的.class文件中,就会产生一个Class对象(假设为B),用于表示这个类的类型。Class对象(B)包含了与类(A)相关的信息。事实上,Class对象就是用来创建类的所有的"普通"对象的。

    1.2、没有Class类就没办法生成对象。JVM在生成对象之前,必须要加载这个对象的类,而加载对象的类,则必须要求这个类已经被编译为.class文件,而在java类被编译为.class文件之后,就会产生一个Class对象,这是编译机制决定的,具体原因就不深究了。JVM是根据Class对象来产生普通对象的。

    类是程序的一部分,每个类都有一个Class对象。换言之,每当编写并且编译了一个新类,就会产生一个Class对象(恰当地说,是被保存在一个同名 的.class文件中)。在运行时,当我们想生成这个类的对象时,运行这个程序的Java虚拟机(JVM)首先检查这个类的Class对象是否已经加载。 如果尚未加载,JVM就会根据类名查找.class文件,并将其载入。一旦某个类的Class对象被载入内存,它就被用来创建这个类的所有对象

3、 获取Class实例的三种方式

    
     (1)利用对象调用getClass()方法获取该对象的Class实例;
     (2)使用Class类的静态方法forName(),用类的名字获取一个Class实例(staticClass forName(String className)  Returns the Classobject associated with the class or interface with the given stringname. );
     (3)运用.class的方式来获取Class实例,对于基本数据类型的封装类,还可以采用.TYPE来获取相对应的基本数据类型的Class实例
   在newInstance()调用类中缺省的构造方法 ObjectnewInstance()(可在不知该类的名字的时候,常见这个类的实例) Creates a new instance of the class represented by this Classobject.
  
 在运行期间,如果我们要产生某个类的对象,Java虚拟机(JVM)会检查该类型的Class对象是否已被加载。如果没有被加载,JVM会根据类的名称找到.class文件并加载它。一旦某个类型的Class对象已被加载到内存,就可以用它来产生该类型的所有对象

public class ClassTest {      public static void main(String [] args)throws Exception{          String str1="abc";          Class cls1=str1.getClass();          Class cls2=String.class;          Class cls3=Class.forName("java.lang.String");          System.out.println(cls1==cls2);          System.out.println(cls1==cls3);      }}

返回结果为:true,true.

解释:虚拟机只会产生一份字节码, 用这份字节码可以产生多个实例对象。

4、反射

      

转载于:https://my.oschina.net/weiweiblog/blog/612545

你可能感兴趣的文章
express框架应用接入阿里云函数计算
查看>>
几行代码实现ofo首页小黄人眼睛加速感应转动
查看>>
317TABLE ACCESS BY INDEX ROWID BATCHED3
查看>>
MapReduce Shuffle原理 与 Spark Shuffle原理
查看>>
题解 P3386 【【模板】二分图匹配】
查看>>
李彦宏:人工智能的互联网时代已经到来
查看>>
游标概念和作用(转载)
查看>>
python中全局变量、局部变量、类变量、实例变量简析
查看>>
大众公布量子计算北京交通新一代产品亮相
查看>>
武器加持无人机,远程操控就可以抓获犯罪团伙
查看>>
MySQL数据库迁移
查看>>
IOS应用提交所需的ICON
查看>>
第90届中国电子展聚焦行业新热点,拉动产业链上下游快速发展
查看>>
量子力学多世界解释:这个世界的你是穷光蛋 另一个世界是亿万富翁(文中有赠书活动)...
查看>>
不要小看了互联网智能锁,它正撬动整个多元化居住产品时代!
查看>>
工人小明的新同事
查看>>
OPC UA的安全性分析以及正确使用指南
查看>>
使用树莓派和 projectx/os 托管你自己的电子邮件
查看>>
关于nmonanalyser报错“输入超出文件尾”的解决方法
查看>>
轻松面试找到理想员工-非官方的面试技术指南
查看>>