注意Class类的特殊性
Java语言是先把Java源文件编译成后缀为class的字节码文件,然后再通过ClassLoader机制把这些类文件加载到内存中,最后生成实例执行的,这是Java处理的基本机制,但加载到内存中的数据是如何描述一个类的呢?
比如在Dog.class文件中定义了的是一个Dog类,那它在内存中是如何展现的呢?
Java使用一个元类(MetaClass)来描述加载到内存中的类数据,这就是Class类,它是一个描述类的类对象,比如Dog.class文件加载到内存中后就是一个Class实例对象描述.
因为Class是一个类种类,也就预示着它有很多特殊的地方:
1.无构造函数.Java中的类一般都有构造函数,用于创建实例对象,但是Class类却没有构造函数,不能实例化,Class对象是在加载类时由Java虚拟机通过调用类加载器中的defineClass方法自动构造的.
2.可以描述基本类型.虽然8个基本类型在JVM中并不是一个对象,它们一般存在于栈内存中,但是Class类仍然可以描述它们,例如可以使用int.class标识int类型的类对象.
3.其对象都是单例模式.一个Class的实例对象描述一个类,并且只描述一个类,反过来也成立,一个类只有一个Class实例对象,如下代码返回的结果都为true:
public class Client {public static void main(String[] args) throws Exception {//类的属性class所引用的对象与实例对象的getClass返回值相同String.class.equals(new String().getClass());"ABC".getClass().equals(String.class);//class实例对象不区分泛型ArrayList.class.equals(new ArrayList<String>().getClass());} }
Class类是Java的反射入口,只有在获得一个类的描述对象后才能动态的加载,调用,一般获得一个Class对象有三种途径:
1.类属性方式,如String.class.
2.对象的getClass()方法,如new String().getClass().
3.forName()方法加载,如Class.forName("java.lang.String");
获得了Class对象之后,就可以通过getAnnotation()获得注解,通过getMethods()获得方法,通过getConstructors()获得构造函数等,这为后续的反射代码铺平了道路.
本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/5626078.html,如需转载请自行联系原作者
注意Class类的特殊性相关推荐
- 类设计者的工具(四):面向对象程序设计 (继承)
本文为<C++ Primer>的读书笔记 目录 继承 基类 虚函数 动态绑定 (dynamic binding) 派生类 类派生列表 派生类的声明 继承的基类必须已经定义 继承基类中的虚函 ...
- 【Java 枚举 集合】枚举类Enum、映射EnumMap、集EnumSet
枚举Enum.映射EnumMap.集EnumSet 一.枚举Enum 1.概述 2.介绍 ① valueOf ② values 3.分析 ※ 模仿一个枚举类 二.枚举映射 EnumMap 1.概述 2 ...
- 【万级并发】电商库存扣减如何设计?不超卖!
随着中国消费认知的不断升级,网购走近千家万户,越来越被人们所接受.淘宝.唯品会.考拉.京东.拼多多等逐渐成为我们生活的重要组成部分. 除了常规的购物下单外,这些电商平台还经常搞一些双十一活动,秒杀.大 ...
- C++的iostream标准库介绍+使用详解(转)
0 为什么需要iostream 我们从一开始就一直在利用C++的输入输出在做着各种练习,输入输出是由iostream库提供的,所 以讨论此标准库是有必要的,它与C语言的 stdio库不同,它从一开始就 ...
- 1号店11.11:分布式搜索引擎的架构实践
http://www.uml.org.cn/zjjs/201512011.asp "11.11"是一年一度的电商盛宴,为了准备这个一年内最大规模的促销,1号店各条战线都在紧张有序地 ...
- C++的iostream标准库介绍
C++的iostream标准库介绍 0 为什么需要iostream 1 iostream: istream 和 ostream 2 fstream: ifstream 和 ofstream 3 str ...
- 阿里java高级工程师面试100题(建议收藏)
1,java堆,分新生代老年代,新生代有Eden,from surviver,to surviver三个空间,堆被所有线程共.eden内存不足时,发生一次minor GC,会把from survivo ...
- Java 异常处理学习总结
Java 异常处理学习总结 -------------------------------------------------------------------------------------- ...
- css优先级计算规则
2019独角兽企业重金招聘Python工程师标准>>> 最近面试了一些求职者,我问css优先级计算规则是怎样的?答曰ID优先级>class>元素选择器,外联样式优先级低于 ...
最新文章
- python3程序下载安装_程序猿的语言,Python 3.7.0下载安装
- k8s系列~mgr的应用
- javascript 深度克隆
- 剑指offer 算法 (递归与循环)
- IDEA突然自动关闭然后无法启动
- @namedqueries_在@NamedQueries中枚举@NamedQuery
- MaxCompute - ODPS重装上阵 第三弹 - 复杂类型
- oracle label security redition,今天在用11GR2客户端全库导出10GR2版本的数据库时报ORA-00904错误...
- php 多任务,PHP并行多任务研究(笔记)
- Word 2007书籍排版完全手册
- xz压缩文件的解压缩过程
- 我的游戏开发收藏夹 (不定期更新)
- the old reader使用分享
- DurIAN模型介绍
- 小心QQ信息中的网址传播维金Worm.Win32.Viking.ix/Worm.Viking.pg
- 计算机类大学生竞赛经验分享
- Pygame实战:据说这是史上最难扫雷游戏,没有之一,你们感受下......
- 机房重构一路走来——初步总结
- 顺序搜索小技巧-监视哨的作用
- java毕业设计项目选题基于SSM+JSP+MYSQL+H-UI 实现的校园食堂点餐|订餐系统
热门文章
- requests.get(url)执行没反应_如果贾府抄家时黛玉还活着,她会是什么反应?
- linux ubuntu文件系统,Ubuntu Linux文件系统的目录及用途简析
- pyqt tcp通信_实验十 基于PyQt界面的TCP通信程序(一).doc_学小易找答案
- 弹出层,div的写法
- 华为android8适配进度,华为 荣耀 O版本(Android 8.0)适配进度公告
- 子对象是什么java_面向对象编程(什么是对象)——java
- 手语识别 机器学习_机器学习入门实践,让机器识别一只猫
- 基于CSDN完成TEASOFT的MOOC编辑整理
- 通过一个函数对比 mgrid以及meshgrid函数
- 2021春季学期-创新设计与实践-Lesson3