00:00
好,然后呢,刚才讲了j shell一些简单的应用,大家也一定要动手自己做一些练习,然后呢,我们练习完以后,我们来继续看一下,那么我们说j shell它的功能啊,还不止于此,应该会会更强大,那么至于使用的细节,我们不会怎么办呢?不会没关系,我们可以找他帮助,那么他的帮助该如何查看呢?诶,斜杠help,那么这是一个,呃,在GSHE当中执行一些特殊的命令,Help,诶,那么它会提醒我们有哪些个命令是可以执行的,AB list列出什么您介入的圆,也就是我们刚才建入的所有的代码,它都会重新给我们列出来,这是非常方便的。edit,我们还可以干什么啊,把我们的这。
01:00
这个就像文件一样去编辑它,然后save保存,诶,直接存文件,然后open打开哇子诶,这个功能应该也是很重要的,它可以列出以声明变量及其值,Method呢来列出方法声明,哎,Type呢,列出类型声明,Imports导入声明等等等等等等啊那么这里面啊,我们需要更加详细的去使用它的时候呢,我们随时都可以干什么?进入这个help来对它进行一个更加深入的了解和学习,好,那么这就是这个jel工具。好,下面来看第二个dynamic class file constants,这是为类文件新添的一种结构,好,那么我们说在简介的时候,我们说这个东西就最了解就可以了,知道有这么回事,然后呢,它的最主要的作用就是哎,对于类的一个格式的一个扩展来扩展好细节我们不用管,好下面我们进入第二个重点,就是什么呢?局部变量的一个类型推断,什么叫局部变量啊,为什么不是成员变量呢?哎,成员变量很少使用,那么局部变量,什么是局部变量啊,在方法中声明的变量就叫局部变量,也就是说属性可以吗?不可以,好那么哇,在这里这个关键字要加上什么?哎,要加上双引号的,为什么呢?因为它不是真的关键字,哎,不是真的关键字,好,然后呢?
02:41
我们来看它什么是一个类型推断呢?哎,显然和我们在之前讲的是不是非常像啊,我们在之前讲到类型推断的时候,尤其是在泛型的使用当中会用到啊,泛型的使用当中,比如哎,比如我们来个例子,我们就直接在jce当中来,哎,来运行,因为它非常方便,好那么我们在之前,比如我要想创建个集合,创建集合,那么显然这是它的引用类型,比如它的翻型类型,指定in teacher,然后呢,List,然后我在右边去new对象,真实的new对象的时候,什么呀,我就可以new a list,并且它的泛型类型,你可以选择全部输入,或者也可以选择什么直接省略,好那么这一这这注意这是加了七开始支持的一种语法。
03:39
那么它的前提是什么?就是类型推断,那么它怎么推断呀,显然是从左边的这个,哎,左边的这个泛型的integer类型当中推断出,哎,它的一致的是不是因为不一致的肯定是没法赋值啊,哎,所以我们去省略的时候呢,它就推断出来这个集合,例四集合能放放什么呢?放整数,哎放整数好,然后呢,回车,那么我们看啊,例四里面现在还没有内容,没有内容好,然后呢,我们来试一下,我添加一个字符串可以吗?哎,注意不可以他说。
04:17
将land string无法转换为inder类型不兼容,为什么呢?因为它虽然你这省略了类型,但是它推断出来,还有后面我们讲的流的时候,也是大量的运用了这个类型推断的这样概念,那么这个局部变量的类型推断,哎,它很有意思,我们刚才的这个类型推断是什么?先有左边的,是不是省略右边的?而这个局部变量的类型推断它反了,它是先根据右边的实际值来推断什么左边的这个类型,比如我们来一个哇,好,来一个哇。挖什么呀?哎,比如来一个YN,然后呢赋值,呃,换一个N,因为N已经是不是用过了,好我们来换一个别的YM或YA,然后呢,被赋值为ABCA,然后回车,哎,那么这个A它我们回完车以后,它自动的是不是就把这个A的内容打印出来了,它是一个什么字符串,哎,字符串,所以那么在这里这个A它就推断出来是一个什么字符串,那么它和我们的这个string a这个语法有区别吗?没有任何的区别,哎,没有任何,但是你当你去写string的时候是费事呀,所以这个类型推断它其实是为了简化我们的编程的,简化编程,哎,有的时候如果这个类名特别的长,如扭一扭,哎不想写那么长怎么办呢?你就可以用一个哇,比如我们在。
05:58
再来个Y个B,哎,然后呢,你后面new一个非常复杂的对象,比如再new一个什么啊,String buffer,哎,New个string buffer,然后呢123好,然后呢,诶会说诶就注意这时候这个左边这个哇,我就不需要写这么这么长,那么他知不知道这个B什么类型啊,知道类型推断出来的好,所以这样的话有这样的一个好处,诶那么既然这个可以推断好,注意我再重新挖A挖A,然后呢,我再挖一个,我再换一个其他的其他的一个类型的对象,比如我在这里new一个什么I一个这个a list泛型类型in。
06:47
泛型类型E好,然后呢,走诶那么这个wa AA是什么。A是什么呀?哎,是个a list是不是?诶那有同学说我想看一看他究竟是什么,我去打A是不是打他图子俊啊,他是对象,我就可以通过get class来干什么,看它的类型走,哎,它的类型是a list,那么这个是没有问题的,好,那么这个类型推断也是可靠的,可靠的好,那么这是这个哇,这个语法,那么这个哇,是关键字吗?刚才说哇关键字要加双引号,那么哇,是不是关键字啊,来试一下,如果是关键字,这个语句能执行吗?不能,但是现在能执行说明什么?哇,不是关键字,它还没有上升到关键字的高度,它仅仅是一个语法的一个改进,哎,便于我们去缩小减少代码量的啊,说白了就是减少代码量,然后呢,就像我们上面的这个wa a new release。
07:54
啊,这个Y它会在程序编译时,在class文件当中有没有这个Y呀,它其实是没有的,哎,没有的,所以它仅仅是一个语法的改进,就像我们的拉姆达表达式一样,哎,拉姆达表达式一样。
08:12
但是这个改进却为我们,哎却给我们省了不少时间,哎这样的话,我们就可以省略左边的类型,哎左边类型,那么比如这两个语句,它们是等价的,哎,它们是等价的,好,然后呢,诶,这个哇,使用它的注意事项,比如我来个YN,我直接回车行不行啊,不行,为什么呢?因为它必须得要根据什么,哎根据实际的类型来推断的,反推的,也就是在这里N有没有实际的东西给它附上去呢?没有,所以它无法推断本地变量N的一个类型,哎,这是这是这个哇关键字的使用注意事项,哎使用注意事项啊,所以我们在这个。
09:06
所以我们在这个呃,笔记当中,我们来记上一笔,好,那么这是这个好,这样的话是一。JAVA11新特性,好笔记。好,前面的都比较简单,我们就哎不再列出来,哎那么需要注意的地方我们把它列出来,哎哇哇这个语法啊,或者我们啊哇语法,我们把它称为哎局部变量的一个类型推断,哎类型推断啊,那么它的注意点,注意点注意点有几点呢?哎首先第一点,首先这个哇后面直接跟一个变量名,诶直接回车,注意这样行不行,哎注意这是不允许的,这样不可以,为什么呢?因为无法推断,没有一个具体的东西让你去推断,所以它不可以啊然后呢,然后什么第二点就是我们说类当中的属性能用画吗?来试一下class b来写个B这个类,然后呢,它的属。
10:27
进来一个Y啊,比如来一个YID,然后呢回车,然后呢,哎,我就直接简单的把这个类终结走诶错误,此处不允许使用wa,也就是说类的属性可以使用wa吗?不行,哎,所以在这里特别强调局部变量啊,那么所以注意点二就是什么啊,类的属性的数据类型不可以使用哇。哎,不可循环,好,那么注意这是它的两个注意点,我们在使用的时候啊,要特别强调一下,要小心,好那么它的最主要的用途仅仅是在这儿吗?哎,不是,那么它最主要的用途用在哪呢?用在拉姆达表达式当中,拉姆达表达式当中,那么拉姆达表达式当中我们说变量,诶类型不是可以省略吗?我这又加出来干什么呢?
11:25
为什么又要加它呢?好,我们来拉姆达表达式这简单的再来回顾一下,大家回顾一下好,那么比如我想写一个线长。还记得吗?写个线程,我想创建个线程,并启动这个线程,然后在线程当中打印当前线程的名称,该怎么做呀,该怎么做?哎,其实很简单,Thread一个线程,哎,T,然后呢,New一个thread,那么在这个thread当中需要一个什么?需要一个什么呀?哎,我们说它需要一个runable对象,Runable对象那么reable本身是接口,没法创建对象,哎,但是呢,我们说接口规范了,如何创建子类对象,那么接口这个runable接口有一个什么方法来着,它有一个run方法,这个方法无法回值,无参,所以如果我们要去,要去拉姆达表达式来写,怎么写呢?哎,一个空括号,注意,然后一个转向符,转向符后面是什么呢?是这个run方法的方法体,方法体好,我们在这里打印输出,打印输出什么呀?来打印输出这个线程的current th静态方法调用获取当前线程,然后呢,再获取名称,好,然后呢,有一个打印输出,好,注意此时我们说这个语句的执行是什么,我们的T。
12:57
D是才创建好了,要想让它启动,我们必须怎么办呢?调用它的方法,Start走,哎,THREAD0,它并不是什么,并不是我们的主线程,哎,如果你去调用t.run它是什么?
13:14
P点状是什么?哎,注意t.run它就是什么啊,并不是这个主,并不是线程的执行了好,然后呢,T点的直行。好,它没有打印输出,哎,所以必须调用start才可以启动线程,好,那么这是这个拉姆达表达式应用在我们的这个例子当中,那么我们刚才的那个拉姆达表达式当中有没有参数啊,没有啊,没有,那么我们再来一个有参数的,有参数的那么有什么什么是哪个例子是可以用到一个有参数的呀。哎,同学们,哪个哪个可以用到有参数的好,比如我们来在这里列一个有参数的拉姆DA表达式的一个使用好,那么最典型的是谁呢?哎,最典型的就是我们的函数式接口是不是有好几个啊,函数式接口好,我们简单的来这个回顾一下,那个有一个我们称之为函数式接口哈,有一个我们称之为什么呀?
14:30
消费器是不是,哎消费器consumer consumer consumer它是一个消耗器,消费器consumer,哎,Consumer它需要一个泛型T,然后呢,哎,它是一个。消费型,那么它里面有一个方法,它里面有个方法,什么方法呀,注意这个方法是没有返回值,有没有参数啊,有,哎,方法名叫accept,其实在这里我们说方法名重要吗?它不太重要,那么它接受了什么对象呢?T类型的对象,然后这个方法有返回吗?没有,哎,所以我们才把它称为什么消费型,哎,消费型好,注意这是一个消费型的,消费型的函数式接口,哎,函数式接口那么它的含义就是方法可以接收一个对象,然后呢,把这个对象消费掉,然后呢,消费掉以后呢,没了,没有返回值,哎,所以accept方法把它这个对象消费掉,好那么利用这个例子我们就来看一下,哎,看一下这个它的一个应用,应用好,那么我们说这个consumer,它的方法有参数。
15:47
是不是有参数啊,哎,所以我们比要想写一个consumer consumer,我们消费一个什么呀,比如我们消费一个字符串好,然后来一个consumer好,那么我们用拉姆达表达式来直接做,那么怎么做呀,直接是不是一个参数啊,一个参数T,然后转向符,然后把它消费掉。
16:08
怎么消费啊,啊很简单,我就打印输出是不是就可以消费了,把它消费了好,然后呢,打印输出谁呢?打印输出这个T的,哎,To upper case,哎,让它有一些变化,然后我们是不是才能够看到它的这个,看到它的这个效果好,然后呢,我们把这一段复制一下,然后粘到这个J绍当中来执行好,那么执行完以后,我们看consumer这个对象,它就是个什么lada表达是哎,这是不是出来了,哎,这出来了,然后那么这个consumer可不可以用一下呀,可以好,我去调用它的方法什么呢?叫accept accept好,比如来一个字符串,哎,然后呢,来一个字符串汉字,汉字也来点,那么汉字能不能变大写,哎,不能啊,只有小写的能变成大写好,那么这样的话,完成一个拉姆达表达式有参数的这样一个传递。
17:09
那么为什么这个Y在这里能用上呢?啊,因为我们说在这个过程当中,这个T它的数据类型是不是省略了,哎省略了好,然后呢,我们把它复制一下,再改进一下,改进完以后呢,我们说这个哇类型是不是就可以加上了,当我们这样加的时候,注意一定要加上这个括号,哎加上这个括号,那么这个T是什么数据类型啊,哇类型诶,那么这个哇类型我能不能知道什么类型啊?不能知道,但是能不能推断啊,能推断,那么它是如何推断的呢?它如何推断,哎,它根据左边这个泛型类型string推断出来这个哇,就是什么啊,就是string类型,那么加上这个哇,它的作用更进一步,最终的一个目的是什么?其实很简单,就是干什么给它加上一个注解,哎注解比如at none none什么意思呢?啊,不允许为空,不允许为空好,然后呢,我们看一下这个在我们的例子当中,我们进一步给它啊复制好,然后呢,我在这个注解诶,这个变量的类型哇之前加一个注解叫什么能那什么意思啊,哎,不允许,哎为空好,不允许为空好,然后呢,我们再来执行一下这个语句好。
18:41
好,那么显然在这里他找不到这个符号,为什么找不到这个符号呢?啊,因为这个。NANA需要导入,是不是需要导入一下啊,好,那么我们来看一下这个导入这个NANA,那么这个注解它是在哪呢?好,我们来打开我们的JDK11,顺便我们是不是对它的源码的结构也进行了解一下啊,那么加上11当中,诶,原来在哪呢?原来我们是RC.zip,这个在哪呢?找不着了,大家注意在lip下,好,打开lip s rc.zip那么我们为了便于研究,我们最好把它解压出来,好解压到这个src目录当中,好,那么解压到这个SSRC这个目录当中以后呢?哎,我们是不是来去看一下这个。
19:37
哎。Src在这好看一下这个na na这个注解,它在哪里?好来收一下na na啊呢,还没有收到,没有收到是因为什么?他还没有解压完好能呐。好。解压好慢。
20:04
好让它解压,然后呢,我们这个我们先。看一下啊,那么它除了有一个变量以外,还是不是可以还可以跟两个,还还可以跟两个好,那么这样我们在这个在这个注解上,我们先换一个简单的,比如来一个,哎,我们比较熟悉的de的还记得吧,这个变量depre这个注解它的作用是什么?它的作用是过时,提醒使用者过时,好,那么我们这个执行是不是成功了,好那么为了验证这一点,我们把这个Y给它去掉,大家看一个这样一个形式,我把这个Y去掉,直接在这个T上面加注解,直接在这个T上面加注解,然后我再来执行。
21:00
哎,不可以了,非法的表达式的开始,哎,非法的表达式开始,也就是它必须需要一个类型,而这个类型是什么呢?我又不用关心,因为它可以类型推断,所以此时用wa是最合适的场景,好,那么所以我们说这是一个错误的形式,好,错误的形式,那么这个错误的形式它错在哪呀?哎,必须要有类型,而类型又不需要特别指定,哎,可以什么加上哇,哎哇,所以我们说这个方式它是什么?哎,它是正确的,哎,正确的。好,一个是错误的,一个是正确的,好那么这是哇,这个语法它的一个注意点啊注意点。
我来说两句