00:00
好,那么上午的话呢,咱们是把这个篇呢,咱们就讲完了啊,讲完之后呢,咱们接着来看其他的这个新特性,这块呢,就涉及到咱们一直到JDK时期啊这样的一些新特性了,这块对应的这个课件呢,我们是写到这个下篇,诶大家呢可以打开,然后呢,这块我们讲解的话呢,首先呢关注于啊,还是JK8之后的这个新的语法上的一个变化,在语法上这块的话呢,比较好使的啊,或者叫比较有用的一些语法上的结构呢,我呢就罗列出来,在我们这个第六节当中,一共呢,是罗列了有八个,那其他的关于API层面的变化,包括其他结构的一些变化啊,需要大家做这个关注呢,我这呢都罗列到我们接下来这个七和八这个内容里了。好,那么首先呢,我们来关注一下这个语法结构的变化啊,那语法结构呢,整体上来看是希望呢,我们从这个叫复杂繁啊,这个繁琐的这个低层次的这个抽象当中给他解脱出来,呃,使我们写这个代码呢更简洁啊,更优雅,当然呢,也意味着就更加的抽象啊,降低我们整个的代码量,诶,当然呢,回忆一下我们前面讲的这个拉姆达表示方法引用,其实呢,也是这样的一个特点,对吧。
01:07
好,那这里边的话呢,我们首先来讲解其中的第一个新特性啊,这块呢,提到了叫Java的ipl工具J10命令啊J这个命令,那ipl是什么呢?我们特为它叫交互式编程环境啊,这就是这样的几个单词的首字母的缩写。啊,那么在这个新特性方面呢,实际上呢,是学习了像Python和skyla这样的语言。啊说呢,我们可以呢,以交互式的方式对语句和表达式呢进行求值啊,即写即得,快速运行,这是一个什么意思呢?啊,其实这块呢,大家也做一个了解就行哈,呃,你看咱们第一天写hello word这个时候啊,大家呢,其实也发现了哈,我们这个对家要求呢还挺高的,一上来呢,首先我们需要创建一个点Java结尾的这样一个文件是吧,里边呢,首先上来我们得定一个类。起个类名,然后里边呢写一个main方法啊,还挺长的是吧,里边呢写我们具体的输出语句特别重,我们才出来一个hello word啊,才跟世界呢打了一个招呼啊,那我们说能不能简洁一点,那比如我们现在做一个简单的一个啊,使用Java语言的一个数学运算啊,我们这块还得必须造个类,还得编译,还得运行,很复杂。
02:17
那要想简面的话,简面一点的话呢,我们就可以使用J绍这样的一个指令,注意这呢是我们JDK9的一个新得性啊ug呢,就是你现在使用J个八呢是不可以的啊,诶首先呢,我们V2一下啊,大家呢输入一下这个叫CD,首先呢看一下你当前啊使用的我们这个JDK的一个版本,诶我这呢使用的是最新的十七点零点二,诶大家这块儿呢,你也可以呢,去这个在我们环境变量这块呢,你去做一个配置是吧。哎,我这说的最新的也不准确了啊,最新的现在是19了,就我们最近的这个LTS这个版本OK。行,然后呢,这块你如果是JDK8的话呢,这个咱们已经说过很多遍了,你在环境变量这块呢,做一个修改就可以了,咱也都装过JDK17了啊,你只需要呢把JDK17这样的一个,呃,这个。
03:01
JDK一个路径是吧,写到这儿啊,然后呢,我们这个账号后呢,在我们pass里边呢,去使用一下就可以了,OK啊行,那改写成了JDK9及之后的啊,这样的版本之后呢,我们就有一个指令啊,大家呢直接呢去写一下这个叫j shell。嗯,这样呢,你看我们就进入了这个介绍这个指令了啊好进入以后的话呢,首先呢,咱们可以呢,来一个叫做help是吧。啊,Help呢,就是帮助的意思啊,很多这个指令的话,我们都有help这样个相关类似的这个指令,查看一下,我们都可以呢,使用G的哪些相关的命令啊,在下边呢,其实都给我们罗列出来了。OK啊呃,关于我们这help这里边呢,最简单的一个呢,就提到了一个叫intro啊,其实呢,就是introduction的意思啊,比如说这块我们写个help,然后再来一个叫啊intro啊这块呢,就针对我们这个介绍的一个简单的一个介绍。啊,这个比较简单啊,就不过多去说明了啊,然后我们可以使用它干什么呢?啊,你比如我们定一个变量M呢,这个就十是吧,另一个变量N呢,这个是20。
04:02
我们这里边儿呢,就可以去计算一下。啊,直接你看在这块大家去写就行是吧,说M加N呢是多少啊,这我们就可以做相关的一些这种数学运算了。啊,没啥问题啊,上面呢,相当于是我们定义变量啊,这呢是直接一个输出啊,包括你写个hello word,像以前的话呢,我们写起来很复杂是吧,你需要呢,先创建个文件,这时候呢就不用了,诶你想演示个hello word呢,直接呢进入he以后呢,诶在这里边你就写个hello。沃呢?这么着一下。这个还得是英文格式的是吧?诶这不就可以了吗?呃,相较于以前呢,我们要简单很多,OK啊这呢我们可以去定义变量,诶当然呢,还可以呢,去定义一些方法啊,你比如我这块public,呃,咱们来一个int吧,诶我叫是吧啊一个M逗号in个N。哎,然后在这里边的话呢,咱们可以去return一下,叫M加上一个N分号一下。诶是不是,诶这个大括号应该是是吧。哎,大括号一下,哎,这样呢,是不是就可以了。
05:02
好,这样的话呢,咱们就定义了一个方法,诶那定义好这个方法以后的话呢,咱们还可以去调用的这个方法啊,你比如我们去第二列啊,嗯,咱们接收一下吧,定那个叫result是吧,诶等于我们这个I的方法,这呢我写一个20,这个30,诶这样呢,我们就调用了一下啊调完以后的话呢,诶相应呢,你可以呢再去打印一下。那咱们这个叫result这样一个变量,那这不就打出来是50吗。没啥问题。是吧,诶这块应该能看得懂啊好,然后呢,在这里边呢,还有相关的一些指令啊,这个指令的话呢,大家你看一下我们的课件也行,诶我在下边这块有罗列哈,诶或者的话呢,你看一下我这块呢,给大家写的这个艾特归504啊第一个呢就要介绍啊,这里边呢,也显示了它相应的一些指令啊,比如第一个叫list,它能够列出当前我们这个session里边所有有效的代码片段啊,你比如我们回过来这呢,我们就直接写一个叫a list。哎,你会发现呢,咱们刚才写的这样的一些代码呢,是不是都罗列到这儿了,诶没问题啊,诶这个当前session是什么意思呢?这个当前session呢,就是当前绘画的意思了啊,你比如说我现在呢,开启的这就是一次会画,诶我要把它关掉之后呢,这次会话就结束了啊,你再重新进入,这又是个新的了,就不会有我们当前这样的一些操作了。
06:16
哎,这个大家注意一下啊,然后下边这个呢叫呃worth呢,就是variable,就变量的意思啊,查看当前session下啊创建的变量。啊,比如说这块我们就可以那叫va。那我们定义过这样几个变量啊,一个是M,一个是N啊,一个是我们的叫result。没啥问题,好,这个呢叫methods啊,就是当年session下创建过的方法,诶我们刚才那不就创建了一个方法吗。是吧,就是我们这个的方法啊,这块也能查看啊好,下边这个你看还有一个叫imp啊,I什么意思呢?就是它列举出来我们导入的一些包啊,导入一些包,你比如说诶,咱们这块呢,去查看一下啊,叫is。好了,这块你看我们当前呢,已经能够导入这样的一些常用的包了,当然了也包括咱们这个浪包了哈,那就意味的话呢,这些包下相同类呢,大家不需要显示带它去导入了,举个例子啊,你比如说我这块呢,我去呃创建一个咱们叫哈希。
07:13
嗯,哈希set吧,简单举个例子是吧,诶,我就new一个叫哈希set。大家你会发现呢,我们这时候就把这个哈赛是不是就创建成功了,诶那这时候呢,因为我们哈赛呢,默认是在这个YouTube这个包下的,而这个YouTube这个包呢,已经默认导入了,所以这块我们就直接呢去创建啊,是没有任何问题的啊,包括你创建个release h map啊,都是同样的道理啊。行,这呢,就是我们这个叫imports。下边这个叫history啊,建入的内容的一个历史记录啊,这个也比较简单。啊,History是吧,诶这呢,就是我们刚才呢,做过的相关的一系列这个操作啊,看都是有哪些,就这个意思了,好,下边这个叫edit啊,它呢可以使用外部的代码编辑器来编写Java代码,诶什么意思呢?你看啊举个例子,你比如说我这块呢,我写个edit,注意后边呢,诶你得写具体的一个结构了,比如说刚才我定义了一个方法叫做edit方法。
08:06
所以呢,我就可以,诶后边再补充一个ID,好,这时候你会发现呢,它调出来一个新的一个ID的一个pad啊编辑的这样的窗口,这里边呢,大家可以去修改咱们这个代码,举个例子,比如这个return的话呢,我写成是叫二乘以,然后M,然后加上一个N,那我改成这样的逻辑了,改成以后的话呢,我点一个叫accept啊这块咱们先把它定义一下啊,知道咱们当前方法是这样定义的,然后我去accept接收一下。接受一下啊,接入完以后的话呢,这块会提示呢,说我已经修改了咱们这个爱的方法了,那进而的话呢,你看我们再去啊定一个,比如说我们叫一个I吧,啊用我们的爱的方法呢,去指向的。哎,你看这时候我们这个结果是多少呢。回车一下是吧,哎,此时的话呢,我们这个M呢,是这个十是二乘以十,这就20,再加上我们这20,这不就是40吗。呃,所以我们的I的结果呢,目前是40,呃,相当于我们定义了呃,一个新的方法,对原有的方法呢,进行了一个覆盖操作。
09:05
OK啊,这个呢,我们就是使用这样的一个edit这样一个操作了啊,行,最后这个有一个叫意啊,那自然而然的就表示叫退出的意思了啊这个呢就拜拜了啊没啥问题,行这呢就咱们要给大家说的第一个算是叫新特性,叫J12这样的一个指令。啊,介绍这样一个指令行,大家熟一熟就行哈,咱们现在因为已经开始做这个Java开发了,更多的是写一些业务代码,所以我们通常还是需要呢写到UI文件里边的,啊这呢就是一个简单的小工具是吧,大家去感受一下就OK了啊。好,第一个呢就过掉了,然后接着咱们看第二个啊,第二呢,我这写的叫异常处理之try catch资源的关闭。那前面呢,我们讲过异常处理啊,提到了两种处理方案啊,一类呢叫try catch,一类叫做Rose,但针对track catch的话呢,其实在JDK7的时候呢,就引入了一个新特性,咱在前面讲check开时候呢,我们又刻意的去提,咱放在这块呢,统一来说,包括呢,GDK9当中啊,又引入了这个新的这个特性,统一的放在这块去讲。
10:04
OK,那么以前的时候呢,咱们去处理这个异常啊,我这儿呢,也写了一个简单的例子啊,大家呢,可以看一下。以前呢,你看咱们处理异常的时候啊,比如说针对我们这个代码啊,我这写了一个叫file writer啊,写出到一个具体的文件里边,诶大家发现诶我这怎么没有去new file啊,诶正常的咱们前面讲的时候呢,是不是这块呢,心里拿一个file呢,去包一下是吧。诶,把这个数据写入到一个文件里,那实际上呢,我们这个相关的这个构造器啊,它呢,其实也可以呢,不用再去造一个file,直接呢写这个文件名也是一样的啊,也是一样的。好,然后呢,我们在使用这个缓冲流呢,把我们这个文件流呢给包了一下,往里边呢写了一个数据叫做哈世界。诶下边呢,就是我们这个开始一下,然后呢,Find里边把我们这个缓冲流给做了一个关闭。很清楚是吧,好,这块我们先做一个执行。诶,没问题了啊,这块呢,我使用的是一个相对路径啊,那就写出到了咱们当前这个module的下边,是不是就对应我们这个位置啊,这呢有个test啊,就是hello世界。
11:05
没啥问题,好了,回过来以后,现在我们说呢,在GD7当中啊,诶我们就可以呢,针对这个流的关闭这个行为呢,可以做一个优化了啊什么意思呢?诶这儿呢,就引入了这样的一个结构,诶首先呢,来看下我们这个课件啊。诶,这样一个结构大家看。这儿呢,我们把需要关闭这个资源啊,这样的对象的一个声明和初始化呢,放到我们这个踹后边呢,大括号之前有一对小括号,咱们把它呢写在这个小括号里边。诶写到这里边儿以后呢,诶我们这个变量呢,首先在我们这个踹里边啊,你是可以使用的。那接着的话呢,我们这个如果有异常你就写开就可以了,不用再去处理这个finally了,Finally呢,我们说叫资源的关闭是吧,然后这个资源的话呢,我们说它会自动的实现关闭操作了。诶,首先的话呢,咱们先把这个代码呢,给它改一下是吧,哎,怎么做呢,看一下啊,以前的时候呢,咱们是这样写的。
12:00
啊,在这块呢,这不写的是具体这个叫catch吗。这没问题是吧,开这块呢,跟原来还是一样的,诶暂且呢,比如说我这儿呢,就诶给他呢,原封不动的给他拿过来。这个没毛病是吧?好那么这个踹这块怎么去写呢?注意我在这个踹的大括号之前呢,放一堆小括号,小括号里边呢这呢,咱们涉及到有两个流的这创建啊一个呢,是不是叫filer是吧?好,我直接CTRL一下过来。哎,针对fair呢,前面我们再去给大家声明一下。哎,这是不是其中的一个变量了。好,然后呢,还有一个,那就是我们对应的这个啊buffer的是吧。哎,把它呢,咱们也去做一个创建。I a writer。这就可以了,好,那创建完以后的话呢,你使用这个流干什么事儿呢,咱们就是往外写数据吗?好CTRLC一下。哎,这不就往外写数据吗?写写完以后呢,关闭资源,注意我们就不用再去处理了,这个呢,小括号里边声明的这样的资源,它会实现自动的一个关闭。啊,我们CTRL的加个L啊,稍微调一下这个格式,这就写完了,诶当然你再看我们这个结构呢,是不是我们之前的这个写法是不是要简洁很多呀。
13:09
啊,没啥问题是吧,诶哈喽世界啊,来个123,我们做一个执行。哎,你看这是我们写出去的,这块也没啥问题。啊,这个呢,就是我们说的,诶第二个这个新特性啊,然后这里边儿的话呢,诶我们需要给大家强调一个点什么点呢。就是你看我们这里边这个B也好,B filer也好哈,C out加一个U。咱们看一下它这个这样的一个关系图哈,然后这里边你会发现我们是不是实现了一个接口,这叫啊呢,又实现了一个叫auto closeable这样的一个接口,这个auto closeable呢,诶我们双击打开你会发现呢,诶这个接口是不是JDK1.7的时候呢,才引入的呀,诶作着呢,就是它是吧。然后呢,GK1.7的时候,引入这样个接口之后,那这呢,我们对应的这不就1.7的这个新特性嘛,也就是说我们放在这个小括号当中的这些流,诶注意哈,这些流的话呢,他们都得需要去实现相关的这个接口,这个接口呢,就称为呢叫autoible。
14:12
或者你说叫cible也行啊,因为c close这个接口的话呢,它实现了一个auto closeable了,所以你说实现这个接口也行啊,这个接口呢,就诶直接呢,它就继承了这个接口是吧?总之的话呢,就是我们现在这个理啊,只要呢,你直接或间接的实现了咱们这个auto close这个接口了,我们就可以放到这儿,然后呢,在你这个资源呢,使用完以后呢,就会自动的做一个关闭。那么事实情况呢,就是咱们常见的啊,前面讲过的IO流的这些流啊,其实都实现了auto这个接口了。啊,那就都能这样去写了。OK,没啥问题,好,这边呢,咱们再举一个例子啊,大家你看下边这个例子啊,这呢,我们把这个数据啊,呃,就是咱们刚才写出去文件的这个数据是吧,把它呢在这个读进来,呃,写入到另外的一个文件当中,这个文件呢,我们要求使用JBK这个格式了。
15:00
诶相当于这块我们要用这个转换流了,是这意思吧,好,那么首先呢,我们把这个数据呢,给大家读进来,然后呢,使用转换流,转换成是一个这个这个诶字符流了,这块我们读进来的时候是用的UTF8,然后呢把它呢在啊通过这个B的read方式呢,再去做一个读取,呃写出去。啊,转换流是吧,这块写出去的话呢,指定是JK,这个都是咱们前面讲过的这个逻辑了啊,代码量看还挺长啊,那如果呢,使用咱们刚才讲的这个JDK这个新特性啊,你看我们怎么去处理啊。哎,我这先把它这个打开。哎,先这么着是吧,那这哥俩呢,现在长得都比较像了啊,都是有一对小块,有对大块,那么这个小块里边我们处理瘤呢,目前来看就比较多一些了,那相当于是不是有六个瘤啊。诶把它呢,CTRLC一下直接呢,咱们就粘到这个小括号里边了啊,往这一放啊CTRLV。咱们就都给它粘一下啊。这是刘的这个声明了。诶,这个有是吧。
16:00
啊,这个有这个没,诶这个有看错了啊。行,这个的话呢,我们需要CTRL一下。对这样粘一下是吧,好针对于我们这个B的writer啊TRC一下。哎,这个再粘过来。啊ctrl al加个L啊上我们整体个啊问题好,然后这个放到这以后啊,整个针对我们这里边可能会出现相关的,比如有这个这个们是个啊在这块呢,就是没问问题是吧,然后呢,这个大里边呢,就是咱们原来处这个这逻辑,诶我们只需要呢去做这样一个逻辑是不是就可以了,CTRLC粘过来。哎,往这儿一放,诶这就搞定了。诶这块呢,就是我们创建的相关的这个流,诶然后呢,这呢,就是我们实现读写的这个细节关闭操作啊,自动的会实现随便呢,咱们挑一个这个流,你看在CR的加个U,我们再看到呢,它是不是也实现了这个auto close这样一个接口是吧?所以呢,它就会实现自动的一个关闭。行啊,这个就我们说的JDK7的这个新特性,哎,刚才我说的这个点呢,在这块也有写是吧,要求我们得实现这样的这个接口啊。
17:05
好,那么在这个GK当中啊,又引入了一个新的。啊,在JTK9的时候怎么着说的呢?哎这块呢,我们就说呀,你对应那个流啊,不一定非得要写在咱们这个踹里边了,这个时候呢,可能会觉得呢,是不是有点头重脚轻啊,你看我们在这个揣的小块里边整了这么多这个代码是吧?诶在这V9当中又提到了说呃,你可以呢这样的去处理,就把这个流的这个资源呢,你可以生命在外面。然后呢,你在这个踹这块呢,呃,写上你对应的这个变量中间有分号呢,给它隔开,我呢,在执行完这个相关的这个里边逻辑的时候啊,不管是有没有异常,只要你创建的这个流,我们也能够实现它自动的一个关闭。哎,这样的话呢,你看着就没有这么头重脚轻了啊,这个代码的可读性呢,是不是就更好一些了呀。OK啊行,那这块咱们可以呢,举一个例子啊,你比如说针对我这块写的这呢是c.in啊,从我们键盘上来获取数据的,这是一个转换流,然后呢,再把它呢写出去啊,下边就具体的写的这个细节了啊,这个细节呢,我这块就不多说了啊,然后此时的话呢,这两个流你写到外面,然后把这两个流呢,你就放到这个位置。
18:12
哎,中间有个分号隔开就可以了。啊,但是这里边儿呢,大家要注意一个细节啊,因为在这个流,我们要想实现它的自动关闭,你不能在这里边呢,又给它重新去赋值了啊,你举个例子哈,我们这块呢,又重新去一个对象了。呃,那这时候大家你想,那前面的这个结构是不是已经就找不到了呀,那找不到了我就没法实现一个关闭了,所以呢,这块我们前面创建的这两个对象啊,要求他们其实都是final修饰的了,哎,当你试图呢,对其中的这个变量呢进行修改的时候,它这块就提示不行啊,因为呢,它是一个final的。诶,你看这块提到这样的场景了。所以呢,我们在这里边呢,你可以去使用这个reader,还有我们这个你不可以呢去修改。啊,这个大家小细节要注意一下,好这呢,就咱们说的第二个啊,叫做try catch,它的一个新特性啊,这个也比较简单啊,咱们就过掉了啊。
19:05
好,至于说这个,大家你说我要不要这样去用啊,你想用就用是吧,因为这是GDK7的这个新特性啊,到现在呢,肯定是这个版本,我们不会用这个七之前的了,呃,你要是觉得这个方便的话,你就这样使用没问题啊好接着的话我们来看下一个哈,这个下个的话呢,比较简单哈,叫局部变量的类型推断这呢是我们JK10的一个新特性,前面的话呢,我们在讲这个集合讲这个泛型的时候呢,其实也提到这个新特性了,是吧,大家应该也都知晓了啊呃,这块呢,我们稍微的多说两句。诶,首先啊,咱们看一看这里边儿可以使用的一些这个场景,这呢也比较简单啊,就直接拿过来了。对,我就写到这里了啊,这个是咱们可以使用的这个场景是吧。OK啊,把这个呢,相应的这个注释呢,我稍微再调一下。简单的我们来看一下啊,比如上面这块呢,我们创建一个release啊,因为呢你又的是个release,所以声明的话呢,诶我们也非常清晰,它就是一个release了,诶这块呢,我就写成是个腕了,没问题,下边呢也类似的道理,然后呢,在我们这个for循环里边,我们针对这个list呢进行个遍历啊,前面这块呢,因为list我已经明确的知道它是这样的一个类型,所以这块呢,我们就不用再去指明,呃说它里边的元素呢,是一个死顿类型了。
20:21
是吧,就不用写了啊,诶这呢也是用一个Y呢来表示就可以了,然后呢,你要是写传统的这个for循环的话呢,这就相当于一个in的类型啊,这呢也给省了。这个都是没问题的啊,包括呢,我们常见的一种场景,就是通过一个对象调用一个方法,那么这个方法的反应之类型呢,也是非常确定的,那既然如此,我们呢,都可以写成一个叫做腕这样一个特点。是吧,哎,下边这块呢,也是一个非常典型的一个场景,你像咱们写这个。啊啊,这个其实就跟咱们上面这个是一样的是吧。哎,这不是这个set吗?诶set就跟我们那个是一样,包括咱们前面不是还讲过这样的一个场景,比如说我这是一个哈希map吧。
21:01
诶map呢,比如这是个类型,然后呢,这个的话呢,假设是一个类型,这呢我们写个map,你一个map这样个结构是吧?好,然后这个map的话呢,我们是不是当时写过这个叫entry set这样个方法,这个调用完以后呢,得到的这个叫entry set它的类型,这个你要把它写出来的话呢,你会发现呢,就挺复杂的。啊,整体上来讲呢,是一个set里边呢,放的是我们这个entry entry呢是map里边的,所以map.entry entry呢又带泛型是吧,就得这样去写了,可读性呢就比较差一点,我们就可以呢,直接呢,是不是写成是个万就可以了。OK啊,这个呢,都是咱们涉及到的可以使用的这样的一个场景,这呢是GDK10的新的性啊,大家如果使用的是十之后的这个版本的话呢,就可以使用咱们这个V啊,是没有问题的,这个新的令到目前为止也没有说呢,后续版本给它删掉啊,说明呢是可以一直呢去使用的啊。这个呢是咱们可以用的场景,那么还有一些场景呢,这个大家就不要去使用了啊,不合适,其实呢,我这一说呢,大家也能够去理解啊,你看一下啊。
22:03
比如这块我把它粘过来。哎,往这一放啊看一下。比如这块啊,我们声明一个成员面料。啊,你比如说就在咱们当前的这样的一个类当中啊,我这儿呢,写的这边变量呢,不就是属于成员变量吗?啊,比如我们这外一个啊,这个我写一个变量I,诶完事了。显然呢,你看是不是不靠谱啊?啊,因为呢,咱们说这个成员变量呢,你可以不去显示的去赋值,那你这块呢,我完全不知道你这个变量I是一个什么类型是吧?诶这样的情况啊也同学那我这块我要写上这个,呃,值呢比我这块写的这个零,你发现呢也不行。是吧,你可以理解成呢,就是这个零呢,我们好多种类型呢,是不是都是,诶可以初始化值为零,比如说bit呀,Short呀,Char啊啊,Int呀,Long啊是吧?哎,我们当然long的话呢,它得带个R啊,这个没带R,你可以理解成刚才说的这样几种,Bit short差int是吧?这块呢,都是初始化值为零,你这写个Y呢,就不知道你具体是什么类型了。
23:02
哎,所以这儿呢,你看是不许不允许的啊。还有呢,比如说我们声明一个数组的变量,因为数组静态初始化啊,省略new的这个情况啊,这呢是什么意思呢。哎,我这写个二哈。嗯,这么着啊,你比如我这样写的啊,这是一个Y类型的一个数组,哎,我们这块呢,你看我先这样去写。我我写个123。是吧,这个写法呢,注意是没问题的,那因为我们就知道你这个Y呢,它肯定是一个int型的数组的,当然呢,你要是呃这种写法呢,就不允许啊CTRLC下粘过来,把这个类型这块给省略掉了。哎,我们这个叫Y1,它是不允许的了。诶,你想咱们原来的时候呢,说前面呢,你写上in的型的数组了,我们这儿呢叫类型推断,你现在把这个也给去掉了,前面还推断,那到底谁推断谁呢,是吧,这个我们编译器呢,就懵了啊,所以这种格式啊也不要去写。下面这个叫方法的返回值类型方法的行参啊,类型这个呢,是不是也很好去理解啊,这是一个public,你写个word型啊,写个method,这也没毛病,写个in特型的I也可以,Y类型的一个M啊,这时候就懵了,所以这个M到底是个什么鬼?
24:13
是吧,这呢就不能写,然后呢,包括我们这个word啊,你说返回值是个in型,这都是非常明确的,没毛病,你这是写个word类型,是不是又蒙了。诶,所以这呢都不允许啊,其实这块一说呢,大家都能明白这个事儿啊。下边一个说没有初始化的方法内的局无变量的一个声明,那很显然了,方内你生个变量啊,外形的一个变量I是吧,然后那个变量I的话,你还没有赋过值,光这样写的,那那哪能行啊。是吧,这样也不可以,诶那负个值呢,写个零。啊,负值的这个零呢,你看也不靠谱。哎,这个呢,也相当于是有这个歧义一样啊,所以这块呢,大家注意一下这个问题。好,下边这个啊说呢,作为这个钙质块中的这个异常的类型。啊,这个呢,呃,显然呢,呃是不行的啊,其实我们都能够想象到这个事儿。
25:00
啊,比如说这块呢,我们写个踹啊,这里边儿呢,就有相关的异常的那个代码啊,比如简单我们写个叫十除以零。啊OK啊,这块你写个具体这个catch,你说出现这个exception了啊,写个E。啊,1.print啊,这都没毛病,然后这个位置你写了个Y。这就废了,这腕到底是个什么鬼呢?对吧?哎,到底是个什么样的异常呢?如果真出了异常,这块到底能不能hold得住,能不能补货呀?啊,这都是未知的啊,这都不允许是吧。好,还有呢,比如说这个拉姆达表达式当中函数式接口的一个类型方法引用当中函数式接口的类型,这个其实大家一想都能明白,这能写就怪了哈,你比如我这块呢,声明的是一个叫competitor啊,这个你写上一个,比如说string是吧。OK,然后这个呢是com,诶,然后右边这块呢,比如来一个呃,咱们叫S1啊S2,然后这块呢,咱们叫S一点。呃,来一个compare to s2这样写的,这边就是一个拉姆达表达式啊,这没毛病啊,你说前面这块呢,我们写成是一个Y了。你说你这是个啥呀,是吧,你这个函数接口到底是哪个函数接口啊,哎,这个显然是不靠谱的。
26:06
啊,这个一定是不行的,方案引用同样道理啊,不多说了。所以刚才呢,举的这些不行的这种场景呢,大家也不用死记硬背啊,基本上你一看的话呢,也都能很清楚,就是相当于我们通过这个编译器啊,完全判断不出来这个袜是什么类型。啊,那就不能够使用啊,基本上能够使用的话呢,比较常见的一种场景,一个呢,是我们这个new的这个,呃,对象那是非常确定的是吧?啊那你这块呢,前面类型呢可以省略,另外一个典型的场景呢,就是我们调一个方法的时候,这个方法的反回式类型这块呢,是非常明确的啊这种场景呢,比较多一些。啊,这个大家留意一下就可以了。这呢是咱们说的第三个叫局部变量的一个类型推断啊,JDK10的一个新特性。好,那咱们接着往下看啊。下边这个呢,叫instance of啊,还记得咱们在哪个位置讲过这个instance of吧?
27:00
啊,就我们提到这个多肽向下转型的时候是吧,呃,咱们在后续的相关的,比如说呃,Equal的方法呀,这个compare to或者compare方法当中,咱们呢,是不是也会去使用这个in啊,实现一个向下转型。OK啊。行,那这呢提到一个叫森的,一个叫模式匹配啊,模式匹配什么意思呢?啊,我这块呢,也写相关的这个代码了。是吧,哎,咱们直接来这块去看一下。这呢是JDK14的时候呢,是一个预览的,15的时候呢,叫二次预览啊叫是预览特性,就是这个特性的话呢,不确定。啊14这时先引进来啊,你要想看一看的话呢,也能用,呃,但是呢,有可能后续的版本啊,就把这个哥们儿给删掉了。啊,这就是他这个不确定的这样的一个新特性啊,15的时候呢,有二次预览说呢,继续不确定,16的时候呢,转正了,那一旦转正啊,那基本上就确定了这个呃,新特性啊,在后续的版本当中,不会把它轻易的给拿掉了,大家呢,就可以放心的去使用了。
28:00
OK啊好,那么这大家来看,以前呢,咱们写这代码的时候,比如说我这呢,是一个多态的方式,把字符串呢给了一个object,然后我们下面呢,去判断一下啊,说这OB啊这个string,如果呢是个true往里边呢,就把它做一个强转,强转完以后啊就变成是个string了,接着呢,咱们调这个string的一个特有的方法。是可以的。是吧,诶这个就是咱们以前的写法了,那现在有了我们这个新特性之后哈,看怎么做呢。我把这个代码呢,原封不动的我粘过来。然后呢,只需要在这个位置,大家你看说欧街string,呃说呢,你要是string的话啊,我们就进去了,进去之后大家你想我们如果判断它是一个处的话呢,通常进去呢,马上要做的事儿,是不是就是向下转型啊。那既然如此,我就把它俩合一了啊,说呢,如果你要是个死猪类型的,我就给你转型了,而且变量名都给你想好了。啊,见到一个女生是吧,满足你心目当中女生的这个形象啊,直接呢,你们把孩子的名字都想好了,就叫做str是吧?啊里边的这个逻辑呢,就省略掉了,直接呢,你就可以呢,调it tr的相关的这个方法就行啊,因为你已经是死的类型了。
29:10
就这样来写。诶,大家看能不能理解。啊,其实这个事儿呢,不太复杂啊,就相当于呢,我们在类型后面呢,加一个变量名就行,对直接呢,就是满足它是出的情况下呢,下边就直接用不用再显示的去强转了。诶这个就可以了,好,那如果有这样一个结构的话呢,但是你看我们下边啊。这块的话呢,哎,我再举个例子,这有个叫computer。啊,咱们做这个强转的操作呢,不是一种场景呢,就是在库的方法当中嘛,是吧,我再给大家举个例子,在这个computer这里边呢,声明了两个属性,一个呢叫model,一个叫price啊,一个叫型号,一个叫价格,好那以前的方式呢,咱们如果呢去呃重启这个equal库的方法,你看我们是不是这样写的。哎,这样写的是吧,诶说呢,这个O啊先ER这computermut啊,你是不是一个电脑,如果是先做强转,强转完以后比较一下他们的model和这个price呢,是不是都一样,都一样就是true啊,否则的话呢,这个就是false。
30:07
这个是不是咱们以前的这种写法,那有了这样的一个新的这个结构之后呢,哎,我说这个写法呢,就可以简单一些了。啊怎么来写呢,你看一进去是首先呢一下啊说呢O呢叫如果你是这个这个咱们把这个。来,咱把这个名字都给想好了,比如我这块呢,就叫这个阿了。就这样来写的是吧,好在这里边儿的话呢,直接我们还是做这样的一个比较呗。是吧,诶如果说你当前这个对象啊,调异构方法的这个对象,跟我们这个啊参数的这个对象,它俩的model是一样的,价格呢也是一样的,诶里边呢,咱们就存处,或者干脆我直接在这块呢,是不是就。准确一下这个结构就行。诶,然后呢,在这块呢,你再return一个false,诶这是不是就可以了。能理解这个意思是吧,呃,相当于呢,我们把这个呃判断啊,以及呢,我们强转这个事儿呢,就给合一了啊,这就是咱们这样一个版本的新特性啊,呃,这个呢,如果要能写的话呢,其实我说呀,还可以再简洁一些啊,你看这个结构能不能认识。
31:15
诶,我把这个呢还给它注掉了,怎么着呢,诶我说呀,在这里边我直接就return了,怎么着啊,诶如果你这个O叫啊,你是一个啊名字叫并。哎,我就直接把这个逻辑呢,直接一站就完事了。看看是不是更简洁?啊,我说呀,这个逻辑跟咱们第一种写法这个逻辑呢是一样的。哎,首先呢,你得是一个computer啊,如果要是。啊,或者如果不是不是的话,直接就return false了哈,如果要是是的话呢,这块诶,你可以直接在使用我们这个。强转以后的这个名了,这不就直接用了吗?哎,就比我们原来的这种写法呢,你看要简洁很多。体会一下,这个呢,就我们称为的叫的模式匹配。
32:03
一个小特性是吧。好,这呢是我们讲的这个,呃,第四个这个点。
我来说两句