一、 什么是类型类

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() 的区别的更多相关文章

  1. 反射, getClass(), 和something.class以及类型类(转)

    原文地址:http://www.cnblogs.com/lianghui66/archive/2012/12/03/2799134.html 所谓反射,可以理解为在运行时期获取对象类型信息的操作.传统 ...

  2. Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别

    一.Java的反射机制   每个Java程序执行前都必须经过编译.加载.连接.和初始化这几个阶段,后三个阶段如下图:   其中

  3. .class和.getClass()的区别

    使用指定类初始化日志对象,在日志输出的时候,可以打印出日志信息所在类 如: getClass() 返回此 Object 的运行时类. //需要有com.lpx.test.class这个类 Logger ...

  4. C++ 类对象和 指针的区别

    C++ 类对象和 指针的区别 C++ 类对象和 指针的区别 转自:http://blog.csdn.net/ym19860303/article/details/8557746 指针的情况 class ...

  5. CSS 属性 :before && :after的用法,伪类和伪元素的区别

    一::before && :after的用法 :before 如同对伪元素的名称一样,:before 是用来给指定的元素的内容前面插入新的内容.举例说明: .before:before ...

  6. .class, class.forName(), getClass()的区别

    类名.class叫做"类字面量",因class是关键字, 所以类名.class编译时确定. getclass()运行时根据实际实例确定,getClass()是动态而且是final的 ...

  7. CSS之 :before && :after的用法,伪类和伪元素的区别

    一::before && :after的用法 :before 如同对伪元素的名称一样,:before 是用来给指定的元素的内容前面插入新的内容.举例说明: .before:before ...

  8. css中伪类和伪元素的区别

    转载:http://www.cnblogs.com/ihardcoder/p/5294927.html CSS3伪类和伪元素的特性和区别   前端er们大都或多或少地接触过CSS伪类和伪元素,比如最常 ...

  9. 【详细解析】MySQL索引详解( 索引概念、6大索引类型、key 和 index 的区别、其他索引方式)

    [详细解析]MySQL索引详解( 索引概念.6大索引类型.key 和 index 的区别.其他索引方式) MySQL索引的概念: 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分 ...

随机推荐

  1. Linux下安装、配置、启动与访问RabbitMQ

    一.下载 首先第一步要下载三个rpm安装包,为了方便安装与学习,给出下载途径 网盘网址:https://pan.baidu.com/s/18Z64Lb9KQpRh10RzqZBdoQ 提取码:094v ...

  2. Screenshot 库和Collections 库

    一.screenShot 是 robot framework的标准类库,用于截取当前窗口,需要手动加载. 示例: 运行结果: 二.Collections 库 Collections 库同样为 Robo ...

  3. Flask WTForm disable choice field

    Flask disable choice field ChoiceField = { render_kw={'disabled':''} } form.my_field.render_kw = {'d ...

  4. Python 匿名函数用法和return语句

    匿名函数用法1.什么是匿名函数    函数定义过程中,没有给定名称函数,python中用lambda表达式创建匿名函数    lambda只是一个表达式,函数体比def简单    lambda主题是一 ...

  5. Linux——搭建Apache(httpd)服务器

    一.基本概念 Apache(或httpd)是Internet上使用最多的Web服务器技术之一,使用的传输协议是http超文本传输协议(一个基于超文本的协议),用于通过网络连接来发送和接受对象. 有两个 ...

  6. [atARC105F]Lights Out on Connected Graph

    记$G[S]$表示图$G$在点集$S$上的导出子图,即$G[S]=(S,{(x,y)|x,y\in S且(x,y)\in E})$ 定义$g(S)$为所有$E'$(满足$E'\subseteq G[S ...

  7. 4、使用SetOperations(无序)操作redis(Set集合)

    文章来源:https://www.cnblogs.com/shiguotao-com/p/10560599.html 方法 c参数 s说明 Long add(K key, V... values); ...

  8. es使用postmain进行数据的增删改查

    es的基本安装 安装遇到的问题  java本地环境和es环境冲突 ​ https://www.cnblogs.com/q1359720840/p/14077049.html ​ ​ ,看要使用jdk1 ...

  9. x86汇编反编译到c语言之——(1)表达式求值及赋值语句

    一. 反编译一种可能的实现方式 我们的目的是将多种平台的汇编如x86,ARM,6502反编译为c语言,所以实现时先将多种汇编转化为 特定虚拟机汇编语言,然后只需要将虚拟机汇编语言反编译为c语言.其中多 ...

  10. 解决fatal: unable to access '': Failed to connect to 127.0.0.1 port 1181: Connection refused的问题

    今天把项目提交的git远程的时候遇到一个问题 fatal: unable to access '': Failed to connect to 127.0.0.1 port 1181: Connect ...