深入研究java.lang.Class类
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对象被载入内存,它就用来创建这个类的所有对象。
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方法会返回奇怪的名字。
1、getName()
一个Class对象描述了一个特定类的属性,Class类中最常用的方法getName以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。
Class还有一个有用的方法可以为类创建一个实例,这个方法叫做newInstance()。例如:
x.getClass.newInstance(),创建了一个同x一样类型的新实例。newInstance()方法调用默认构造器(无参数构造器)初始化新建对象。
返回该类的类加载器。
返回表示数组组件类型的 Class。
返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class。
判定此 Class 对象是否表示一个数组类。
1、forName和newInstance结合起来使用,可以根据存储在字符串中的类名创建对象。例如
Object obj = Class.forName(s).newInstance();
if(e.getClass() == Employee.class)...
转载于:https://my.oschina.net/xiaominmin/blog/1598277
深入研究java.lang.Class类相关推荐
- 【转】深入研究java.lang.Class类
深入研究java.lang.Class类 Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识.这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类 ...
- 深入研究java.lang.Runtime类【转】
转自:http://blog.csdn.net/lastsweetop/article/details/3961911 目录(?)[-] javalang 类 Runtime getRuntime e ...
- 深入研究java.lang.Runtime类,Process类
2019独角兽企业重金招聘Python工程师标准>>> 一.概述 Runtime类封装了运行时的环境.每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行 ...
- 深入研究java.lang.ThreadLocal类
2019独角兽企业重金招聘Python工程师标准>>> 一.概述 ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而 ...
- 浅析Java.lang.ProcessBuilder类
最近由于工作需要把用户配置的Hive命令在Linux环境下执行,专门做了一个用户管理界面特地研究了这个不经常用得ProcessBuilder类.所以把自己的学习的资料总结一下. 一.概述 P ...
- java.lang.StackTraceElement类
java.lang.StackTraceElement 类元素代表一个堆栈帧.除了一个在堆栈的顶部所有的栈帧代表一个方法调用.在堆栈顶部的帧表示在将其生成的堆栈跟踪的执行点. 类声明 以下是java. ...
- java.lang.Void类
2019独角兽企业重金招聘Python工程师标准>>> java.lang.Void类是基本类型(primitive type)void的包装类型(wrapped type),fin ...
- Java.lang.Class类 isArray()方法有什么功能呢?
转自: Java.lang.Class类 isArray()方法有什么功能呢? 下文讲述Class类中的isArray()方法的功能,如下所示: isArray()方法的功能 java.lang.Cl ...
- java new short_Java中的Java.Lang.Short类 - Break易站
Java 包装类 Java中的Java.Lang.Short类 Short类是基本类型short 的包装类,它包含几种有效处理短值的方法,如将其转换为字符串表示形式,反之亦然.Short类的对象可以包 ...
最新文章
- 汇总| SLAM优秀开源工程
- http请求响应的组成部分的介绍 用cherome查看请求响应内容 curl命令行的使用
- μCUnit,微控制器的单元测试框架
- mysql+性能优化+命令_MySQL性能优化
- OC-NSFileManager和NSFileHandle的使用
- web报表工具FineReport最经常用到部分函数详解
- js des加密 java_java JS DES互相加密解密 通用!!!
- Failed to connect to GitHub to update the CocoaPods/Specs specs repo 问题
- 66. 编写高效的 JavaScript
- flink sink jdbc没有数据_一套 SQL 搞定数据仓库?Flink 有了新尝试
- 20200717每日一句
- JVM内存模型及CMS、G1和ZGC垃圾回收器详解
- 编译ElasticFusion过程(Ubuntu14.04)
- 微软高级流格式ASF简介
- 微信小程序picker下拉框
- Combating the Elsagate Phenomenon: Deep Learning Architectures for Disturbing Cartoons
- redis集群出现No reachable node in cluster
- 蓝桥杯基础-【切面条】不用画图的解题思路
- turtle绘制八边形、八角边形
- 学习uni-app记录