类型类 && .class 与 .getClass() 的区别
一、 什么是类型类
Java 中的每一个类(.java 文件)被编译成 .class 文件的时候,Java虚拟机(JVM)会为这个类生成一个类对象(我们姑且认为就是 .class 文件),这个对象包含了这个类全部的信息,包括成员属性、方法、构造器等。往后,如果你要实例化或创建一个对象的时候,都是以这个对象(.class)文件为蓝图进行创建。这个类对象就是我们指的类型类。
二、 创建一个对象
例如下方创建一个Test类的对象
1. Class<?> testTemplet = Class.forName(“Keywords (包名)+Test”);
testTemplet 就是Java在编译 Test.java 文件时生成的类的类对象
2. 我们平时会用下面这个方法来实例化或创建一个类的对象
Test t = new Test();
其实在这其中,实例化对象 t 就是以testTemplet为模板创建的
3. 上面创建一个实例的方法实际上就相当于
t = testTemplet.newInstance()
t 是 testTemplet 的一个实例。
三、 得到一个类型类
一个类可以有两种身份,相对于类中的属性、方法,那么这个类就是我们平时认为的具有抽象意义的一个概念。而如果相对于我们上方对于对象创建中的说法的话,那么类又非常像一个对象,无论是这个类的对象还是这个类本身都可以看作是他的类对象的对象。
对于一个类,得到类型类就相当于得到他的本身,对于一个对象,就相当于得到他的蓝图。
有两个方法可以得到类型类:
类名 .class Bank.class
对象 . getClass() Bank b = new Bank(); b.getClass();
两个方法有什么不同呢?
.class 获得一个类的类型类, .getClass() 获得一个对象的类型类
而且 getClass() 得到的是将他实力的类的类型类
例如: Father father = new Child();
Father.class 指的是Father
father.getClass() 指的是Child
下面我们来看一个例子:
1. 输出类型类的名字(其中b 是Bank.java 的对象,此方法在Test中定义)
输出结果为
可以看见,输出的名字都是包名+类名,与他们是对象还是一个类没有任何关系。这说明,无论你是通过一个对象还是通过一个类获得的类型类都是一样的。
2. 下面我们看一下他们的地址。我在这里先获取一份Bank.class文件,再输出他的绝对地址。
file1是通过Test的类型类获得的,file2是通过eywords 的类型类获得的。
输出结果为
可以看到他们的地址输出时一样的,当然,这肯定应该是一样。
我想说明的是,根据相对路径的知识,我们可以知道,你的Test 和Keywords 的类型类的储存地址是在 D:\Eclipse_Worlplace\Try\bin\Bag 下,有没有一点感觉?没错,他就是我们编译后class文件储存的地址,所以我在开始的时候喜欢把他们两混合记忆,但是至于是不是,我还没有查到相关资料,你姑且可以这么认为。
最新文章
- Struts2标签大全
- 简单的jQuery幻灯片实现
- java生成带logo的二维码,自定义大小,logo路径取服务器端
- Excel保护工作表
- TCP和UDP Socket
- for循环经典案例
- g++默认支持c++11标准的办法
- VS2010插件及快捷键设置
- 2013年12月26日 星期四 doxygen入门--很好
- 学了一个封装的jquery插件,感觉还成
- gulp环境搭建
- SpringBoot 2.0 更优雅的配置注入
- 移动端web开发的注意点大总结
- 转:mysql分页原理和高效率的mysql分页查询语句
- go语言常见问题总结
- React-router4 第七篇 Recursive Paths 递归路径
- 通过公钥远程登录sshd认证
- 大数据入门第二十四天——SparkStreaming(二)与flume、kafka整合
- Codeforces.314E.Sereja and Squares(DP)
- RGB, YUV及相关标准
热门文章
- ES6基础知识(Generator 函数应用)
- Django 小实例S1 简易学生选课管理系统 3 创建用户模型(model)
- python接口之request测试:以json格式发送post请求,.json方法,查看响应结果的情况
- 【数据结构】【图文】【oj习题】 图的拓扑排序(邻接表)
- [cf1458C]Latin Square
- [gym101981F]Frank
- AGC050B Three Coins
- CF1554E You
- Atcoder Grand Contest 022 E - Median Replace(dp)
- Codeforces 571E - Geometric Progressions(数论+阿巴细节题)