类型类 && .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文件储存的地址,所以我在开始的时候喜欢把他们两混合记忆,但是至于是不是,我还没有查到相关资料,你姑且可以这么认为。
类型类 && .class 与 .getClass() 的区别的更多相关文章
- 反射, getClass(), 和something.class以及类型类(转)
原文地址:http://www.cnblogs.com/lianghui66/archive/2012/12/03/2799134.html 所谓反射,可以理解为在运行时期获取对象类型信息的操作.传统 ...
- Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
一.Java的反射机制 每个Java程序执行前都必须经过编译.加载.连接.和初始化这几个阶段,后三个阶段如下图: 其中
- .class和.getClass()的区别
使用指定类初始化日志对象,在日志输出的时候,可以打印出日志信息所在类 如: getClass() 返回此 Object 的运行时类. //需要有com.lpx.test.class这个类 Logger ...
- C++ 类对象和 指针的区别
C++ 类对象和 指针的区别 C++ 类对象和 指针的区别 转自:http://blog.csdn.net/ym19860303/article/details/8557746 指针的情况 class ...
- CSS 属性 :before && :after的用法,伪类和伪元素的区别
一::before && :after的用法 :before 如同对伪元素的名称一样,:before 是用来给指定的元素的内容前面插入新的内容.举例说明: .before:before ...
- .class, class.forName(), getClass()的区别
类名.class叫做"类字面量",因class是关键字, 所以类名.class编译时确定. getclass()运行时根据实际实例确定,getClass()是动态而且是final的 ...
- CSS之 :before && :after的用法,伪类和伪元素的区别
一::before && :after的用法 :before 如同对伪元素的名称一样,:before 是用来给指定的元素的内容前面插入新的内容.举例说明: .before:before ...
- css中伪类和伪元素的区别
转载:http://www.cnblogs.com/ihardcoder/p/5294927.html CSS3伪类和伪元素的特性和区别 前端er们大都或多或少地接触过CSS伪类和伪元素,比如最常 ...
- 【详细解析】MySQL索引详解( 索引概念、6大索引类型、key 和 index 的区别、其他索引方式)
[详细解析]MySQL索引详解( 索引概念.6大索引类型.key 和 index 的区别.其他索引方式) MySQL索引的概念: 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分 ...
随机推荐
- Linux 用户&用户组
用户和用户组的概念 用户 ---> 使用操作系统的人 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系 ...
- CTF-Tools 一款CTF古典密码加解密工具
CTF-Tools 一款CTF古典密码加解密工具 工具截图 工具简介 一款CTF编码.解码.加密.解密工具. 支持的编码解码: URL-UTF-8 URL-GB2312 Unicode Escape( ...
- JMeter进行压力测试时查看服务器的资源使用
用户想要使用Jmeter监控所测试的服务器的资源使用情况,需要有Jmeter客户端插件和服务端插件 1.客户端插件 下载地址:https://jmeter-plugins.org/install/In ...
- Java开发介绍之JDK JRE JVM 和 环境变量配置
一.JDK>JRE>JVM JDK(Java Development Kit):Java开发工具包 JDK中包含JRE,在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和 ...
- vue的逆向传值(子传父)
逆向传值:子组件传值给父组件叫做逆向传值 (是不v欸允许的,必须经过事件触发才能传值) 逆向传值步骤: 1.要传值必须先抛出,在接收 语法: this.$emit("event" ...
- 使用Abp vnext构建基于Duende.IdentityServer的统一授权中心(一)
原来看到很多示例都是基于IdentityServer4的统一授权中心,但是IdentityServer4维护到2022年就不再进行更新维护了,所以我选择了它的升级版Duende.IdentitySer ...
- 「后端小伙伴来学前端了」Vuex进阶操作,让你的代码更加高效(简称如何学会偷懒 【手动狗头】)
学妹手机里的美照 前言 前一篇写了Vuex基本使用,用起来还稍稍有些繁琐,代码有很多 冗余的地方,这篇就带着大家用更简单的方式来使用Vuex(其实就是怎么更好的偷懒,用更少的代码来完之前的事情) 进入 ...
- 如何隐藏shell脚本内容
从事 Linux 开发的同学,经常需要编写 shell 脚本,有时脚本中会涉及到一些敏感内容,比如一些 IP 地址,用户名以及密码等,或者脚本中有一些关键的代码, 所有这些内容你都不想别人阅读或者修改 ...
- SimpleNVR安防监控RTSP/FLV/HLS直播流服务如何分权限添加用户指定通道观看
背景分析 随着SimpleNVR的用户越来越多,很多客户反馈给了我们很宝贵的简易以及用户体验.在此非常感谢大家对我们的支持.其中很多客户不想把所有的视频直播展现出来,想分权限添加新用户,指定通道让其观 ...
- NOIP2020 自爆记
Day -4 - 2459184 本学期第 14 周终于到来了,NOIP 只剩 5 周了. djq 进国集了,先以膜为敬. 晚上上 hb,hb 让我们记了几点要求: 认真读题,要一字一句读题,包括输入 ...