00:00
下面的这个内容叫做object类的使用,这个是五杠七,五杠八的话呢,我们再来讲一个叫包装类的使用,这两块内容严格上来讲呢,其实不算是咱们整个面向对象思想的这块的这个主线内容了,咱们讲的这个主线呢,是三条类和类的成员,这呢不算他俩,然后面向对呢,三大特征都讲完了,说关键字的使用,这呢也不算这块呢,讲他俩呢,主要是因为咱们讲到目前为止呢,这个object呢,其实已经出现了,需要我们去提一下了,所以咱们呢讲一些object包装类的话呢,就是我们后续的诶要会用到的一个结构,所以这块呢,我们把这两个类呢,给大家及时的给补装,这个补充了一下啊,在有一些书上的时候呢,他会把这两个加上后边的枚举类等等,都归结为较长类的一个使用啊,也是可以的,也是有道理的,那这块的话呢,我们就把它含在面向对象里了,但实际上这两块内容刚才说了,跟面向对向这三条主线呢,没有什么关系,就单独的两个内容而已,行。
01:00
啊,我们来看一下这个object类,首先。我们这这类我们在讲继承性的时候呢,就引进来了,说它呢,作为我们所有的Java类的一个根服类,Java这个这个类的一个继承关系,实际上是一个数形结构,那么数性结构的话呢,它就一定会有一个根节点,这个根节点在我们这个Java的继承数的这个类的继承这个数的关系当中,它就是object。如果在类中没有显示的使用exce来指明其负类的话,默认的负类就是object,这个咱们已经说过这个问题了,这个事的话呢,其实咱们通过很多种途径呢,都证明过,写一个JAVA1这些呢都给大关一下,这呢是一个object类的一个说明,这个简单的我就先写个object的一个测试了。
02:04
这呢是提到了叫Java点浪包下的叫object这个类,首先第一个就我们说的它呢是作为所有类的一个跟服类出现。这是第一个知识点,然后第二知识点说呢,所有的类没有显示的指定福,这个福类的话,那就是把object当为当做它的这个直接福类了,我们可以举一个简单的例子,我这呢写一个叫order类,然后我们在这个测试当中写一个酶方法,写没方法,现在呢,我们想证明这个奥类的负类就是object。其实呢,把光标放在这儿,我们CTRLT就能看到了,那代码层面呢,其实也可以说明这个指示代码呢,我们目前的话呢,大家没有见过这个写法,这呢,我们造了一个order的一个对象,这个里边呢,我们可以去调它的一个方法,叫get class,就是获取我们这个对象,它是哪个类造的,叫获取它的这个类,然后再接着呢叫get,叫super class,这个方法的话呢,大家没有见过,后续呢,咱们讲到反射的时候呢,会说这些方法的使用,但是呢,你通过方法名简单的理解一下它的功能就可以了,获取order这个对象的类以及这个类其实就相当于拿到order了,这个类的负类是多少,叫get super class执行。
03:24
OK,就能看到是object啊,这呢我们这个代码上的一个体现了,就啊,那这呢就证明了它的父类呢确实是object了,那我们这里边呢,主要关心的就是这个object呢,既然它作为所有类的直接或间接负类,那么就意味着object当中定义的这些功能就是比较通用的功能。那我们现在就关心的就是object类当中,我们都定义过哪些功能,Object类中的这个功能,这个功能呢,其实主要呢,咱们体现为就是属性方法呗。
04:03
属性方法,然后呢,就这个具有通用性啊,原因呢,就是因为它作为所有类的负类出现的,那这里里边我们就比较关心它的属性和方法都有哪些,我们找一下这个API,这个object呢,定义在我们这个浪下浪下我们去找这个object。这就出来了,它从1.0就有,就1.0的时候呢,它就是作为所有类的一个跟服类出现的,那属性一看没有这个没有定义一些特别的属性,你想它具有通用性啊,咱们每一个类呢,你要有个属性,就意味着每一个类都有这个属性,想想其实也没有必要,所以这个属性呢,就没有构造器的话呢,只有一个空参构造器这块呢,我们也可以简单的现在也额外的提一下了,这就属于第四个事儿,就object类呢,值声明了。
05:02
声明了一个叫空餐的口罩期,这个呢,你知道就行了。也就意味着呢,我们造的所有其他类的对象,你最终呢,都会调到我们object空参构造器,咱们讲此类对象实例化的过程当中说过这个事儿了,那么看一下这个方法,那意味着呢,我们object当中定义的这些方法呢,就相对来讲具有一些通用性,那这些方法呢,我们一个一个的看一下,第一个方法叫做CC。翻译过,音译过来就是克隆,那你猜一下这个方法是干什么用的?对,就是复制一个对象,复制个对象,我拿一个对象,比如说你现在是因为咱们这不是说是一个通用的了吗?通用的你还是protected,是不是所有的子类对象都可以调啊,哎,我现在有个person的对象,我拿这个person对象我去调C,它就能够返回一个111个复制好的一个person,一个新的对象。
06:04
是这样子的,这不这写了说创建一个并且返回你当前这个对象的一个复制品。啊一个副本,嗯,这个方法的话呢,我们现在就不讲了,平时用的呢也有限,如果大家你要关心的话呢,我这呢写的这个克隆的这个代码了,CTRLCL一下这个粘过来。在这呢,我们先CTRLDCTRLD回撤,这个呢我不想去深说了,因为这里边咱们还涉及到这个异常的一个处理的情况,包括呢,这里边儿还要去实现一个接口,咱们都没有讲过这样的知识,也只是呢先摆到这儿,等我们讲完这个异常以后,大家如果有兴趣呢,你可以过来看一下,我们只是先关心一下这里的核心代码,我呢造了一个animal,然后这animal呢,我调了一下这个克隆方法。它返回值类型呢,是一个object类型。因为呢,我不知道你是哪个对象掉的,所以我这儿呢,没办法写明是哪一个类型了。你要是个animal调,那是animal,你要是一个person调式,Person这个位置没法变,所以我就统称呢,都写成object了,相当于呢,是一个多态付给object的,然后呢,你克隆完以后呢,你是拿的一个animal克隆的,所以返回的那肯定是个animal了,所以我这就直接强转了,强转完以后的话呢,呃,这是你原来的对象,这是我们把这个克隆好了以后,这个对象呢,做了一个重新赋值,克隆以后呢,你这个A2呢,就是你复制以后的这个了,就是此时的A2就是A的一个复制品,它俩呢就没有啥关系了,你给这个A2去付,不影响A1,哎,就这样情况啊。
07:37
这呢就是一个叫可用的一个方法,这个简单大家看一眼就可以了,啊知道这个意思。下边这个方法呢,叫做equals equals方法是我们一会要重点说明的,比较两个对象呢,是否相等,这个一会呢,咱们详细的说,再下一个方法呢,叫做finalize finalize说call called就是被动的哈,被调。
08:02
说呢,这叫garbage collector selector叫JC,这垃圾回收器说呢,Ona object在这个对象上说,当我们这个垃圾回收决定呢,要决定,或者叫发现。没有任何的引用指向我们这个对象的时候呢,我们这个垃圾收集器呢,就会调用当前这个,就会调用当前这个对象的叫finalize方法。言外之意,总结一下就是如果我们调离方法呢,肯定是一个对象去调的,那如果你这个对象呢,发现在堆空间当中,你这个尸体呢,在站里边没有任何引用指向你了,那么我们此时呢,就会去调你这个final,这个方法表示呢,要把你这个堆空间中的这个尸体呢进行回收,就是这样一个意思,是垃圾回收方面的一个方法,那通常情况下呢,这个方法咱们都不要主动的去给它调啊,是我们这个垃圾收集器,你看是不是自动的掉的。
09:03
我们就不要主动去调了,你要想看一下这个大概的一个情况呢,我们CTRLC一下,这我也写了个代码,你可以粘过来,CTRLVCTRLDCTRL1好拿过来保存一下,那这呢提到这个叫垃圾回收了,这个垃圾回收呢,我们在这个障va基础里边呢,还不是特别想给大家详细的去说这个事儿,那感兴趣的同学呢,可以关注一下咱们后期的讲的这个GVM这样的一个内容,GVM当中我们会想到讲到一些内存的一个具体的结构,怎么去分配的,怎么去调优的参数等等的内容,那垃圾这个这个回收,包括它的回收的一些常用算法都会讲到这呢,只是咱们简单的先看一下啊呃,垃圾回收的这个事儿呢,还是由我们这个GM来做的,这里边呢,先大家关注一下这个事儿。就是程序员呢,可以通过system.jc或者呢叫runtime.get RA time.JC来通知系统进行一个垃圾回收,我只是通知他了,通知完以后呢,他是不是马上就来回收呢?不一定。
10:12
不一定,就是他可能是稍微等一会儿才回收的啊,只是你通知他了,就是说你家里边这个暖气坏了,你给他打电话说暖气坏了,这个这个供暖公司呢,你得过来修一下,通知到他了,他是不是说马上就过来呢?也不一定啊,但是你通知他,他一定会来这样情况,然后呢,在垃圾回收机制回收任何对象之前,它会呢,先调用一下我们的find方法,如果你该方法呢,被覆盖了,而且呢,你还指了一个新应用,那这时候就相当于给激活了,我刚要想掉,结果你又给付了一个引用,这时候呢,我就没办法给你去回收了。啊,这是这个意思啊,说这呢,永远不要主动的去调用某个对象的分类方法,让他呢交给垃圾回收机制呢进行调用。哎,知道这个方法是什么作用呢就可以了,在这里边呢,你看我把这个方法呢,还给重写了一下,因为我现在就想看一下这个输出语句,咱们我们这个里边那个没有输出语句,你看不到,所以我这呢,我就给他做了一个重写,重写以后呢,我这就写了一下这个输出语句,我就想看这个事儿,然后呢,咱们在上面呢。
11:22
你看啊,我这儿呢,是不是把这个对象呢,制成个引用智能照了,制成照以后呢,言外之意呢,就是我这个对象呢,现在就不想用了。不想用了,但是呢,你又不知道他什么时候会回收,我这呢,就强制的通知了一下这个GM说你赶紧来给我回收一下,就是加快他这个给我们回收的一个速度,他正常要一回收,按说是不是就该掉这个方法了,来执行一下。诶,你看这时候呢,我去通知这个GM呢,去给我回收,然后呢,他确实回收了,回收的时候呢,你会发现它掉这个final了,大家只需要知道这个事儿就行,就是在对象被回收之前,他会先调下这个方法,注意是回收之前啊,不能是回收之后吧。
12:11
你看我这个方法,你说谁掉的。这地方这个方法谁掉的,比如说是垃圾收集器调的,是垃圾收集器通知我们来调,具体的调,那肯定还是你这个类的对象调啊,你是你这里边定义一个方法,方法是不是一定得有你当前类的对象去调啊,所以这个finalize也一定是我们这个person的对象掉的,那你这个对象当前不就是P吗?所以说呢,我们是在垃圾这个回收之前你掉的啊,你回收之后都没有屁了,那咋调啊是吧?啊就像这个,呃,像这个安卓开发的时候呢,经常会有一个回调方法叫destroy一样,这个叫销毁,就大家呢,你手机你用的这样的一个,你看到这样一个界面,你一点返回,一点返回的时候呢,这个方法就会掉了,这也叫销毁,那你这个销毁你说谁销毁的呀,肯定还是你这个界面对应的那个类来销毁的,因为你写到这个类里边了,是你在销毁之前赶紧调一下。
13:15
是这个事行,那这呢,我们就把这两个方法呢,就说了一下,这个finalize呢,大家就只需要知道,在被垃圾回收之前呢,会调用这个对象的发的方法啊,就是进行最后回收的时候呢,这个一个一个方法的调用,因为呢,在这个笔试当中有一个这样的一个题目。啊,我就统称为都叫面试题了,有一个呢叫考察叫final。Final,然后还有这个叫final,这呢三个词的一个区别。我说的是三个词,因为这里边儿呢,前两个呢是关键字。
14:03
Final呢,咱们在第六章当中去讲finally呢,讲异常处理的时候去讲,这个不是关键字。它只是一个方法名啊,就是因为前面这不都带这个东西吗,长得比较像,其实呢,这三个东西呢,没有任何关系。你就把各自呢解释清楚就可以了,那这个final呢,就是咱们刚才说的。啊,就是当我们这个呃,对象在被回收之前呢,我们会调用当前对象的finalize方法。啊,这样就可以了,然后我们不要主动的去调这个方法就行,一般呢,都有垃圾回收器自动的去调咱们当前对象的这个方法了,行这呢我们就说清楚这个事儿在后边,这个叫get class,就是获取当前对象的所属类,咱们刚才其实演示了一下,哎,任何一个对象都有能力获取它的类。所以呢,我们就把这个功能定义在object当中了,说每个对象都有有这个有权利去知道你是哪个类造的啊,这是get class的意思。
15:06
这个呢,咱们到后续讲到反射的时候呢,还再会展开来说,现在呢就先过了,下边一个呢,叫哈希code,返回当前对象的一个哈希值,这个呢咱们也暂时先过掉,咱们讲到集合的时候呢,再详细的说。在后面notify notify or这两个,这两个包括呢,后边的三个wait,我们都放到线程通信的时候呢去讲,在多线程的时候去说,暂时呢先忽略掉,中间呢加了一个图论,这个呢是我们使用频率有很高的一个方法。行,这呢是我们一会儿也要详细展开来讲的,好,那我们稍微的简单回过来说一下,那么这里边这个属性呢,我们首先说了这个属性是无,哎,那么这里边这个方法,方法这块呢,我们关心的一些方法都有哪些呢?这个ES方法这个呢是我们要关心的,然后这个toth string,这两个呢,都是咱们一会呢要重点来讲的,然后呢,还有这个叫get class,这个方法的话呢,我们讲到反射的时候呢去说,还有呢,这个叫哈希code,这个讲到集合的时候去说,然后呢,这个clo呢,我们用的很少,这个也很少用了,然后这个finals。
16:21
哎,这个呢,方法的话呢,我们也不主动的去调,哎,剩下的关于这个再一波就是这个wait相关的,还有这个notify相关的。这个我用个盾这个啊,Notify或者是叫notify哦。那这个呢,咱们后边讲到这个多线程的时候呢,再来讲,那整体的话呢,大体上就这样,最使用频率最高的呢,是这样的两个方法,一会儿呢,我们具体展开来说一下这两个方法该如何使用。
我来说两句