zoukankan      html  css  js  c++  java
  • JAVA-初步认识-第十一章-object类-Getclass方法

    一.

    只看名字,是获取类的意思。

    什么叫运行时类?

    现在进行一个前期的铺垫介绍,在创建对象前先要有class文件,这是个字节码文件。

    先要加载class文件,后面才能接着运算。现在举了一个例子,如下

    Demo类和Class类,对它们的共性进行抽取。类文件都有一个共性特点就是,它里面都是源文件中所描述的那些成员,只不过类文件将它们变成了字节码,变成了另外一种符号形式而已。

    它们既然有共性,那就可以进行抽取(但这个共性抽取起来比较麻烦,被抽取的内容不是很具体)。抽完以后就形成了类,接着我们用java语言对这个字节码文件进行描述。

    能描述字节码文件的类就不需要定义了,它里面有。注意是大写的C,小写是关键字,大写是类名。

    它是专门描述字节码文件的类,这里面描述的内容就有很多了,首先无论什么字节码文件都有名称(字节码文件的名称),(这里是对getclass类进行描述)。接着无论什么样的字节码文件里面都有字段field,就是属性,也是成员变量。无论什么样的字节码文件,里面都有constructor,构造器。无论什么样的类文件,里面都有方法。

    上述这些都是类文件的组成部分,因此用这个类描述完了类文件这个事物以后,就可以产生类的对象(感觉这像是一个创建对象的前提条件,乃至于是加载类的前提条件)。

    这个Class对象是不需要你去new的,而且你也new不了。

    这个字节码对象(Test.class)本身就是你字节码一进内存就已经被变成了对象,或者说封装成了对象。你想拿字节码文件里的东西,只要通过Class对象里面的方法就能拿到。

    我想拿人里面的东西,有了人对象就易如反掌。因为有方法,getage,getname….

    所以这个类在哪儿,就在getclass。getclass方法返回的就是Class对象(万物皆对象,类也是对象)。

    现在,我们把这个流程画一下,现在我们读到了person.class文件。一装载进内容,其实第一步就在在堆内存中产生了一个对象,其实这个就是person.class对象。就是字节码文件对象。先把它加载进来,并封装成对象。封装完以后,将它们的内容进行公约分布完以后,我们再产生new的时候,其实在干嘛呀?其实根据字节码文件,在内存中产生了一个person对象。这就是我们说的new person。

    如果说还要new相同类型的对象,那就不需要加载class文件了。也就是说内存中的任意一个对象都有自己所属,也就是自己所属的字节码文件。因为对象都是字节码文件创建的(那么这些创建的对象也是字节码格式么?)。

    这个getclass方法就是获取当前对象所属的字节码文件对象。

    现在做一个演示,

    按照上面截图的写法,拿到的就是p1对象所属的字节码文件。

    按下图所示,拿到就是Person.class这个对象。

    这个对象什么类型,大写的Class类型,往下面看,字节码文件抽取出来的就是大写Class类型。

    接着使用getclass方法

    我是觉着两者是相等的,因为使用getclass方法后,得到就是一个抽出来的共同的大写Class类。→不对,getclass方法是用来获取字节码文件的,而不是字节码文件的父类。

    结果显示,它们就是相等的。

    以下图来讲解,person(29)为p1,person(40)作为p2,它们都是以Person.class产生的,它们拿的都是Person.class对象的地址(这里不是比较p1和p2对象的地址,而是它们字节码文件地址,比较的是两个clazz)。一个person.class产生好多对象,都来这这么一个文件,这个对象在内存中只有一份,不可能有第二份。

    现在类文件对象被我们拿到了,它是有名字的,

    我们看Class这个类里面都有什么。

    只要有了类字节码文件对象,它里面有什么东西,我们说拿到就拿到。就和我们有人对象一样,

    上面程序运行的结果就是person。

    总结:现在回过来,想想调用getclass方法得到的到底是什么东西?

    讲解字节码文件抽出出来的父类,可能就是为了后面定义Class clazz1中的Class讲解做铺垫。

  • 相关阅读:
    PHP 使用 GET 传递数组变量
    Java实现 蓝桥杯 算法训练 数据交换
    Java实现 蓝桥杯 算法训练 数据交换
    Java实现 蓝桥杯 算法训练 数据交换
    Java实现 蓝桥杯 算法训练 景点游览
    Java实现 蓝桥杯 算法训练 景点游览
    Java实现 蓝桥杯 算法训练 景点游览
    Java实现 蓝桥杯 算法训练 二进制数数
    Java实现 蓝桥杯 算法训练 二进制数数
    Java实现 蓝桥杯 算法训练 二进制数数
  • 原文地址:https://www.cnblogs.com/wsw-bk/p/8026266.html
Copyright © 2011-2022 走看看