00:00
那接着呢,我们说这个第四个点就是用find来修饰一个变量,用来修饰变量,注意我这时候呢写的是变量,我没有说它修饰的是一个属性。属性呢,只是属于咱们说的变量中的一种,所以呢,下边呢,咱们还得展开来说一下,那先泛泛的去描述一下final来修饰一个变量变量,这个变量呢,被final了,说是最终的了,什么意思啊,对,那这时候你这个变量了,你就别变了,先定那个I5,然后呢,你这个又变成六了,B6变成七了,这叫变量,那现在呢,1FINAL,你这时候呢,是个五就别再变了,所以说呢,此时咱们修饰的这个变量呢,它就变成是一个常量了啊,此时的这时候这个变量呢,还得加上个引号了啊说此时的变量呢,就这个称为是一个常量。就不能再变了,就这样的一个意思,以前的话呢,咱们也稍微提过这个常量的这个事儿,我这儿呢,先写一个这个may。
01:04
几个倍方法就是以前呢,比如咱们定义一个number,这是一个十,这个number呢,它就是一个变量,然后呢,我让这个number呢,加上一个五,像这个五的话呢,咱们也称作是一个常量,就这是一种常量,就没有给它具体赋给一个变量名,就是一个纯这样的一个数值,这叫一个常量,咱们现在整这个常量呢,跟它还不是一个事儿,咱们现在呢,是有一个名的,是有一个名的,那这块我们去举一个例子,比如说我就呃写到咱们的这个结构里边了。写到这个类里边,这个类里边的话呢,我们现在去声明一个量,先声明一个变量,我因得型的一个,这个我叫一个什么呢?我叫一个宽度吧。这呢我先附一个值,比如说是十,那这个十的话呢,咱们在这个方法当中,可以对这个值呢进行一个修改,比如说public word或写一个嗯。
02:05
不。外就是来操作一下我们这个外,我呢对我们这个属性进行一个重新赋值,改成20了,这个呢是可以的,因为呢,你现在是一个变量。但是呢,现在我要是用一个final去修饰的话呢,这个变量呢,就不能再变了,此时呢,我们修饰的变量呢,实际上是专门来修饰的一个属性。啊,变量其中的一种啊,叫做属性,那一旦修饰完以后,说这个wise在这儿报错,报错的原因说the final的属性,Wise说cannot be assigned不能够再被复制了,分配了,那就相当于你此时呢,就是一个常量。啊,就是一个常量了,行,那这块的话呢,我们具体的展开的再来说一下,因为final呢,用来修饰这个变量呢,这个变量呢,又具体的分为属性和局部变量,那我们在这块呢,具体展开说final修饰一个属性。
03:02
Find来修饰个属性,那它呢就是一个常量,那这时候呢,就意味着我们一旦复制以后呢,就不能再负了,那现在咱们关心的是我们可以在哪些位置给这个所谓的这个属性呢去赋值,我们说可以考虑赋值的位置有。对一个属性的赋值,咱们呢讲过了,说可以在这些位置呢,考虑它的赋值。对吧,那我们现在就得从这里边去挑,有可能呢,不是说所有的都可以去使用的,首先呢,就要默认初始化,能不能用默认的,那我们就来看一下这个位置呢,咱们这写了个十,我要把这个十呢给它干掉,你看这是不是报错了,保存一下还是报错,说你这个black就是个空的,说你这个还没有初始化呢,原来咱们要是不加这个final呢,你看诶它倒没事,加上以后呢,发现不行了。说明呢,我们使用这个叫默认初始化,这个事儿不靠谱。
04:04
就是哪怕你想用它的默认值,那你也得显示写一个值,这就是可以的了,那这种情况呢,我们称作叫显示初始化。就是你显示出画可以行,这呢是一种情况,同时的话呢,既然你是个常量了,咱们前面讲这个标识符的时候提到过,尽可能的这个呢,是不是就给它改成大写了啊,就改成大写,大写的快捷键ctrl shift X,这就变成一个大写了,行我就这样放着,然后我再定一个final in型的,我叫一个高。或者我叫一个left也行左,比如说咱们这个大家设计一个游戏的话,或者设计一个物体,让它左右上下这样,上下左右这样去动,动的时候呢,你可以把上下左右呢,指定成一个具体的数值,这个数值的话呢,就别变了,那只要呢,比如说是一,它表示的就是向左啊,你可以定义这样的一个常量,这个意思,那这呢又成了叫显示负值,现在我不想给它显示负值,除了显示负值之外。
05:05
再看还可以,诶是不是考虑代码块中去赋值啊行,那我们这块呢,代码块里边复下值,因为呢,我们这时候呢,Final它不是一个静态的,不是一个静态的,所以你是不是也不可以说在静态代码块里去调了,对那我这里边left等于我这负一个一啊也是可以的,所以这块呢,我们也加上说代码块中赋值或者叫初始化。这样也可以,然后接着除了代码块呢,我们说还可以考虑的啊,还有个构造器,那我们看看构造器行不行,我这呢再声明一个final。Final呢,我in行,来一个用叫right。行,这个时候呢,没有显示赋值代码块里边也不写,写个构造器。
06:00
Public,那就是个final test。这样子在这里边我这行参呢,暂时就先不写了,我给这个right呢赋个值看一看,我让这个二呢,就当这个right好也可以,那这块呢我们也写一下,就是代码块中初始化,或者呢还可以在构造器中。说实话,那这是构造器可以考虑的,那构造器的话呢,你看我这写了一个,如果我要是再写一个构造器。再写个构造器这块呢,它俩是一样的了,我就呃先泛泛的来定一个值,比如我这个就要一个N呐,这个值我这另外定义了构造器,这怎么构造器刚一写完这块就报错了呢。你说这块他这个错是什么一个错误。大家看说the blank这个空的这个叫呃,Final的一个属性,Right呢说还没有被初始化。
07:06
诶,怎么会报这个信息呢。可以构造器中是可以初始化的,这不我们都写过了吗?怎么着,为啥呀?这个有过相关的经验,咱们有过这样的经验,咱们下午写这个练习的时候,咱们写这个account,那个account ID,咱不是说自动付吗?自动赋的时候你在这块写过,你要这个使用这个构造器的时候,是不是照样也得重新复一下值啊,你要万一我要通过这个构造器去造一个对象,你没写这个ID去复值,那么现在ID没附上吗?那站那不也一样吗?你在这个构造系中,你写了个right等于二,那我要是通过这个构造系造对象呢?那不相当于它没有负过值吗?哎,所以说呢,你只只需要呢,CTRLC你这块拿过来就完了,这不就OK了吗?只不过呢,这个位置二,你可以不想让它是二,你想让时间我就想拿N去复,我就拿N去复一下呗。
08:06
可以吧?没问题。啊,那就是说呢,你这块这个你要在构造器中去付,那就得考虑了,你这个构造器要有多个,那你每个可都得附上,你要不的话呢,我要通过某一些构造器去,呃,你有我能附上,那要有些构造器有没有那就附不上了,那不相当于是final没有给赋值吗?哎,这里边儿大家要小心一点这个问题行,那除了构造器之外,在后边我们呢,说有了对象以后,可以通过对象调属性,对象调方法的方式呢,进行赋值。那这个事儿呢,看靠不靠谱,我呢再定一个说final,我一个叫down。这是个下这块报错了,咱们先忽略掉它,因为咱们下边呢,想通过一个方法去赋值,下边呢我们写一个set方法,我们去一下。
09:02
在这里边我们写一个int型的,当然后这呢,我们写一个就是Z次点。当等于当写了,写了以后呢,你发现诶这怎么还报我错呢。你看是不是还报错啊,说啊行这块你也忍了,说这说咱没方法中,万一要我这一写没方法它就好了呢,哎这呢,我们要想调这个方法呢,还得需要创建当前类的对象。行造了对象,然后此时呢,你通过这个test test呢,我们去调一下这个赛道,我们设置成这个三发现呢,这时候还是不好使。那其实那就说明我们通过方法当中,你去给这个final的属性赋值上不靠谱,是不可以这样做的,那么又想说问为什么?为什么呀啊,方法可以重写那那不对,方法可以掉好几次啊,也算是个偏的理由啊,别的呢。
10:10
方法不一定被调用,诶这也算是个理由,就是我们这时候呢,你说是可以对它赋值,那我要不掉方法,那不相当于final没附上,那也是一个道理,这也可以还没说到最核心的那个点上,就刚才说的两个理由,其实也都算是,嗯,可以接受,最核心的个原因是什么呀?对,就涉及到加载创建对象这个事儿了,对的就是我们构造器是你这个对象出生的,是不是最后一道关卡呀,这个构造器调完以后呢,这个对象就出生了,对象一出生,我们在对空间当中相应的你这个属性呢,是不是就加载了,这时候就得有值了。我们通过对象你去调方法,只是说呢,我们会对这个值呢进行再修改,那咱们是常量了,你就不能考虑修改的事了,那我们这个时候呢,在这个空间中放在这几个,一开始咱们就要变量了啊哎,你用反正修饰一一下以后呢,我们这时候这个量呢,也会在这空间中出现,我构造器一调完这时候就出现了,出现的时候,这时候你又得告诉我是什么质量方法,那时候太晚了都。
11:13
所以方法这事就不靠谱。所以我们能够考虑的点呢,就是这样的三方面行,那么大家呢,当你去造一个类的时候,这个类里边呢,有final声明的这个属性了,大家呢,就可以考虑在这三个位置给它进行一个赋值。那么这三个位置你要非要再去谈一谈,说有没有一些小细节的点,这我就我我先把这个先先注掉了啊,就这种操作呢,是不靠谱的。啊,那么在细节考虑说说这三个呢,我到底应该选哪个更好一些呢?那这块呢,就是看你想怎么做了,就是嗯,咱们呢,如果你要是造多个对象的话,如果多个对象呢,大家的这个属性值呢都一样。我造了好几个对象,这好几个对象呢,这个比如说Y都是零,那你这呢,你就没有必要非得在构造其中去写了,你可以呢,就显示负一个值,或者说呢,你也可以呢,是在这个代码块中去赋个值,尤其是当你要这块呢,负的这个值还不是简简单单一个值啊,而是调到另外一个方法,但是这个方法呢,又抛异常,那就麻烦了,那你就只能是在代码块中去付了,如果就是一个简单的值的话呢,大家就可以直接显示初始化写着就完了。
12:27
就这样,那还有的时候呢,多个对象大家拥有的这个,每个人有一个这个变量嘛,加引号的变量是吧,每个人有一份,那如果大家这个值不一样。那其实你就用构造器去付,就像这种我们拗拗一个它的时候呢,我这写了个一,就是你拗当前这个对象呢,Right是一,我要再拗一个对象,我这放了一个三,那你就是诶第二个这个对象呢,这个值是三了,就是如果每一个对象的这个这个咱们不能叫变量叫属性了啊,这个属性的值不一样,那你就在构造其中去付,如果大家的值都一样,你可以呢去显示付,如果说呢,这个时候不是简单的一个值,而是掉了一个方法,尤其这个方法可能还抛异常,你还得去处理,那放到这块赋值呢,就做不了了,那就放到代码块中去做,这就是他呢又细节的去分了一下,该如何去赋值。
13:20
行,这是关于这个final修饰一个属性赋值的一个情况。
我来说两句