00:00
OK啊,这个又是新的一天是吧,今天的这个下雨了,天气也比较冷啊,这块大家得注意这个增添这个衣物了啊,另外一方面的话呢,天气越冷的时候呢,早上越不愿意起是吧。啊,不知道是不是有这个同感哈,这个尤其呢,对于这些习惯上这个晚睡晚起的同学来讲呢,更是如此啊,总感觉这个晚上的时候呢,大脑总特别的清醒啊,夜深人静的时候,在这学习技术呢,好像能学的更多一样,是吧?啊,但是不管怎么样,这个白天这个状态肯定还是最重要的啊。得想办法让自己白天的状态是最好的啊,这个才是靠谱的啊,OK。行,那有句话怎么讲呢?说希望呢?每天叫醒你的不是闹钟,而是梦想,是吧?发现呢,确实每天早上这时候呢,做梦是最香的啊。然后呢,像今天早上这个起来之后呢,我在厕所的时候,我就看了看手机新闻,就现在呢,世界杯期间啊,每天都有这个世界杯的新闻这个推送啊。想想这个时代呢,确实变了。说以前的时候呢,都是这个奴隶或者叫角斗士在这个赛场上这个比赛,然后贵族跟大臣们在台上看这个比赛是吧,说现在呢,都是。
01:04
啊,几个亿万富翁带着一帮千万富翁们在台上挥汗如雨。咱们呢,这个看比赛是吧。顺便再买几注彩票啊,然后赌一赌,看谁能赢,想一想,我们才是工薪阶层是吧?哎,时代也变了啊,然后呢,再想一想呢,这个生物还得继续啊,咱们就继续来讲这个技术啊。好,这个面向对象的话呢,我们已经讲到这个第八章了啊,这呢也是咱们说的这个第二个阶段啊,那今天呢,咱们这个内容呢,就能够告一段落啊,昨天的话呢,我们是讲到这个注解OK啊,然后接着的话呢,我们再看第12个内容啊,这个wiper翻译过来呢,叫做包装类啊,或者叫做封装类啊,这儿呢,就涉及到了几个类的使用啊,其实难度呢也不大啊。好,这块呢,一上来会提到说为什么要使用包装类啊,那对应的呢,我们来看一下这个课件。哎,这呢我们写了一段话啊,诶我们看一下说呢,Java呢提供了两个类型系统啊,分别对应的叫基本数据类型和引用数据类型啊这呢我们已经很熟悉了啊,正态使用基本数据类型呢,在于效率。
02:08
然而呢,当要使用只针对于对象设计的API或者一些新特性的时候啊,该怎么办呢?这时候就会遇到一些麻烦,比如说看我下边呢,举了这样的几个例子啊,第一个例子的话呢,比如我们在这个object这个类讲它的时候呢,提到一个方法叫做equals,这个方法呢,说用于比较我们说引用数据类型变量的,哎是不是相等。那这时候你发现它这个行参呢,只能够传object类型这样的变量,Object债的话呢,我们说你可以传各个类的这种对象,以多态的方式传进来是没问题的,而且呢,我们讲过哈,在object的这个API的声明当中,他提到了说数组呢,也可以看到是object它的这个实力一样,所以你要数组呢,往这放也是没问题的。啊,那现在的问题呢,就出现在基本数据类型是明显放不过来的。咱们前面呢讲面向对象讲了这么多,包括一些封装啊,继承啊,多肽啊,这么多丰富的特性,跟基本数据类型一点关系都没有。
03:06
他都用不上。那这个位置呢,它也放不进来就很尴尬是吧,包括呢,我们再举个例子,后续的话呢,我们会讲集合,就是也是跟数组一样的容器,这呢是容器这个集合当中的其中一个类哈。说这个类呢,它有一个方法叫做爱的方法,这个方法呢,它这个行参呢,也是object类型的,好了,那现在的话呢,假设我们就想使用这个容器啊,暂且呢,大家就把它想象成是个数组一样啊,如果我用这个容器呢,想往里边呢放学生的成绩,学生成绩呢,我们说是in的类型的啊,那不好意思了,放不进来。因为呢,我们这个方法呢,在list当中只提供了这唯一的一个方法,没有重载的,你说行参呢,是int类型啊,是long类型啊,W类型啊,不好意思没有。所以呢,就用不了。啊,很尴尬,没有这样的一些方法。包括呢,我们后边呢,讲一个新特性,这个新特性呢,叫做泛型,就是我们这里边一个监控号啊,写了一个T,这个T的话呢,我们在使用这个类的时候呢,需要指明它到底是什么类型。
04:07
那么不好意思,Java规范当中说了,说这个气呢,只能是引用数据类型。那就意味着我们基本数据类型呢,就放不进来了。啊,所以说呢,归结成一句话啊,说基本数据类型呢,呃,基于效率我们是使用它没问题,但是呢,在很多的场景下呢,我们希望呢,他们具备类的这种特征,换句话说呢,能不能让基本数据类型的这种值,哎作为一个哎像对象一样的结构呢,放到我们这个行参的这种位置,作为实参呢来出现。啊,那么这时候呢,我们就提到了基本数据类型,亟待的需要让它对应着一波类,跟他们有一一对应的关系,啊,那么对应的这个类呢,我们就称为叫包装类。OK啊,那么具体都有哪些包装类呢?其实我们这块一看啊,大家就都非常的清楚了,基本是类型有八种,对应的包装类,就是右边的都是一一对应的关系,你看这个起名字的时候呢,其实也很有特点啊,基本上不出意外的话呢。
05:04
都是每一个基本数据类型,把它的首字母呢,改成这个大写的就可以了。啊,不出意外的话呢,意外出现了。啊,这块有特别的啊,特别呢,就是我这里边儿标红的啊。这个int类型呢,它的包装类呢,叫做。其实呢,就是它的一个全称,这个叉的话呢,包装类呢,也是它的一个全称叫做character。那这呢,是这种对应关系,除了这俩之外呢,其他的都是首字母呢,小写变大写就是对应的包装类。好,那原来的话呢,比如说我们in了一个此科叫学生的成绩,假设呢考了80分,那现在的话呢,我们就需要呢,用一个inju这个类的一个对象来表示它的成绩了,成绩的话呢,你也想是80分,实际上呢,这个时候呢是integer这个对象呢,内部有一个属性,这个属性呢是一个特类型的,它呢是80分。诶是这样的一个场景,好,那对应的这个内存结构的这个变化的话呢,是这样子的,我们原来的时候呢,在没方法当中声明了一个就变量啊说呢就是520。
06:07
啊,Int类型的,那这个时候呢,它就纯粹的是在这个占空间当中,没方法的,这个战争里边呢,我们有一个number叫做520了,所以呢,如果你要是啊,以一个对象的方式去呈现的话呢,那就是new了,一个integer,哎,我们说new的这个都是对象了,我们就放在这个堆空间里了,然后呢,我们这个变量呢,叫obg放在咱们这个战争当中。好,它指向了最空间里边,你创建的这个对象实体,在我们这个对象实体里边有一个属性是int类型的,它对应的值呢,叫做520,叫做V6。那就成这样了,从那个角度来讲呢,其实我们原来的这个变量名呢叫number,现在你只是相当于把这个也是int类型的这个变量呢,给它拿一个类呢去包了一下。哎,使它呢,具备类的这个特征,所以从这个角度来讲呢,什么叫包装类,什么叫封装类呢?其实就是把我们基本数据类型给它包了一下,就是包装类嘛。那就这样一个特征。
07:01
使呢我们基本数据类型具备了类的特点。OK,那这里边儿呢,我画了一个虚线,这个虚线当中呢,对应的你看都是一些数值类型的,这个数值类型呢,它们的一个默认的负类啊是number,这个number呢,再是继承业object。啊,这有一个小的一个特点啊,大家注意一下,那么实际上啊,刚才我们其实也讲到了啊,说这个基本数据类型和包装类呢,它是一种什么关系,就是包了一下啊呃,也就是说呢,如果我们自己去定一个包装类的话啊,其实就是这样子的。比如说我这块定义这个叫my inte了,呃,跟实际上这个这个定义方式啊,基本上是一样的啊,就是呢,在我们这个类里边呢,我声明这个in型的一个变量,这个变量呢,习惯性的我们都叫做Y6了,咱们看源码的时候呢,它也叫Y6,那对应的我们去提供这个构造器,那有一个初始率的方法,把这个你实打实的这个值呢给打印一下,就不要呢默认打印地址了啊。好,那当我们通过这个类的构造器去造对象的时候,比如说刚才呢,你看上面这个值,我们写了个520,实际上呢,就通过这个行参啊,传这个520这个十参过来,最后呢,就把你这个类中的这个属性呢,改成520。
08:08
啊,原来呢,只不过就直接呢,负这个值是520,现在呢,就是付给他的对象的一个属性了。啊,仅此而已啊,所以呢,没什么大不了的,就这样个场景去体现好,那么原来呢,你有一个这个in特一个学生的成绩,现在呢,就是以一个特尔对象的形式来出现了,那么进而的话呢,我们就可以呢,是放到这个形态的位置了。哎,我们就可以使用呢,呃,类当中丰富的那些特征了。所以呢,总结一句话哈,说我们为什么要使用包装类呢?诶,我们可以理解成了就是为了使得基本。哎,数据类型的变量啊,具备类的,或者叫具备引用数据类型。啊,类型变量的相关特征。啊,这里边呢,我们在这加个小块叭,如说咱们讲类这块呢,提到了丰富的这种面向对象的特点,比如封装性啊,啊继承性啊,多态性啊是吧,还包括呢,我们在这个类里边可以定义很多的方法呀,那对于基本数据定向呢,其实默认你都没有是吧?哎,那为了使它,使得它呢具备已数据类型的相关特征,然后呢,我们提供啊,或者叫我们给各个。
09:20
基本属于类型。啊的变量啊,都提供了对应的这个包装类。啊,那么这时候呢,我们就具备了这个类的特征。啊,这呢就是我们为什么要使用包装类这样的一个原因了啊好,刚才我们也看到了说八种基本数据类型对应的包装类都是什么了,所以这块呢,需要大家能够记住它啊,比如说bad类型。叫be是吧,哎,Short类型。Short左边的话呢,我们叫基本数类型,也对应的是叫关键字啊,右边这块呢,就是纯粹是累了。对,也不是关键字啊呃,In在这块呢,稍微注意呢,叫做in。是吧,好,Long类型。
10:00
哎,大写的这个浪啊,然后呢,Float。对,Float double。大写的这个double是吧,然后还有这个叉啊叉呢这块注意一下是叫。Character是吧,他然后呢,布尔。五。诶这样就可以了,好,那么首先呢,大家需要记住的就是我们这个事儿啊,然后刚才也稍微提了一下,就是上面这些呢,都属于数值类型的,这呢我们稍微分一下啊,他们哥几个呢,是继承于number的。哎,稍微的留意一下就可以了啊。好,那么针对于我们这一节呢,叫做包装类啊,它的这个使用了,那我们讲它主要讲什么事呢?其实非常的明确,以前的时候呢,我们在代码里边呢,使用的是基本数据型了,说现在呢,既然在有一些场景下呢,必须要用这个对象的方式去呈现了,所以我们需要掌握的就是诶,把基本数列型转换为对应的包装类。啊,那同时的话呢,包装类的对象呢,我们在有一些场景下呢,也需要把它转换为基本数列型,所以呢,我们就讲一讲他们之间的相互转换,这个呢是我们讲的一个重点,那另外一个重点的话呢,就是我们还有一个类型呢,叫做string,非常的常用啊,那比如我们从键盘呢,获取数据的时候呢,假设呢,你写的就是78分,所以这时候呢,是用双引号引起来的,那么这样的一个字符串呢,我们要考虑怎么把它转换成。
11:21
纯粹这个数值的78。包括的话呢,我们通过这个客户端也好,浏览器也好,用户用户呢,发送给后台的这个数据,那很多时候呢,我们这个数据在前台这块呢,比如这是你的姓名,你的年龄,你的性别,你的家庭住址,你的联系电话等等这样的一些数据呢,你发送给后台的时候呢,我们认为全都是字符串。那么我们接收到的时候呢,也自然而然的就都是后台用Java来接收,就都是字符串了,那我要有能力呢,把比如说你的这个年龄啊,你的性别啊是吧等等一些数据啊,包括你的体重是吧,转化为对应的基本数据类型,那这时候呢,我们就需要呢,涉及到了说对呢,怎么与基本数据类型或包装类之间进行转化。
12:01
诶,所以咱们包装类这块呢,其实就讲俩事儿哈,诶一个是这个转化,一个呢是这个转化,然后呢,我们在具体的题目当中能够灵活的去运用就可以了。好,那咱们呢,首先就来看这个第一个问题哈,说为什么需要基本数据类型和包装类之间进行转换呢?其实刚才我已经说这个问题了啊,这呢我稍微写一下,说呢一方面。啊,在有些场景下啊,需要呢,使用基本数据类型。嗯,对应的包装类的对象。啊,那么此时就需要将基本属于类型。啊,类型的这个变量呢,转换为哎,包装类的对象。那比如说啊,像我刚才那会提到这样一个场景,说呢,这个release呢,它这个容器它呢有个方法,这个方法呢,就艾方法,它这个方法呢,人家就有一个。啊,就是型三呢,叫object类型的,那你想想现在呢,我们要是把学生成绩呢放进来,那不好意思,你只能把这个成绩叫做基本数据型,转化成这个包装类的对象往这放。
13:07
哎,才能够去使用啊,还包括呢,咱们说的这个object啊,这个类的啊,叫做equals方法。啊,这个方法的这个行参的话呢,我们看到了它也是偶类型的,所以呢,基本数据类型的变量你要往上放。放不了啊,那你这块你只能是放它对应的包装类的对象才可以。嗯,这样呢才能够去使用啊,OK,好,这是一个点了,这个呢就提到了,我们要把基本数据类型的变量转换为包装类,反过来。包装类呢,对象为什么还要转回去呢?哎,那我们说了,既然呢,你是包装类,既然是对象。啊,既然是这个对于包装类来讲啊。啊,包装类来讲,既然,哎我们使用的是对象。哎,那么咱们都知道啊。这个那么是吧,这个对象呢,是不能进行像这个加减。
14:03
这个乘除啊等运算的。那你比如说我现在把这个学生成绩呢,都放到这个release这个容器里了,咱们呢,都是以包装类的对象来往里放的,所以呢,我现在想计算一下这个班级的平均成绩是多少分,就最高成绩是多少分啊这样的一些数据,那我们可能需要做一些加减程度的操作了。那么这个时候呢,你注意呢,咱们拿到的是一个一个的包装类的对象了,那对象呢,哪能做加减乘除啊,哎,所以这时候我们就有必要呢,把这个包装类的对象呢,转换为基本数据类型的变量啊。哎,是不能接着运算的啊,为了能够。啊,进行这些运算。就需要。诶,将诶包装类的对象转换为基本数据类型的变量。诶行,这个事儿呢,应该非常清晰啊好,那下边呢,咱们就来做这个事儿就可以了,好这块呢,我们就又建一下啊,新建一个,那这个对应的包装类也好,叫封装类也好,咱们叫做wiper啊。
15:09
关于它的一个测试。哎,好了,这个呢,我们刚才也提到了啊,就是呢,这样这个基本数据类型,诶我们把它呢包一下啊,具备这个类的特征是吧?啊里边呢,就有很多的方法我们都可以去使用了啊好,那么我们这块呢,就来做这个测试,前面的话呢,咱们讲这个注解的时候,单元测试这呢,我已经生成这个模板了,所以直接我写test啊,就写个一啊就可以了啊。OK。嗯,那么在这个位置呢,我们写对应的这个注释信息啊,就写一个多行注释吧,啊这里边儿呢,我们就讲两个方向啊,相互之间的一个转换。哎,这个我就直接拿回来了。OK啊,首先的话呢,我们来看看第一个啊,说基本数类型怎么转换成包装类啊,这里边儿呢,我们提两种方式啊,第一种方式。啊,第一种方式哎,叫做使用包装类的构造器啊,就刚才我们看这个课件的时候呢,是不是这也给了一定的提示吗。
16:04
啊,在这是吧,能看着,然后我们自定义,自定义一个这个包装类的话呢,其实也有这样一个提示,就这样写啊。OK,那么回过来呢,我们就来做这个事儿了啊好比如说现在呢,我一个in的形的,我叫I1吧,这个值呢就是十,那很显然这IE你看这点也没什么方法可点的,咱这看到的其实都是一些模板是吧。啊,没啥可用的哈,那把你包装起来啊,这个我们叫做integer。这个呢,比如叫。Iie吧,啊好,这块怎么写呢,New一个音。哎,这么着,然后呢,在这个位置呢,我们CTRLP一下。看到一个不幸的消息是吧?这里边呢,有两个构造器哈,但是呢都已经被depated了啊呃,咱们先用一下哈,上面这个呢,叫int的一个Y6,我们这呢,可以直接放一个int型的值,就就我们的IE呗。哎,这个呢,我们看到他被deprecated了,他呢,从什么时候开始的呢?酒是吧,也就是说在这个八里边呢,这个正常用都没有问题,酒的时候呢,已经被呃标识为过时的了,就不建议我们去使用了啊,那不建议我们使用它就给告诉我说建议我们用哪个是吧。
17:11
哎,是不是建议我们用这个了。咱们等下再说这个事儿啊好这呢至少呢是一种方式,也是比较传统的一种比较好利的一种方式,就是呢,把咱们刚才的这个值。传给当前你这个类里边的这样一个成现变量,这个成现变量value呢,就是我们这个int型的。也非常的清晰啊,OK,行,这就是其中的一种方式,然后呢,我们现在的这个IE啊,注意已经是个对象了,那就意味着你看我点的时候呢,是不是有丰富的方法可以去掉了。而且呢,还可以多肽的方式呢,出现在你方法的行参的位置。啊,你声明成object,那我就可以放进去了,那就没有任何的问题啊,比如这块我们就简单的去点to string一下啊,其实这块你不调的话,默认里边也是调的,当然这结果的话呢,其实还是你当前这个对象的核心的这个数据啊,结果呢,其实还是十啊。
18:03
哎,注意这样一个场景。但是呢,你注意现在呢,有变化了啊,这个基本数学型这呢是一个对象了。对,包装起来了,具备了类的特征。这个我记得小时候呢,看过一个动画片,不知道大家呢看没看过啊,就那个圣斗士。听说过应该是对吧,应该没看过了啊,因为现在呢,大家可能都不怎么看他了啊,这个我记得我上大学的时候呢,圣斗士还出了一个冥界篇,冥界前传,感觉拍的还挺好啊。这个呃,圣斗士呢,没看过了,就是这个他最初的时候呢,有这个12宫系列的啊,里边那个主要的那个主角呢,不叫星矢吗。啊,叫天马座的是吧,这个其实比较菜的啊,但是呢,永远打不死是吧,男主角嘛,然后呢,每次呢,要被这个敌人虐的不行的时候呢,然后那个射手座的生意呢,就飘过来了。一穿上,然后这个什么战斗力暴增是吧,你可以想象成那一开始这个形式呢,呃,青铜。生意是吧,就比较菜哈,就好为是这个基本数据型的变量一样,然后呢,一穿上这个射手座这个生意之后呢,是黄金生意是吧。
19:07
啊,就是通过这个声音呢来区分这个战斗力怎么样啊,传上以后的话呢,这个战斗力暴增啊,就相当于是呢,变成一个对象了,具备了类的特征了,有很多的方法呢都可以去用了,很多技能都可以发了,是吧,那类似这样的场景就跟大家这个玩游戏的时候呢,买装备一样是吧?买装备越好呢,这个战斗力呢就越强啊好比呢就给它包装了一层一样。啊,就这样啊。好,这个呢,就是我们说的第一种方式叫使用包装类的构造器,诶这个虽然被depreated了,但是咱们也稍微的把它先说一说,然后呢,我再说呢,咱们替换成什么啊,那对于其他类型呢,也同样的如此啊,咱整一个float吧,哎,F12.3加个F,好,那我们也可以呢,去new一个float在这里边,你把F1呢往这一扔,哎,返回来的啊,我们就是一个float类型的。哎,这样的一个对象了,那既然是对象了,你看相对应的这个方法呀,等等的这个都有。咱就先调一个叫a two人吧,来做一个执行。
20:05
嗯,那这都没问题啊,行,这块我先拿着这个构造器呢,我们再稍微再测试两个啊,嗯,然后呢,再来一个,比如说布尔类型的,哎,这个我们叫B1。来一个处没问题啊,然后呢,我们就new一个啊,Booing把B1呢往这一扔啊就可以了,然后返回的啊,就是波尔类型的一个对象。B比如说就它了啊B行,这个我就不打印了啊,这个一看就知道了,然后呢,嗯,接着来说哈,你看我们上边这个呢,是我写的是它哈,你说这个F1,我要是把它再改成一个。那这个改成什么,其实都。都可以的是吧,你说这样写的,他本身也报错啊,你肯定是得写个F了,就这块儿呢,没啥问题是吧,实际上这里边儿呢,还有一个特点啊,就是这样的,我就先写到这儿吧。我们在这个构造器这块呢,除了你能看到呢,它能够传一个float的类型的之外呢,你看它还可以传个double类型,还可以传一个字符串。
21:01
啊,这个呢,我们先传的,相当于是一个基本呃,Float类型的哈,我再传一个字符串,它是有这样的这个场景,比如说我叫SE。这个呢,我就写成了叫32.1。哎,这样写的哈,就里边呢,实际上呢,它还是一个float类型或者double类型的就可以了,然后呢,我们也可以呢,再接着去调这个float。里边呢,你把这个S型呢,往这一放,这样啊,这时候呢,我们看返回的这个靠不靠谱啊。这个我其实也不用打印了,只要他正常能够执行成功,那就说明没有问题啊,这个行不。那其实呢,也是可以的。你看没有问题啊,是可以的,也就是说呢,这里边呢,只要你实打实的放的是一个浮点类型的,其实这块我们也看到了啊,刚才看构造器的时候,Float类型,Double类型,Do叉类型都行,这呢你写成个double也没关系啊,只要呢,你实打实的是这个类型的就行,不要这样去做,比如说我们这个SE呢,我改成了一个叫ABC是吧。这个时候呢,我们再去一个,这是不是就出问题了。
22:02
哎,这个呢,我们再接收一下叫F f3。我要去运行,是不是必然就挂掉了。因为ABC的话呢,根本就是一个不是一个型的嘛,这块呢会这个啊,你这写了个AB在这个四出现,所以这块呢,要注意它会呢报。异常。啊,这个能理解吧。就是你实打实的,这里边儿呢,放的并不是一个数嘛,就是数据的这个格式化的一个异常啊,真的大家要小心一点。所以呢,就是你要是这里边呢,传一个对应的这个基本数类型肯定是没问题的,但是呢,他也能够去放字符串,但是放字符串的时候你要小心一点,你得放实打实的就是这个类型的这种数哈,但是你要写个32呢,其实也行是吧。啊,这有个提升一样了,但是你要放一个不是这个类型的啊,其他的这个就不靠谱了。哎,所以呢,我就注释掉了啊,那对于这个布尔类型呢,也类似的,比如我这写一个死顿类型。那我这呢叫S。S2啊。
23:00
这个位置的话呢,比如我这儿呢,写了一个。这样写的啊,然后呢,我就捏一个这个,诶布纹。是吧,然后呢,把这个S2呢,我就放到这里面了。放这里边以后呢,我们就拿一个波类型的来做一个接收。这个。或叫BB2这么着,这个的话呢,是不是也没问题。是可以转的。嗯嗯,不会出错啊,行,我就不打印了,嗯,那你说我们要是这样写呢,S2是吧,我写成叫four。就就随便来了啊,你看大小写上有区别了。这时候对吗?似乎的话呢,感觉就可能转不成了是吧,因为说呢,这也不像是基本数据类型那个触或false,你这有大写的感觉不太对了是吧,那实际情况呢。哎,这我们打印了一下啊走。好,这时候你发现呢,它没有报错啊,而是打印了一个叫false,相当于他也能够识别。那如果加个123呢。
24:03
感觉上应该就不行了是吧?啊,那么事实上呢也行。诶,就是关于这个布尔类型这块稍微的有一点特别啊,特别就特别在呢,就只要你长得跟那个处啊不一样啊。他就都认为是false了。诶其实这块我们看源码的话呢,也比较清楚啊,比如说这块这不是S2嘛,我一点进来这块呢,它不就诶不用看这儿了哈,是不是就这个字符串嘛,它是不是就掉这个了是吧?掉这个的话呢,你把这个字符串放进来,我们再点,诶把这个字符串放进来,它就再看说呢,你在忽略大小写的情况下呢,你跟这个处呢,是不是一样,如果一样呢,返回的就是一个。只要呢,在忽略大小姐的情况下呢,跟他不一样了,那我就认为你是false了,那么显然我们刚才这个结果呢,是不是false。哎,那就意味着其实我们要这样写啊,我写成是叫触。这算是结果是除二方三。是不是也是处对吧?对,只要你在忽略大小姐情况下呢,哎,跟处长一样的就行,哎,有这么一个小的细节。
25:01
OK啊,那这块呢,大家稍微的关注一下就行了,好,那这个呢,我们关于构造器这块呢,就说的已经很多了哈,看着这块还是挺难受的哈。等一下我们去调一下,然后这是一个事儿,然后另外的话呢,他提到说建议我们改成什么啊,比如我们以这个构造器为例,它这块明确说了说呢,有一个静态的方法叫Y625,建议呢你使用它。啊,是一个更好的啊,A better choice啊,更好的选择,为什么呢?下班说他怎么怎么着。啊,一看的话呢,感觉有些单词就不认识了是吧?啊那这块呢,大家你把它一选中啊,一右键,然后这块有个叫translate selection啊一点。就把它翻译出来了。说呢,因为呢,它可能产生明显的更好的空间和时间,性能相当于我们new的方式呢会更好,性能呢会更高,所以推荐呢你去使用,那么大家呢也这样去做了,发现你那就没有它。对这呢是一个插件啊,那说到这儿呢,我们就简单提一下,在settings这里边。哎,咱们这呢,不是有对应的这个叫插件吗?这个呃,Installed啊,你把这个呢,Translation呢,给它装一下。
26:07
啊,这个小插件有网就行是吧,装一下装完以后话呢,默认还不行啊,嗯,在这个to这里边儿,你得设置一下是不是猝这里边你装完以后的话呢,它就有一个叫translation翻译是吧,这样的一个选项啊后来以后的话呢,默认的话我记得是谷歌的。谷歌的这个现在国内的已经不行了都啊,我记得前段时间谷歌翻译在国内已经停止服务了。所以呢,你只能是从下边这块去选,我这块呢,习惯上就用有道了就可以,但是你选中以后呢,还不行,你还得去做个配置啊,这个配置的话呢,你需要呢,输入一个应用程序的ID和它的一个密钥。啊,这个呢,你要没有的话呢,这不一开始我也没有吗,你就点击这个,它会自动的就开始给你联网,联网呢到这儿的话,你注册一下就行,不用花钱啊。注册下就可以了,注册完以后呢,他会提供你一个呃账号密码,你把咱那往这一填啊,OK就妥了。哎,回过来,那这时候的话呢,你在相关的这种代码的层面,比如说这个呢,你看不懂,诶右键translate就翻译了,然后这段话看不懂,就像我刚才一样翻译就可以了。
27:08
好,那这块呢,我们拉回来看到呢,说有一个更好的选择,这块我们说建议。那使用什么呢?就是调用包装类的叫value of这个方法在这里边呢,就写你具体的基本书类型的这个变量就可以了啊好,这呢是我们的一个推荐啊。说呢?嗯,推荐使用。好,下边我们就来看一看这种方式啊,比如说我们还以上面提到这个in为例,咱们就调用这叫value了,对TE来讲呢,Value它这呢就传一个int型的。穿的话也行,但是string里边实打实的你就得是一个数了啊。好在这里边的话呢,比如我们把上面这个咱们定义过这个变量啊,In的形,我再来一个吧。另外来一个叫十好,我这呢把A2呢往这一放,哎,这不就可以了吗?然后呢,光标往这一放,然后alt加回车,那自动的生成呢,它就是个。
28:02
哎,这就没问题啊,哎,这是一个了,然后呢,布尔类型同样如此啊,这个我们就布尔点叫value o布尔类型的话呢,你这个value里边就是布尔了,仍然比如我就写成一个出了啊这块呢,相应对应的返回值。哎,这不就是一个波尔类型吗?哎,就这样一个场景。Float类型啊,一样的道理啊,这个呢,我们叫value of啊,这里边儿你就传一个float就行。哎,这么着返回来就是个float。哎,这就可以了,好,这呢是我们推荐使用的这个方式啊。呃,上面这块你要看着老是有好多红,感觉不舒服的话呢,不行,咱们就可以做一个调整也都行啊,比如在这个。这个程序的结构当中,哎,我们现在用的是八,哎这儿呢,我们用17的JDK是吧?哎,你把它呢,可以调成这个,比如1.8的这块呢,你也可以改成这个1.8的啊,这块我们点成OK,那相对应呢,这时候呢,我们就使用1.8的相应的这个运行式环境了啊,这个相应的就不会给我们报这个错误信息啊。
29:00
啊,就是看你自己调一下也行啊,这都小事啊好这个呢,我们就相当于说清楚了,它的一个转化方向,就是把基本数据类型转化成包装类,好反过来包装类怎么转化成基本数据类型的变量。啊,因为有些场景下呢,咱不说了,需要拿着这个对象呢,做加减乘除嘛,这个你得把它再转换回来啊好,那这个呢,转化我为了方便我就在这儿写了啊,咱们看着方便一点。写这了就啊好,那么这呢是往回转啊,这个我先把它呢再。这儿呢,再稍微再说一下啊好,下边我们说的是往回转这个事儿,往回转这个事儿呢,其实也不是特别困难。哎,我们先假设呢,有这样的一个对象了啊,这个位置我就直接写成一个使得了啊。那这个我就删了,这呢是一个包装类的对象,现在的话呢,我想让他比如说加个一。那你注意这是对象啊,对象加一可没有意义,那就得把它转化成基本数列型,你再加个一,好,这块就II1了,怎么办呢?这个呢叫叉叉叉Y6。那我们这个来讲呢,它对应的基本数列叫int,那就是int value。
30:05
呃,Int value是吧,教了一个方法,然后这时呢,我们回车一下,你看。我我先看一眼吧,这里边儿你看返回值,这不就in行,就是把你里边这个Y呢给返回了啊。行,那这块我们就直接结束了。哎,不就这样吗?哎,那么此时这个I呢,就是个基本数就行了,你让他,哎。加个一。啊,这都没有问题。那这都可以啊,就是你这个所谓的IE呢,你点也点不出来什么方法啊,它就是基本数列型了,行,这呢,就是我们调用的这个具体的哪一个结构了,那对于float的类型啊,一样的道理啊,把它CTRLC,比如拿过来这个位置我们就直接写成12.3啊F是吧,这样F1把它呢,转换成基本数类型float类型,那就是float y6。嗯,就这个方法。来一下类型。一诶,没问题啊,好布尔类型。一样。
31:01
啊,以它为例啊,CTRLC这个我都拿的这个构造器的,换一个不是说建议用这个吗。好,CTRLC。啊,这个粘过来啊,然后这时候呢,拿着这个B2,哎,我们这个布尔类型的,那就布尔Y6是吧。啊,比尔啊。布尔的value。嗯,这个我们叫BB吧。然后呢,这就得到一个布尔类型的。那我们叫B,哎,这不就可以了吗?啊,没啥问题啊好,这呢就是呃,使用的方式呢,非常的明确啊,就是叫调用哎包装类的。哎,叫叉叉叉,哎,Value是吧,这样一个方法啊,来返回一个基本数据类型的变量就可以了。好,这呢,就是咱们讲的对应的这两个方向啊,哎,大家呢,去熟悉一下。那么关于它俩之间的相互转化的话呢,对应的就是这样的一个实现啊,这呢,我把相应的方式呢,就往这一站。哎,放到这儿啊好,那这块呢,大家啊,有一个注意的事儿啊,稍微的我提一下啊,嗯,这个方法的话呢,我就往这儿来写吧。
32:06
就是大家你看的时候呢,你从下往上看啊,我这写个T3。嗯,什么事呢?嗯,你看啊,我要是在创建一个类,这个呢,也是我们平时开发当中,大家一定要小心的创建一个类呢,假如这个类呢,我就叫做account叫账户了啊。这个账户里边呢,你看以前的时候呢,咱们可能会去定义这种布尔类型的变量。啊,比如叫is flag。FLAG1啊。现现在的话呢,我们讲了包装类以后呢,有可能你写的时候呢,就写成这个大写的布尔了啊,这个叫is flag,我写个叫二吧。那么这两个你注意哈,它们是成因变量,就会有默认值,这个默认值呢,是有区别的,对吧。哎,你看现在呢,我们要去调的话呢,显然不一样了哈,你一个account。Out,回车一下,这不count吗?那么count呢?它默认的叫is flag1,它的值是多少?基本属于类型的。
33:00
False。对吧,然后另外一个呢。对,另外这个你一定要小心,它呢默认值呢是no啊,所以呢,它俩是有区别的。小心一点。啊,这个稍微的变异,这有点慢啊。这块的话呢,我们在这个里边呢,我写了一个JDK9的新特性啊,我刚才用的是八的,不让我用是吧。啊,那我就先把它呢给注释一下。因为我刚才不是调成八的这个运营环境了嘛,是吧,OK啊好这块我们再重新再去执行。这个idea呢,有个特点啊,就是你说我这个代码,我现在这个没问题,当前这个文件没问题,那不好意思啊,整个呢这个,呃,当前这个Mo也好,乃至于说当前这个工程也好,哪块有代码问题,我这块都会给你识别出来,都不让你过。啊,这个跟ecls呢不太一样,Ecls的话呢,你只要当前这个代码没问题,别的地儿你一顿爆红他也不管。啊改第二的话呢,更多的我们体现的就是相互之间模块呢,一般我们都是互相调用的啊,你这个呢,要想跑别的你也跑不了,所以呢,这得保证你都得没问题它才行啊,全部呢进行一个编译啊。
34:06
好这块呢,我们就看到了这个结果呢,注意是不一样的哈,进而还有一种情况不一样,比如说你像我们这个叫账户了,账户的话呢,我们以前呢,会定义double类型的叫balance,比如叫一是吧,现在话呢,有同学可能会去定义成这样的。包装类的这个balance了,这两个的话呢,其实也有区别啊。啊,你比如说回过来啊,在这个位置这个呢,大家其实也都能看得到了,通过这个count呢,我们去调这个balance的时候,它的这个值呢,是。0.0是吧。对,而对应的我们这个BALANCE2呢。是不是一个闹啊?对,然后呢,后期呢,你对它呢进行赋值,赋值的时候呢,你可以通过new的方式,也可以用我们说的这叫value的这种方式啊,去给大家赋一个值,赋完值以后的话呢,你说我这个值可能也是0.0。是吧,那么这时候呢,其实针对于这个我们稍微的提一下啊,假设呢,我们以前呢,用这个小写的基本数据类型来表示它的这个0.0呢,可以表示就是你这个账户呢,没有钱。
35:01
啊,所以呢,就是0.0花光了,或者说你一开始就没存好,然后呢,对于我们这个double类型这样一个包装类来讲的话呢,它的默认值呢是no,你可以理解为呢,就是这个账户的这个余额呢,一开始没有初始化。这个呢表示的叫no,那如果呢,你后期呢,给它赋值的时候呢,负为0.0了啊,你可能是new的,也可能是value o哎,负的值哈,这个0.0呢,你可以理解成了就是这个,呃,余额呢,这是一个对象了,这个对象呢被初始化了,只不过初始化好以后呢,你可能是没有往里放过钱,或者是你钱花光了啊,变成0.0了。哎,就是他呢这块呢,可以区分出来,你是没有初始化,还是说呢,具体账户没有钱了,而这个0.0呢,就是表示。就是0.0是吧,诶这两种情况呢,是区分不开的啊,稍微留意一下就行了啊好这块呢,主要强调就是既然呢,人家变成对象了,这个初始化值呢就不一样了,这个大家小心一点。OK啊,这呢,就是我们说的这样的一个场景啊,需要去注意的问题啊。
36:00
哎,注意就是原来使用。啊,使用啊基本数据啊,类型变量的这个位置啊。然后改成包装类以后啊,然后呢,呃,对于成员变量来说。啊,其默认值变化了。来变化。了是吧,诶好这就可以了。好,这场就是我们说的他俩之间的相互转化,但是这个呢,刚讲完,大家你注意先不要着急去记。啊,为什么呀,因为呢,我们马上呢。就不用了。什么意思,这个在JDK5.0的时候呢,多了一个新特性。这个新特性啊,我们称为呢,叫自动装箱。自动拆箱。哎,装箱拆箱什么意思啊,上面呢,我们把基本数据类型的变量转化成包装类,咱们就称为呢叫装箱。
37:02
诶就是相当于把你包装了一下呗,就是装箱嘛,是吧,比较形象,然后呢,把包装类呢,盒子呢这块一顿拆,拆出来呢,最里边核心的这个数据呢,就还是你这个基本数据类型的这个呢,叫拆型,跟大家开快递一样啊。好,这叫装箱,这叫拆箱,现代化呢,我们多了一个新的性呢,叫自动装箱,自动拆箱,压G呢,就不用你自己呢,一顿猛操作啊,去做这个装和拆的操作了,因为呢,这个行为呢,我们在实际开发当中用的比较频繁,既然频繁新特性就来了。好,我们看一下怎么去做这个事儿。嗯,这个我就还,既然都倒着写,我就都倒着写了啊,这个我写个四。大家看代码的时候,你倒着看,从下往上看是吧,这个呢,我们就讲一下这个所谓的这个新特性。好,自动装箱,自动拆箱,首先来看自动装箱。孙从张先生自然而然的就针对的是基本数类型转化成包装类这个事儿了。赶紧看啊。Int类型,IE10。好,我现在呢,需要一个int的对象啊,我叫IE了,怎么办呢,IE直接负。
38:05
啊,是不是很神奇?有没有觉得这个按说语法上应该过不了?你想你这是个基本数类型,这是个影数据类型,啥时候见过基本数据类型直接还可以用赋值符号赋个影类型的。语法上按说过不了是吧,哎,但是这呢是新特性说可以。就这时候呢,直接用就完了,这时候呢,我们这个IE呢,就是对象啊。I一点,那这个方法这不都很多吗。哎,都可以去使用,这呢就叫做自动装箱啊。没问题啊,不光这样能装,你说我再来啊,我我再来一个I2IE加上个一。尽管来是吧,你先加个一变成11 11以后呢再装箱。都可以。其他类型都行啊,比如说我们布尔类型。哎,这叫BB上来怎么着呢,直接就出了。啊,这个也叫自动装箱。把这个取一下啊。
39:02
没问题吧?好,同样的哈,这个float类型F1。直接在12.3诶。啊,自动装箱。哎,别的我就不一个去演示了啊,所以呢,直接赋值就可以了,那有自动装项,还有一个自动拆箱。自动拆箱。好,孙总拆项呢,就是反过来。CTRLC啊,这个往这一扔好,上面这块不是有一个叫IE吗。这个II1啊,是一个包装类的对象了,我直接呢就一个I2了。这就自动拆行。右边呢是对象,左边呢是基本数据类型的变量。啊,直接呢,往这一放就妥了。哎,没问题啊啊,其他的也一样的道理啊,BB是不是也是一个包装类的对象吗?直接呢,我就小写的布尔类型了。
40:00
诶,我就第一了啊,这样也没问题,诶自动的拆想行,其他的我就不一一去举例了,有了这样的新特性之后呢,似乎呢让你都感觉不到说诶包装类和基本数列型有什么区别一样。直接呢,就这样用了是吧。呃,确实呢,有利于提高我们开发的一个效率啊,你不用呢过多的去关注于这样他俩相互转换这个事儿了,所以呢,我们讲了上面这个操作之后呢,大家也不用刻意的去关注了,直接呢,你就要自动装箱拆箱就行,因为5.0嘛,已经是很早了。好,那可能呢,有同学呢,会关心一点,说他到底怎么做的这个事儿,比如说这是一个十,我直接把它就付给他了,是吧,他怎么做的呢。其实这呢,你也可以理解成叫语法堂。哎,这也是我们首次提到这样的一个概念哈。糖呢,一说到糖,大家都比较喜欢吃是吧?啊能够让人兴奋嘛,糖语法糖呢,就是说是一个小的一个语法的一个。特性一样是吧,呃,似乎呢,不太满足我们语法的一些正规的一些要求,但是呢,你这样一个轻巧的写法呢,就感觉更加的简洁,以后呢,我们还会讲很多的这种语法堂,这个呢是其中一个。
41:11
啊,你也可以呢,把以前我们写的这种,比如说上面的是一个in的类型的叫A2,然后呢写成一行啊写到一行了,等于呃new一个,然后呢,正规的写法呢,这个中括号,然后这个大括号,你写个123是吧,然后呢,把这个位置呢说就可以省略了,我们叫做类型推断,你也可以理解成这也是一个小的语法堂。以后呢,我们讲拉姆达表达式,那更是那就大的语法糖了。OK啊行,就是这块的话呢,稍微再体会一下就行,那他到底怎么做的呢?其实它里边呢,就是用的这种方式。就还是呢,用的他给你操作的。啊,这个呢,咱们可以看一下,诶,我们把它俩稍微的run一下,Run的目的呢,实际上是让它出现编译啊编译行为出现以后呢,我们在VI这块呢,这不有一个码文件吗?我们可以打开这儿,咱们现在用的是这个四的这个方法,打开看这个自询码文件,这时候呢,你就能够看到是不是这块就掉它了。
42:02
啊,非常的清晰啊,所以呢,在本质上底层来讲呢,还是用的这个方式,只不过呢,他给我们封装了一下。啊,不用我们去过多的去关注了啊。那拆的话呢,这块呢,其实也对应的来,我们看一下啊,往下拆,你看往下找是不是拆的时候呢,就用的是这个操作了。哎,这不对应的就是我们使用的这个方法吗。所以这块用的还是这个方式和这个方法。只不过呢,不用我们去改写了,你就用它就完了。这呢,就我们讲到其中的第一个方向啊,如何呢,把它俩之间相互转化,需要大家会写,哎,你也不用去记这个事儿了,就记这个事儿就行。
我来说两句