00:00
好,复习一下咱们之前讲的这个内容,打开点ary,诶还是打开我们这个基础部分,看这个面向对象,这个像咱们呢,现在一上来呢,讲的这个面向对象像就是第六章,这一章呢,是我们讲面向对象的最后一章了,这一章讲完以后的话呢,整个关于面向对象就是Java呢,核心的内容我们说就是面向对象了,这里边的细节呢比较多,涉及到知识点也比较多,还是那句话,大家呢,留做一个作业,就是讲完以后就是正好也赶上假期了,然后呢,大家回去的时候呢,画一个思维导图,就把整个这个面向对象这块的内容呢,都给大家画出来啊,然后的话呢,这个呃,我这里边放了一个放了一个这个图,这么一看的话,有点像那个电路板一样是吧,细一看的话呢,实际上就是写的很细了,这个呢不是我画的,这个是咱们之前的一个学生,这留作业的时候呢画的。大家呢,就是也下来呢,需要画这样一个结构,这个呢,你也没有必要去参照它了,或者你大体上看一下它这个骨架就可以了,还是要大家自己亲自呢去画一画,就是你自己画,画完以后的话呢,你从这个笔记这块你走一下,你看一个一个打开,你看这里边这些点呢,你是不是在你这个图当中体现了没有体现,你看应该加在哪,就这样形成一个整个的一个系统一样了。
01:15
通过你不断的去画你这个这个过程当中,其实呢,你在这个掌握这样的一些知识,梳理这样的一些知识,所以最终目的的话呢,就是大家把这个东西呢,这个做出来以后,整个这个过程是我们的其实是一个目的,而不是说最后呢,拿到这样一个图,这个图的话呢,这个都给大家了是吧,你自己打开看一看,其实呢,你没有任何感觉,还是呢,得自己亲自去画,这个过程呢,才是你成长的一个过程,行,那咱们复习一下这个昨天这个之前一天咱们讲的这个内容,呃,今天的话呢,咱们就把这个剩下的内容叫abstract interface内部类这三个结构呢,就讲完,那面向对象呢,这个内容就算是结束了,哎,就这样啊,好,这个我们按照这个顺序呢,先来看一下static,首先呢,这个static呢,翻译成叫静态的。
02:02
叫静态的,这个关键字的话呢,是需要大家掌握的,来下边看一下,具体的说,Static可以用来用来修饰的结构,回忆一下static可以用来修饰什么,它呢,主要是用来修饰类的内部结构的,修饰类的内部结构了,那内部结构的话呢,属性方法代码块内部类构造器呢,构造器是没有的,哎,它是没有的,就是代这个它所修饰的结构呢,叫静态的,一说到静态的,大家第一反应就是随着类的加载而加载,这个事儿随着类的加载而加载,所以说在这个呢,你就别想着去修饰类了,那随着类的加载而加载,那就是看类里边这个东西你是不是要随着我这个类的出现,你也出现了是这样的情况,所以呢,我们主要修饰的是类的内部结构,那么属性方法这个咱们已经讲过了,这个代码块呢,也说过了,类不类的话呢,咱们今天来讲。
03:03
那么构造器为什么不能用sta克修饰呢?对,你看咱们说的这个叫随着类的加载而加载,咱们之前画了一个所谓的叫生命周期啊啊这样一条线了,说这呢,就是这个类的加载,这类的这个消亡的过程,在中间的环节,我们说会有这个对象的一个创建,还有对象的消亡,嗯,这个一方面呢是类,一方面呢是对象,这个构造器呢,恰好处在他们两个这个临界的位置上,就是构造器的左边,就是不能看内导线了,啊就是这呢,是咱们首先是这个类的加载,然后这块呢,是这构造器的调用啊,再往这块呢,是不是对象就出现了,这个构造器呢,恰好处于这个临界边上,左边这些呢,就是类的加载的时候呢,我们说哪些结构呢?这个需要随着类加载,加载叫static,这边的话呢,都是随着对象的创建而加载的,我们区分为这边呢是用static修饰的,这边是没有用static修饰的,而这个代码块呢,恰好。
04:03
就是来用来恰好就是用来,呃代码画构造器呢,恰好就是用来区分左边和右边的,哎,你构造器掉之前那就是左边的,构造器掉之后呢,那就是右边了,所以构造器你就别修饰了,而且你修饰完以后,你说这这啥意思呢,随着类的加载而加载也没有什么意义,其实是吧,那所以说这个构造器就不行了,就只有那这四个结构。行,那分别呢,我们来说一下,就是static呢,来修饰属性这块,我们直接看下咱们这课件。上边了说sta来修饰属性,这个属性呢,我们自然而然的就把它称作叫静态变量,或者呢叫类变量,类变量就是它因为归这个类所有了,这个呢是一个意思,那具体的话呢,有哪些点这块呢,我们讲到这样的几个事情,那静态属性的举例到这CTRLC。
05:01
这个呢,我们,哎哟这字儿稍微大一点儿。行这个呢,我改成这个叫32.1啊。好,这个咱们刚才考的时候呢,也考大家这个事儿了,考大家这个事儿了,就是需要呢,大家还是要掌握这个问题的,嗯,实例变量修改对象中的非静态的属性,这个格式得稍微调一下啊,导致其他的对象。嗯,CTRLS一下,好,这里边的话呢,需要大家把下边这个我们,呃,把我们讲述来的这样的几个点的话呢,要熟悉,就是你看到这几个内容的话呢,发现嗯都没有问题,那就很清楚啊,那就可以了,就是也不需要大家非得去死记硬背,把这里边的每个点呢,你还都得背下来,这个其实倒没有必要,嗯,主要呢,你把这个里边这个知识点的话呢,往下顺都没有任何问题,都是很清楚的,那就可以了。好这呢是我们来调用这个属性的问题,然后呢,这个提到一个点,就是关于这个静态,这个这个静态的属性呢,它是存放在我们的静态域当中,跟咱们之前呢,说非静态的属性呢,放的位置不一样了,这呢,咱们画了一个内存图,就是这个图CTRLC粘过来。
06:19
行,这就OK了,还是存放在我们这个位置的,就这一份,行,下一个说带这个呢,来修饰方法,修饰方法就是下边我们这个提到的就是这方法呢,自然而然的就叫做静态方法,这个叫类方法呢,也可以,也没毛病,你看也没毛病,只是说静方,静态方法呢,有时候叫的多一些,那么方法这块呢,其实也很好理解,就是有了这个静态的修饰属性这样的一个概念以后,那方法的话呢,其实也其实有一些类似了。只不过呢,就是你是个方法嘛,涉及到就方法体的一些问题了哟,这个得往后移,这CTRLS一下,CTRLS好这呢我们说static修饰属性修饰方法,哎,这就完事了,那需要注意的呢,就是static在使用的时候,尤其在这个方法当中,我们说就不能再去使用this或者super了,那因为this和super呢,都是基于对象的来谈的问题,那我们这里呢,静态的都还没有对象呢,所以就不要用它来拉,关于静态属性借代方法的使用,大家呢,都可以考虑从这个生命周期的角度呢去理解去解释,那就OK,行,这呢是两个基本的这个点,这就过了,下一个就是我们呢,需要掌握的,大家落地需要关注的就是咱们后边呢,定义属性定义方法的时候,到底要不要加static。
07:53
这个是咱们比较关心的点,那首先呢,关于属性这块,这呢我写了两个事儿,那这呢相当于是这种经验之谈了,大家呢后边呢就可以体会体会这个事儿,说属性呢,我们看一下是不是需要被多个对象所共享,就是大家呢,这几个对象用它的时候呢,大家用不用用这一个就可以了,那你要用这一个,通常就因为这一个呢,可能大家这个值都一样了,那这时候呢,咱们就都用这一个,就像我们说这个银行账户这个account样,Account的话呢,每一个账户都有一个ID,都有一个余额,你不可能让它去共享的,但是对于这个银行利率来讲呢,这个不同的账户大家都是同一个利率,那这块呢,不妨我就把它呢生命成个静态的了,哎,是这样个情况,真正下来再去体会体会,再一个呢,就是说类当中这些常量,类中的这个常量咱们也讲了这个final了,如果这个属性它是一个final的,而这个final的话呢,它还把这个值呢,显示的在这附上了。
08:54
这时候你要不加static,那意味着这还是一个非静态的。那非静态的话呢,就意味着它是随着对象的这个这个创建才加载的,而且呢,在这个对空间中,每个对象都一份,那每个对象都一份,大家还都是一个常量值,是不是就没有必要了,反正都一要嘛,那干脆呢,这个我也给你加上个S得了,哎是这样的情况,所以呢,咱们讲这个这个final的时候呢,也提了一下,说final修饰的这个属性呢,有的时候呢,我们看到它常常和这个static就搭配在一起了,就是因为你既然常了,大家那可能都都一样了,都一样干脆就静态得了,诶这就是提到这个常量的事情,但是呢,有final它不一定就有static,因为这个final咱们说你没有加static,意味着它是非静态的,非静态的是不是还是每个对象一份啊,对,每个对象一份,我们这个final表示的是你这个对象中的这个属性,一旦复制以后呢,就不能改了。
09:54
但可没有说每个对象中的这个属性值相同哈。
10:02
能理解我俩事,就是我们final呢,这还是一个非静态的,意味着每个对象一份,然后咱们说final只是说你这个对象中的这个属性复制以后就别付了,因为你已经负负过值了,是常量了,但是呢,你不同的对象之间这个属性值是不是可以不一样。可以吧,可以的,就是咱不同的属性,你加载你的,我加载我的,我加载的时候呢,我就放到这,说是个常量别变了,是这个意思,就比如说咱们说点这个夸张点的,就是每个人都有身份证号嘛,这身份证号的话呢,每个人都不一样,那首先呢,这个身份证号你肯定不能静态了,对吧?诶,但是这个每个人的身份证号呢,一旦给你付完以后,这辈子都是这个号了,不能改了,也就是说这个身份证号呢,其实是可以加final,但是你不能加在对那每个人的身份证号还不一样,你说我们这个final的这个值在哪附啊,我在构造器中附是不是可以,我们造这个对象的时候,我通过行参是不是给你附上显示复制可以吗?
11:12
显示靠谱吗?显示不行,显示的话,那不是大家都是一个号了,因为你一旦付了以后不就改不了了吗?显示这块不行,那代码块中呢也不行,因为代码块中那个那也是有点像显示的一样是吧,只是把这个显示这个结果放到代码块里了,这个就不能体现变化这个事儿了,所以你得通过构造器去付啊,所以这里边就这个细的点去体会体会啊,像这些细列点呢,有的时候呢,其实你要说我讲课可能就是可说可不说了,那就会导致大家下来你自己开发的时候,每个人有的人就想到这事了,写代码时候会注意到这个问题,有的人可能就没注意到啊,以后看到一些情况非就不理解了,就成这个情况了,现在就是把这个经验的东西呢,给大家抛出来,就你得还是确实得想透了是吧?啊然后呢,再接下来呢,下边做的事就是写代码。
12:02
哎,去熟悉这样讲的这些问题啊,好,那么使用static这个,我们看要不要在方法上加一个static这块的这个经验呢,就是说你看你操作这个,如果你这个方法的话呢,你操作静态属性了,那么通常的话呢,咱们俩的生命周期呢就都一样了,虽然虽然我们讲说在非静态的方法中也可以调静态的结构,这没毛病,但是一般情况下呢,咱们都比较少这样去调,通常呢,就是大家生命周期都一样,你是你是随着类的加载加载,那我我也一样,就是你有个静态属性,那说白了就是人家这个属性很早就加载了,那你没有方法还不让他去用,必须得到对象也不太合适啊,那我为什么那么早去生成那个静态的主属性呢?是吧?所以既然静态的属性随着类的加载而加载了,这时候呢,我们通常呢,把这个方法呢,就也提供好了啊,那就是静态的方法,直接呢想掉就掉去了,哎,就这种。
13:03
好,这是一个这个情况,另外一个的话呢,就是工具类中的方法,习惯上呢,我们也声明成是static,为啥呀,对像这个工具类的话呢,咱们通常就没有必要去造对象了,你说我拗一个ari,就咱们这个数组的工具类,我拗一个maths,数学你拗一个这个叫,比如对象叫M1,我再拗一个叫M2,这俩对象好像也没什么区别,你不就是造了对象,主要目的还是为了造调那些方法,咱们工具类中的方法呢,它基本上都会有行参呀。我只说基本上不一定啊,像这个ma.RHTHM不就没型参啊,基本上都有行参,行参的话呢,就是你看你到底你想干什么,比如我想给这个数组排序,那你得告诉我数字是什么,你想想你想这个获取一个什么什么样的一个,呃,谁的一个四舍五入,那你得把这个数告诉我,我去帮你四舍五入,工具类呢,就是帮你去做一些事的,所以工具类呢,它的主要体现的就是在行态这块了,我去帮你做各种各样的事儿,至于说呢,是这个对象做的,这个对象做的其实不关心,我们的重心不在这个对象这块,而在这个方法的形象这块,所以说对象不关心呢,干脆就不要找对象了,所以工具类呢,通常咱们都是这个里边,大家会看到大量的静态的方法和属性,哎,这个非静态的基本没有,哎是这个意思啊好,下面呢,关于这个静态的一些举例子了,举例子的话呢,咱们也可以说说,比如说举例一,像咱们现有的API中的一些,那就是工具类了,像a race啊。
14:39
Math也算啊,数学类工具类,还有咱们后边呢,对,关于讲集合的时候,要用到一个叫collections这样的一些等工具类,它内部呢,大家去看一看,那都是这个静态的这个结构了啊,比如这个collections咱们没有见过啊,可以看一眼CTRLC这个怎么调出这个源码还记得不?你要这块有这个单词的话,你直接就按住CTRL键就可以了,没有ctrl shift t ctrl v。
15:12
找这个这个下边的好,然后呢,你看这个这块你看都在SS呢,就是static。哎,这就是静态的方法,这就是一个工具类,行不多说了,这呢是举例一,然后举例二,举例二的话呢,咱们后边讲了一个单立模式啊,单立模式里边我们私有化构造器了,你在里边呢造了个对象,外边呢想用,那你必须得用个静态的方法让我来调,所以呢,这就提到了一个这个static的使用,然后举例三,举例三的话呢,咱们自己呢也写了一个,哎大家体会咱们写的这个例子就关于这个账户的这个事儿,账嗯不是这个题了,写的这个圆的这个,哎不是账户的啊,是我们这个圆的这个问题,这个当然账户这个呢也体会,也能体会一下,也用到了,把这个呢,我CTRLC粘过来。
16:14
行,在这里边的话呢,大家体会一下,哪些属性应该是静态的,哪些是非静态的,比如说这个radius ID,每个对象都不一样,那当然了就是非静态了,但是的话呢,我们这个ID还希望是自动赋值,咱们定义的一个这样的一个int,那这个呢,大家共用,这就相当于一个计数器一样,这个每个对象用的时候呢,我在已有的这个in Internet的这个计数器的基础之上呢,去累加啊,这就相当一个计数器,所以呢是静态的,然后的话呢,我们这个total,我想记录一下到底创建过几个对象。这显然跟我们具体的一个对象就没有关系了,所以这个属性呢,本身就不应该让它出现在每一个对象的对空间里,因为呢,完全没有必要,就整个呢,我们想看看到底造了几个对象,所以呢,你放在这个方法区的这个静待域里是更合适的,嗯,不归具体某一个对象所有的,所以也是加上一个static。
17:07
行,那么操作这两个属性的方法呢,对应的你该静态的那就都静态了,那这都是。行,这呢是咱们关于这个静态的一个事情。
我来说两句