2019独角兽企业重金招聘Python工程师标准>>>

深入研究java.lang.Class类 博客分类: java

Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识。这项信息纪录了每个对象所属的类。虚拟机通常使用运行时类型信息选 准正确方法去执行,用来保存这些类型信息的类是Class类。Class类封装一个对象和接口运行时的状态,当装载类时,Class类型的对象自动创建。
      Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的,因此不能显式地声明一个Class对象。
      虚拟机为每种类型管理一个独一无二的Class对象。也就是说,每个类(型)都有一个Class对象。运行程序时,Java虚拟机(JVM)首先检查是否 所要加载的类对应的Class对象是否已经加载。如果没有加载,JVM就会根据类名查找.class文件,并将其Class对象载入。

不同的类加载器加载的Class对象的hashcode值是不一样的,也就是不同加载器加载的class对象是不同的。
      基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也都对应一个 Class 对象。
      每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。
      一般某个类的Class对象被载入内存,它就用来创建这个类的所有对象。

一、如何得到Class的对象呢?有三种方法可以的获取:
    1、调用Object类的getClass()方法来得到Class对象,这也是最常见的产生Class对象的方法。 例如:
    MyObject x;
    Class c1 = x.getClass();
    2、使用Class类的中静态forName()方法获得与字符串对应的Class对象。 例如:
    Class c2=Class.forName("MyObject"),Employee必须是接口或者类的名字。
    3、获取Class类型对象的第三个方法非常简单。如果T是一个Java类型,那么T.class就代表了匹配的类对象。 例如
    Class cl1 = Manager.class;
    Class cl2 = int.class;
    Class cl3 = Double[].class;
    注意:Class对象实际上描述的只是类型,而这类型未必是类或者接口。例如上面的int.class是一个Class类型的对象。由于历史原因,数组类型的getName方法会返回奇怪的名字。

二、Class类的常用方法
    1、getName()
    一个Class对象描述了一个特定类的属性,Class类中最常用的方法getName以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。

2、newInstance()
    Class还有一个有用的方法可以为类创建一个实例,这个方法叫做newInstance()。例如:
    x.getClass.newInstance(),创建了一个同x一样类型的新实例。newInstance()方法调用默认构造器(无参数构造器)初始化新建对象。

3、getClassLoader()
    返回该类的类加载器。

4、getComponentType()
    返回表示数组组件类型的 Class。

5、getSuperclass()
    返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class。

6、isArray()
    判定此 Class 对象是否表示一个数组类。

三、Class的一些使用技巧
    1、forName和newInstance结合起来使用,可以根据存储在字符串中的类名创建对象。例如
    Object obj = Class.forName(s).newInstance();

2、虚拟机为每种类型管理一个独一无二的Class对象。因此可以使用==操作符来比较类对象。例如:
    if(e.getClass() == Employee.class)...

转载于:https://my.oschina.net/xiaominmin/blog/1598277

深入研究java.lang.Class类相关推荐

  1. 【转】深入研究java.lang.Class类

    深入研究java.lang.Class类            Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识.这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类 ...

  2. 深入研究java.lang.Runtime类【转】

    转自:http://blog.csdn.net/lastsweetop/article/details/3961911 目录(?)[-] javalang 类 Runtime getRuntime e ...

  3. 深入研究java.lang.Runtime类,Process类

    2019独角兽企业重金招聘Python工程师标准>>> 一.概述 Runtime类封装了运行时的环境.每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行 ...

  4. 深入研究java.lang.ThreadLocal类

    2019独角兽企业重金招聘Python工程师标准>>> 一.概述 ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而 ...

  5. 浅析Java.lang.ProcessBuilder类

    最近由于工作需要把用户配置的Hive命令在Linux环境下执行,专门做了一个用户管理界面特地研究了这个不经常用得ProcessBuilder类.所以把自己的学习的资料总结一下. 一.概述      P ...

  6. java.lang.StackTraceElement类

    java.lang.StackTraceElement 类元素代表一个堆栈帧.除了一个在堆栈的顶部所有的栈帧代表一个方法调用.在堆栈顶部的帧表示在将其生成的堆栈跟踪的执行点. 类声明 以下是java. ...

  7. java.lang.Void类

    2019独角兽企业重金招聘Python工程师标准>>> java.lang.Void类是基本类型(primitive type)void的包装类型(wrapped type),fin ...

  8. Java.lang.Class类 isArray()方法有什么功能呢?

    转自: Java.lang.Class类 isArray()方法有什么功能呢? 下文讲述Class类中的isArray()方法的功能,如下所示: isArray()方法的功能 java.lang.Cl ...

  9. java new short_Java中的Java.Lang.Short类 - Break易站

    Java 包装类 Java中的Java.Lang.Short类 Short类是基本类型short 的包装类,它包含几种有效处理短值的方法,如将其转换为字符串表示形式,反之亦然.Short类的对象可以包 ...

最新文章

  1. 汇总| SLAM优秀开源工程
  2. http请求响应的组成部分的介绍 用cherome查看请求响应内容 curl命令行的使用
  3. μCUnit,微控制器的单元测试框架
  4. mysql+性能优化+命令_MySQL性能优化
  5. OC-NSFileManager和NSFileHandle的使用
  6. web报表工具FineReport最经常用到部分函数详解
  7. js des加密 java_java JS DES互相加密解密 通用!!!
  8. Failed to connect to GitHub to update the CocoaPods/Specs specs repo 问题
  9. 66. 编写高效的 JavaScript
  10. flink sink jdbc没有数据_一套 SQL 搞定数据仓库?Flink 有了新尝试
  11. 20200717每日一句
  12. JVM内存模型及CMS、G1和ZGC垃圾回收器详解
  13. 编译ElasticFusion过程(Ubuntu14.04)
  14. 微软高级流格式ASF简介
  15. 微信小程序picker下拉框
  16. Combating the Elsagate Phenomenon: Deep Learning Architectures for Disturbing Cartoons
  17. redis集群出现No reachable node in cluster
  18. 蓝桥杯基础-【切面条】不用画图的解题思路
  19. turtle绘制八边形、八角边形
  20. 学习uni-app记录

热门文章

  1. ASP.NET技巧:使Div内内容可编辑
  2. spring集成testng
  3. linux高亮 查日志
  4. Ionic常见问题--插件无法下载:npm ERR打包sha1错误
  5. 商务部回应中兴被罚:坚决反对美国用国内法制裁中企
  6. 让员工一再上当的5种社会工程骗局
  7. 《Android 应用案例开发大全(第3版)》——第2章,第2.8节壁纸中的着色器开发...
  8. Bsie(鄙视IE)
  9. 交换机集群管理(锐捷)
  10. VB连接SQL2000数据库代码