00:00
好,那么关于带这个修饰属性修饰方法呢,这个知识点呢,咱们就告一段落了啊,下面的话呢,我们来看一看相关的一些这个题目了,诶首先这块呢,我写这个apply啊,就是大家呢去体会一下诶,关于静态的使用的一个场景啊,我这给大家去举个例子。哎,比如说这块我写个叫circle,关于它的一个测试。好,那这呢,我就把这个测试呢,跟这个类本身呢,就都写到一起了啊呃,这呢叫个圆,好,那么对于圆来讲呢,前面我们已经比较熟悉了,还会有半径,而且呢,每个圆的半径呢都不一样。哎,所以这块呢,比如我们private一下叫us,这个呢,你就别静态了。啊,相当于它就是一个实例变量对吧。好,然后接着的话呢,我说呢,给每一个圆呢,附一个ID。哎,每个圆有个编号,你说这个适合有呃,适合static吗。不适合,你看刚才我都说了,每一个圆一个是吧,诶所以呢,每一个有个编号的话呢,这个也不要静态化。然后接着我希望什么呢?呃,我记录一下,呃,我后边呢,会创建源的对象了哈,创建源这个对象的时候呢,我记录一下到底有几个对象。
01:05
记录一下个数。个数啊,Int型的一个叫total是吧。哎,创建的circle。啊,实例的个数。你说这个呢,我们要不要静态。啊,其实呢,就可以静态化了。诶可以静态化了,呃,因为呢,这个你看这个个数呢,其实跟具体这个圆的没啥关系了啊不语言对象我就用类去调其实就行,或者换句话说呢,你要是没静态化,你会发现呢,每一个对象去调头,头不都是值一样吗。啊,你造了俩对象,那谁去调这个都是俩是吧?哎,这呢就是它啊,所以呢,我就把它给静态化了,好再接下来啊。这里边儿这个ID啊,我们需要呢,就是自动的给复制。嗯,对,什么叫自动复制,就是比如我们创建第一个圆的对象的时候呢,假设叫1001吧。啊,那第二个的话呢,我希望你就是1002。
02:00
哎,第三个1003是吧,诶类似这样的场景啊,你看这块呢,我们就不是通过构造器造对象吗。哎,比如说在这个构造器里边啊,这个时候的话呢,你可能就没有指定ID,哎,指定这个radius那就不指定了,但是这个ID呢,我希望你给我付一下是吧。CD自动付怎么办呢?诶。啊TOTO啊TOTO的话呢,倒也行,但是现在呢,咱们是计算个数,它的ID呢,可能不是从一开始的是吧。或者不是从零开始的这块我们可以呢,是不是重新再指定个变量了。好,这个变量的话呢,对外也不暴露了,所以我就private了啊。呃,Int类型的,比如说这个叫in吧,诶默认值呢,假设叫1001。啊,那就相当于一开始的这个赋值呢,是不是就叫in是吧。过完这以后呢,你记得让他是不是加加一下。那回头你要再拿它去创建对象,希望它就变成1002了,是吧?这么个思路啊。好,先呢,这样来写,咱们看看这个事儿靠不靠谱啊。呃,这块呢,不妨咱们就先,我就不考虑这个私有的这个事儿了吧,咱们就先呢,主要来体现这个static的一个使用啊好,这个写成这样之后呢,我们回过来啊,我这呢写一个没方法啊。
03:12
诶看这里边呢,这个相应的一些问题,首先的话呢,我们circle c1啊,你一个circle。好,创建了一个圆的对象了,在这个圆的对象创建完以后,它里边那个半径呢。这个咱们接着呢,这么着一下吧,我去。诶,重写一下这个出存率方法啊,这里边呢,我感兴趣的就是它的readus和他的ID。诶,这个伊利的不这个不关心啊,所以呢,我就只打印这两个数据。好,这呢是我创建的第一个圆,然后我们去打一下这个C。哎,然后接着我们再创建一个对象。C2打印一下啊,好,这时候我们看一看这个结果啊。也出来了啊。诶,这个结果里边呢,它们的半径呢,都是0.0。好理解,因为我们没有赋值。啊,在这个构造器里边,这不没有负半径嘛,但是这个ID的话,我们可是付了啊,你看一看这个结果。
04:06
不太对是吧。诶,那明明我们这块加加了,怎么第二个圆的时候呢,ID不是1002呢。怎么解释看看。我这不都加加了吗。A。这个一的话呢,你要看清楚它没有静态修饰是吧。哎,所以呢,每一个对象有一份儿。哎,你第一个创建的这个圆的时候呢,说白了就是这样子的啊,咱们一画就知道了。这个呢是C1指向对空间啊,咱们这里边呢叫成圆变量是非静态的啊第一个呢是有瑞。还有个ID,注意是不是还有一个in。哎,对的啊好,那么对于你第一个这个原则对象来讲呢,你这1001付给他了,哎,这个呢,就是这个ID呢,是1001了,你把这个init呢,从1001改成1002了。
05:02
注意是改你自己的,然后你这C2的话呢,是不是又有一个新的,还是有一个radius ID和in是吧。NG1年的是不是还是1001。诶,所以这块你给他付呢,还是把它改成1001,然后你改成1002了,这呢就有悖于我们的初衷。我希望呢,在你原有的这个1002的基础之上呢,再去讲是吧,所以这个呢,Init不应该每个对象一份。哎,所以呢。哎,是不是static一下是吧。这样的啊,好,那么我这儿加了一个static之后再来看。一下。诶,你看这个时候不就变成1002了吗。呃,意思呢,你要再创建一个,那自然而然的就是1003。哎,再来一份啊,叫C3 C3好再来。诶,你看就自动的就是1003了,呃,因为呢,此时这个in呢,在内存中就一份啊。诶就可以了啊,所以呢,用它呢来体现这个自动编号啊,这样的一个基数啊。
06:05
哎,自动。啊,给ID啊,赋值的一个奇数啊。好,这呢就我们说的他了,然后的话呢,我们再来看这个叫total的问题哈,现在你创建了几个对象呢,这块呢,你记录一下,呃,暂且的话呢,我们去调不太靠谱,这还是零是吧。这个静态呢,大家都清楚啊,这个是合理的,但是现在呢是零。哎,说明呢,你没有去记录这个事儿了啊,那我们应该在哪记录呢?回到器里边吧。哎,你每创建一个对象呢,我们就让这个to呢,加加一下是吧。哎,所以这块我们去执行,哎,你调过三次构造器,那这不就三个吗。哎,同样的问题啊,你说我这个total的话,我要是没有加static的话。会怎么着?哎,这边首先报错了是吧。哎,那就意味着你得用对象来调了,对象的话呢,有C1C2C33个哈,那我拿C1去调,你说这个结果是多少。
07:00
对,结果就成一了啊。哎,就是因为呢,每个对象有一份儿,把各自的偷偷呢,从零改成一是吧,诶这个事儿不靠谱啊,所以呢,我们自然而然的啊,这个应该是一个斯代里克。啊,这个呢,应该就好理解了是吧,好,那么其实呢,这块我们就看到了这个静态什么时候适合给他加上这样个声明了啊顺带的话呢,针对这道问题来讲,如果呢,我们再去提供这个叫代餐的这个构造器,比如说我这有个double的一个readdius。哎,相当于做一个初始化了啊呃,那么在这里边呢,就是半径呢,哎。做一个指定。嗯,然后呢,别忘了,是不是也有几个事儿还得同步的拿过来。比如说。是不是这这都得需要。哎,所以这块我们就来一个,哎,这次这样是不是就行了。OK的是吧,啊,因为呢,这时候ID呢,你也得给他附上,然后偷呢也得变一下。啊行,那回过来你这块呢,比如说我们再去创建一个啊。
08:01
哎,C4。这个呢,我们来一个半径,比如2.3。啊,这是C4是吧,然后接着我们再去调了一个。诶,这边呢,就是这四个啊,最后这个呢,因为你调的是带参的构造体,就附上值了,这边有四个啊。没问题。行,哎,大家来体会一下,我们什么时候哎需要加这个staic。啊,体会一下啊好,那么自然而然的,如果你要是提供这样的属性给他私有化了啊,诶提供方法的话呢,你就用盖塞的方法,也自然而然的,也是静态的就可以了。哎,这呢看的是咱们这个应用的题目啊好,这个题目完了以后呢,我们再来看这个题,这个题呢,其实跟我刚才写的这个circleq呢,有点类似啊看一下。说他创建一个account的一个类包含的属性的账号,诶密码存款余额,利率最小余额,然后定义封装这些属性的这个方法,诶也提到了这个账号呢,去自动生成,诶跟我们刚才这个思想呢,是一样的啊。
09:00
嗯,看看。这么整?账号是吧。在这儿啊。哎,主要呢,就是我们来设计这个属性啊,你看适不适合给他诶。啊,首先第一个叫账号吧。假设我们叫int型的一个ID是吧,这个要不要加静态呢。千万不能加呀。加了就成了每个人的账号一样了是吧。哎,这不行啊,密码。这更不能加了是吧。对,每个人密码都一样了,那就麻烦了是吧,这都成了共同富裕了都啊。嗯,大家都随便都能用了,是哎存款余额呢。也不能啊,大部型的。Balance啊,因为呢,每个人的账号账户的这个余额都不一样啊。哎,这个不行,呃,利率呢。对,利率可以哈啊,因为呢,大家面对的都是共同一个银行啊,大家都是公平的透明的哈,所以呢,这个利率呢是一样的啊。
10:03
这个interest。啊,是吧。哎,这个叫利率啊。好,然后呢,这个最小余额。对,比如你办相应的卡,它有时候会限制说你最少你得存一块钱,比如这样的啊,这叫最小余额啊,这个呢,也都是一样的是吧。斯黛。嗯,最小余额大部型的吧,诶mean的啊,一个balance。哎,比如说这个呢,我们就直接写死了啊,哎,一块钱是吧。最小余额啊。好没了,嗯,然后呢,说封装这些属性的方法,你得给提供一下啊,嗯,先整一个构造器吧。来看一下啊。扩大器这块呢,我们先整个空餐的。啊,再整一个代餐的。代餐呢,这里边儿,哎,你会发现它给我们呈现出来的呢,就只有这种非静态的,你看。
11:01
静态这俩都没给我们放。啊,因为呢,你造对象呢,就相当于你是设置你这个对象的,你这个情况,所以呢,它只是给你去提供非静态的,静态的话呢,我们直接拿类去调啊。诶跟这个构造器就关系不大了,所以他就没给提供啊,在刚才这块提到一点,说让这个ID呢自动生成,所以这块你ID呢就别给他去复制了啊,所以把后边这两个可以制定一下。诶,可以这么着啊。好,假设呢,我们就提供这两个构造器,嗯,他提到了,说这个ID呢,你得给自动去生成啊。就还使用咱们刚才那样的一个思想。哎,我这块呢,在这里边呢,是不是就得是Z4.id得负一个值,哎,是不是就使用我们刚才那样一个想法是吧。哎,Static啊,Int型的叫in,比如说假设也叫1001啊。哎,这个是用于自动生成。ID的啊,这样的一个基数啊。好,这个呢,我们就写成叫in。
12:01
哎,过完值以后呢,记着对给他呢来个加加内存中就这一份啊。啊,这是的,这个ID的一个复制,然后呢,这个构造器呢,针对于这个密码啊,对于这个余额呀,啊这块都没有设置,那就默认的就行,默认呢,你说密码也有一个默认值,那你愿意付呢,就在这付一个也行,比如说一般的银行卡都是。有的时候呢,是六个零是吧。诶或者123456也有可能啊,哎,这个呢,你愿意写一个你就写一个也行啊好,然后呢,这个位置呢,诶password和这个balance呢,我们都要显示在指定了。哎,但是你别忘了,这ID呢,也得自动付哈,是不是同样的这个语句得拿过来。啊,这个我写到后边也行啊。哎,这个注意一下。完事了啊,好,这是构造器的问题,然后接着的话呢,我们去提供这个所谓的get和set方法了,好,看一下啊,我们哪些应该去提供。嗯,一般的这个ID呢,就不改了。所以这块我们就不给他了哈,密码呢你可以获取和修改,嗯,Balance呢假设也行,利率呢也能改,最小余额呢也能改,一就不要操作了。
13:04
好,OK一下。诶,这块你会发现呢,凡是呢斯staic这样的属性啊,自然而然的也就给我们加上S。嗯,对应的这个改塞的方法啊,哎,都是这个同样的这个生命周期的这个场景啊。好,这个呢就完事了,下边呢就是一个测试啊。哎,在这我们写上啊。好,这块我们去这个有的可能记不清楚了啊,这块我们这样拽一下。哎,这么着把它收起来啊。左边呢,是我们生成的这个对应的这个构造器了啊,哎先account。哎,你有一个。哎,Account啊,这个咱们用一个空摊的构造器吧,就用它了啊好,这呢就完事了,这个为了方便起见呢,咱们再整一个to string。哎,讲完to呢,这个咱就用用啊,这里边呢,ID password balance行都打印一下。啊,这呢,我们就直接呢去调一下啊ACC啊。
14:01
这是,嗯。第一个对象啊,再来一个。啊,这是这个二啊,第二的话呢,我们就调另外一个构造器。就来这个啊,密码。这个大家都用什么密码呢?真的假的?啊,123456啊。嗯,你别说用生日的,应该还挺多的。是吧,得悠着点啊。啊,2000块钱。好完事了啊OK,这个完了以后呢,你看下边呢,我们去做一个run啊。诶,你看这个ID呢,你看自动的就会往上增啊,这呢是我们这个密码和余额的情况啊,诶没啥问题,行,接着的话呢,这里边有一个计算它的啊,比如说这个利率啊,最小余额,这呢跟我们具体的对象没关系。啊,其实呢,你就可以通过这个类呢,来去做这个调用啊。Get一下。
15:00
Get一下啊,比如我们这个利率。啊,这是一个啊。第二,Get一个叫mean balance。这都可以。这呢,我把这个。这么着,这让我写一下。是这个,呃,银行存款的利率为。哎,加上它。呃,银行。诶,最小存款额度为啊。哎,加它啊好,这块我们做一个运行。哎,这呢就出来了,哎存诶存款利率啊,这个我没有给他赋值是吧,对没赋值呢,那你提前呢,给他付一个啊。哎,Account第二啊,这个我们去做一个set啊。这个利率现在好像都不高是吧。能。能能1%吧,年利率。
16:01
差差不多吧。我也没有特别关注这个问题啊,诶再复制一份。这个咱们再顺便呢,去设置一下它的这个叫诶mean的一个balance是吧,诶这个最少呢,比如存一块,比如十块钱。啊,这个咱们在刚才这块呢,给大家设置过一个显示的赋值。这边显示过一块钱是吧,那这个比如说改了改成十块钱啊,就成这样了啊好run一下。哎,这不就这样子吗。就行啊,现在呢,像日本啊这块都已经是负利率了是吧。对哈,对,负利率就是你存完存银行的话呢,你得给银行掏钱啊。对,其实长期来看的话,这个钱一定是处于一种贬值的状态是吧。OK啊嗯,一个是贬值主要呢,体现的就是这个CPI指数啊,消费价格指数啊,你100块钱呢,到年底的时候呢,你可能变成了101块钱了,但实际上这个购买力的话呢,可能就到了85块钱了,是吧。诶这样的情况,所以呢,大家得赶紧花呀。
17:02
是吧?对,多挣是吧,想办法多挣啊。好,这个呢,就我们说的这道题了啊好,那么接着的话呢,我们来看这个课后的这有一个练习二啊,把这个打开啊,这里有个这样的题目啊,说呢自定义一个数组的工具类,封装常用的数组的算法。哎,这个呢,一想咱们前面呢,好像讲过是吧。哎,在哪讲的呢。还记得吗?诶,不是在数组讲的啊,在数组讲的时候呢,咱们那个方法的话呢,是就直接罗列到一起了,耦合度很高的啊,后边我们讲完方法以后,是不是这个课后练习题里边啊,应该不在这儿了,在这儿啊。哎,这个位置,哎,咱们呢,这不就已经封装好了吗。诶,这个时候封装的话呢,你注意啊,为什么我们现在还要给他重新改一下呢,因为当初呢,我们造完这个工具类以后呢,这些方法你看都是非静态的啊。这就意味着我们在调的时候呢,你看我上来了得造一个啊,你当前迈瑞的对象哈,才能够去调了,实际上你会发现呢,我们造这个对象。
18:04
是不是也没啥用是吧。因为呢,你说我造一个对象叫他了,我再换一个对象调类方法呢,也没什么区别,主要区别在于人家的行参哈。哎,所所以说这块才叫工具类嘛,工具类主要就是看行参不一样了,所以既然如此,诶我们把这两个呢,CTRLC。诶,咱们粘到这儿啊,CTRLV一下。哎,粘过来以后呢,其实咱们只需要做一个很小的变化就行了。对,给他们都加上static啊,正常就叫做工具类了啊,工具类里的方法呢,通常都是静态的。这个啊。参加一下。好加完了啊,好加完以后呢,回过来啊,那么这块呢,我们就没有必要呢去造这个对象了。把它呢就删掉就行了,然后这个位置呢,我们就换成叫MYAR就行。诶,CTRLC都做这个替换。
19:04
诶,这就完事了啊,整个呢,后续的这个操作呢,跟之前都是一样的。哎,都没问题。就妥了啊。好体会一下啊行,这个呢我们就完事了,然后接下来呢,这呢我放了一道题,这个题的话呢,大家呢,来感受一下,题面呢,并不复杂,其实呢有点意思啊。你看order呢,静态的一个变量,静态的一个方法。啊,非常直接哈,好问这个代码要是执行的话呢,会出什么问题。嗯,看一看啊,这是生命的变量。会出什么问题呢?会怎么着出错,出什么错?
20:00
会输出是吧。啊对,会输出,意思就是这个呢会输出,Hello,这个呢会输出一是吧。会这样吗?啊,有同学说怎么着。上面儿的。控制针。来直接咱们来吧,就是如果大家你要错的话呢,你得错靠谱的,你要说这个完全我都看不明白,这个我觉得那不行是吧,你最起码你说错的话呢,我觉得错的靠谱点也行,什么叫错的靠谱呢?那就是控制人异常呗。是吧,因为这块是闹拿着闹的一个对象啊,这个值去调相应的属性方法,以前我们讲这是不是都是控制人呢。哎,但是现在呢,我们是不是都静态的呀,静态的话呢,不依赖于对象是吧?诶所以呢,这时候我们去run的话呢,没有任何问题啊。哎,都是对的。哎,就是这样一个小的一个点啊,大家感受一下就行啊,好,所以这道题的话呢,你看作为这个笔试面试题确实还是。
21:03
可以是吧,你说哪块不认识吧,都认识放在一起吧,一组错了啊。OK啊行,这个大家呢,看一看就行,那那今天的话呢,咱们就告一段落啊。
我来说两句