00:00
那么关于object当中这个E的方法呢,咱们就算是说完了,练习呢,大家下来也做一做,我们来看一下后边这个方法叫做to string,这个方法的话呢,似乎前面我们没有正式的去说过,但是呢,其实我们都在用这个方法,怎么来体验这个事儿呢?我们还是通过这个代码呢来说明一下,在这个障碍一下呢,我们去新建一个类啊,就叫做这个to string的一个测试了。行,通过这个代码呢,咱们来体会一下这个object这个类中叫to string这个方法的使用,好这样一个问题,首先然第一个问题呢,就是提到这个toth string,这个toth string呢是object这个类当中呢定义的,那既然是它定义的我们就可以呢,是来调用一下行,那调用的话呢,只要呢,你没有重写过,你用自定义的对象呢去调都是object当中的,所以我这呢就不去new object了,我呢有两个customer啊,你有两个,你有一个就行,我这拗过customer。
01:01
在咱们equals这测试的时候,那我就直接呢拿过来一个CTRLC,好我粘过来了,这呢我们造了一个customer的对象,造完以后呢,我直接呢去调一下叫caa点叫toth,因为呢我们这个to string在咱们卡当中我也没有重写过。有没有没重写过,那你调的呢,自然的也是就是object当中的这个,我们执行一下,看看这个方法呢,输出的到底是什么OK。输出在哪发现,诶,这不就是个地址值吗?这个地址值输出以后呢,是不是感觉似曾相识啊,我们原来怎么着也输出过类似这样的一个结果呀,我直接这样写COS1是不是也出现过这样的情况?对,那这里边儿就出现一个问题,你看我们这时候我执行一下啊,确实你看这时候是不是一样啊,这上面一样。
02:03
那这呢,就相当于能说明一个事情,就是当我们呢,去输出一个对象的引用的时候,实际上呢,相当于是不是就调用了这个引用的一个to string方法了,对,这是我们先说的第一个问题啊,说当我们叫输出一个对象的引用时,实际上啊,就是调用这个当前这个对象的图方法。哎,这就是这样个问题,那么第二个问题呢,就是咱们提一下这个object这个类中这个to string方法,它是怎么定义的。哎,正因为它的定义是是那样一个特殊情况,所以才导致输出的是这样一个效果了,那我们直接呢,按住CTRL键一点就知道了,点完以后这呢,就是咱们object这个类当中定义的一个to string。CTRLC一下直接拿过来,咱们来看一下。你看就长这样,这呢,这不就很清楚了,前面呢,是获取调用这个方法的对象,它的类的类名,这是类名,这不就有了,然后接下来说呢,你这个对象它艾在哪个位置呢?就是我们通过哈希扣的值计算出来一个它在堆空间中的存储位置,并且呢,把它转化成了16进制,就这样的意思,这就是我们所谓的这个内存地址,注意咱们Java当中这个说对象的内存地址,它是一个虚拟的地址啊,就是我们在这个操作系统的基础之上呢,咱们不是又盖了一层GVM嘛,是这个GVM呢,相当于一个虚拟的操作系统了一样,然后我们这个地址呢,也是个虚拟的地址,并不是真实的内存地址啊,这个地址值的话呢,是哈利扣算出来的一个值啊。
03:52
行,那这呢我们就知道了啊,为什么咱们调to string方法的时候呢,输出的这样格式是因为呢,Object当中它就是这样定义的,行这呢我们就清楚了啊,其实要要细节去讲的话呢,大家你会看到我们这个print line方法,你看我点一下啊,是不是就点到这了。
04:12
点到这的时候呢,这个X是不是就放到这了,在这里边你看我点一下是不是你就发现它掉吐司了。对吧,这不就调我们object当中这个to方法了吗?啊,就是这个原因,就是我们这呢,相当于是伸到这个源码看了看,说为什么呢,相当于是掉to呢,就是因为我们这样写的话呢,里边发现呢,它最终还是掉这个twoth string了,是这个原因造成的行这是这个事儿,那接下来的话呢,我们再看一下这个string,我这呢,你有一个string string里边呢,我写一个美眉,那现在呢,就是我要是输出一下这个str,你说这时候是什么?能看到这个美眉吗?可以是吧,这个咱们前面已经有经验了,哎,为啥你这块出了布置地址战,对那你往前推了,是不是只有可能是我们这个string呢,重写过呀,对的是这个原因,包括呢,咱们你看我这样我写个date啊日期。
05:20
这个data这块呢,我们就我随便就给了一个浪形的一个值了。这是我们U下的行输出一下。我们这个data就是你这样写跟这样写一样啊,只是说呢,上面也一样,我们只是给省略这个图词了执行。OK,你会发现呢,这是不是也不是一个这样格式的,对,那就说明人家呢,也重写过,也都重写过了,行,那这样啊,咱把这个事儿呢,也说一下第三个点。第三点说下。像string,像这个date,包括呢,像咱们说的这个file类,还有包装类等都重写了,哎,重写了我们这个object类中的图准方法。
06:16
诶,他都重写了,这里边这个to string方法,那人家重写以后呢,它输出的是什么内容呢?相当于输出的是不是就是你这个对象,我们最关心的他这个内容实体啊。那我最关心的就是你这个代表的是什么呢?代表是个日期,看他写的就是这样的一个格式啊,2113年的这样一个星期一,9月11号911这一天啊,还挺挺巧的啊行,那这块的话呢,我们就说一下,他们呢,重写了这个兔子方法,然后呢,这个使得。在。使得在要调用这个对象的to string方法时啊,我们说返回这个实体内容信息,那这个呢,实体内容咱们也给他打上一个引号,就是看你具体关心的那些属性是什么呢,我们就返回什么,这是人家重启的这样一个情况,那要是咱们这块的话呢,我想打印那个cast,我也不想让你显示这个信息了,咱们也想说像人家string和date一样啊,输出一下实体内容,那是不是就要求我们得去重写这个to string了,那那就说自定义类这个啊,如果重写to string的话。
07:34
或者首先说这个自定类,我们说呀也可以啊,也可以去重写这个图方法。然后呢,当调用此方法时,我们说返回这个对象,这个的实体内容,咱们呢也可以仿照像string和date一样这样来做,这呢其实就相当于一个重写的规则了,好了,那咱们呢,现在去做一个重写,找到咱们的customer这个类,这个类咱们在后边呢去写一下,那首先呢,你得关心一下to人家咋定义的,这样定义的,你把它呢粘过来也行,或者呢,就跟咱们说的一样,直接呢,在这to s out斜杠也可以重写。
08:23
好,怎么重写呢,我们呢想返回它的一个实体内容,实体内容呢,就是关心它的这个属性到底是多少,同时呢,也想说输出一下这个什么类型的,那我们就这样写吧,Return,我这呢写一个叫customer这个告告诉一下,然后里边呢,它这个属性呢,有这个name属性,那这呢,我就加上一个name,然后逗号一下,还有这个A属性。加上一个A,然后呢,再拼上一个中号。诶这呢,你看咱们就返回了一下,既知道你当前这个对象是什么类型的,又知道你的属性信息。
09:04
行保存一下,接着呢回过来这时候呢,我们再去看一下咱们这个customer,点右键执行。是不是就是我们刚才写的这个情况了,那这呢,就是我们重写,怎么去重写,就这样重写,相当于把它呢,我们诶就变成了CTRLV长这个样子了,下边也一样行,那么后边的话呢,咱们如果说想输出一个对象的时候呢,你看你是什么情况了,如果你想说输入地址值,那你就输入地址值,你要是不想输入地址值,我们就想看一下当前对象的这个信息,那大家呢,就去重写一下这个兔S盾就可以了,那很显然这个兔S盾呢,也是一个比较常用的功能啊,所以说把它呢一注释掉,这是咱们手动写的,手动实现的。那么咱们看一下这个有没有现成的可以调呢?点下S,这就有two three点一下。
10:05
我呢只关心这两个属性,所以呢,默认就给你勾选了点一个OK。他给整上边了,把这个我们拿下来。诶,CTRL一下这呢,就是人家自动写的。然后一对比发现,诶一样好巧啊,这是因为我之前看过,所以我就照着他这个写的是吧,哎,这个呢比较简单,大家呢,就是回头呢,你就别自己写了,直接呢就生成就完了就OK了,这没什么太大技术含量,只需要呢知道就是当咱们调这个对象的引用时呢,它这个执行的是这个toth string了,需要的话呢,你就重写一下就完事,好这呢就是咱们说的这个to string这个方法的一个使用。
我来说两句