00:00
好,那那上午呢,我们讲到了scan的这个位置哈,把我们的这个幻灯片打开,诶打开,那上午呢,我们讲到哪了呢?往下看一下。诶,我们讲到这儿了,讲到这。就是把自身类型给大家说了一下,那下面呢,我们来看一下,呃,就是SC里面的嵌套类这个知识点,好那同样规矩哈,我们一边讲呢,一般把这个笔记给大家做一下,好我去看。好,我下。定下位。往这儿走。好在这个位置啊,那首先我们来看一下这个scanner,呃,它的嵌套类是个什么意思?呃,在scanner中呢,你几乎可以在任何语法结构中内嵌任何语法结构,就是它这个是可以嵌套写的。呃,那如果说在类中我们也可以再定义一个类,此时此刻这个类呢,我们就称之为嵌套类,呃,其他的语法结构也是一样的。
01:10
那嵌套类呢,类似于我们Java中的内部类,那讲到这呢,我们刚好拿一个实验来简单的,呃,看一个面试题,就是面试题呢,有这么一个题,说问Java中内有五大成员,请问是哪五大成员?好,我找一个同学说一下,看看他还有没有印象哈,找一位同学叫这个中康同学来回答一下。小钟,还有印象吗?又忘了看你的表情,又是笑而不答,答在其中啊,来,找王珂同学来回答一下。还有印象吗?属性方法方法啊,方法方法也是对的啊,然后呢。内部内部类对还有吗?构造器,诶构造器还有吗。
02:05
还有一个对吧,啊,代码块很好啊,啊,还是记得非常清晰的,对,就是这五大成员,请坐下,这五大成员好,讲到这我们提了一下,呃,那么现在我们接着往下看,我们简单的回顾一下Java内部类的这个知识点,好,那么在Java中一个类。类,一个类的内部又完整的嵌套了另外一个完整的类结构,对,那么被嵌套在里边的那个类呢,我们就称之为啊内部类,也称inner class对吧?那千兆在外面的呢,它的外面这个呢,我们叫外部类那。呃,除完除去外部类和内部类呢,我们称之为外部其他类啊,这个呃之间的关系我们就不再多说了,那接着往下看,在Java中内部类呢,从呃它有两种分类的方式,对呃第一种呢,我们从呃从从它定义的这个位置来看,对吧?啊,如果说它是定义在成员位置的,我们把它分为成员内部类和。
03:12
静态内部类,那成员内部类指的什么意思呢?就是说它是首先它是在成员这个位置上。那没有实单机构关键字呢,我们就称为成员内部类,如果有时单机格呢,就是静态内部类对吧?另外一个呢,如果它没有定义在它如果没有定义在成员位置,而是定义在局部位置上的呢,比如说在方法体内,那这个时候呢,又把它啊从这个方向我们又把它分为两两类,一个叫局部内部类,一个叫局部内部类,是有类名的,对。比他有没有名字,那如果说呃,他没有名字呢,我们就称为匿名类部类啊是这么一回,那这里方我也不再回顾了啊,就简单说一下,那么我们这有个案例啊,案例我们简单的跑一下吧,啊简单跑一下就是快速的回忆一下,因为嗯这个不是我们重点,我之所以讲Java内部类呢,主要是待会要跟我们开拉的,它这个嵌套类做一个比较好,我们来看一下这个代码吧。
04:11
好,我快速的写这么一个啊,写这么一个小案例。好,嗯,那我这儿呢,新建,对我们新建一个这个。这个这个包好吧,我们就是一个inner啊,Inner inner class inner class。好,呃,我们先回顾的是这个Java的对不对,好写一个Java。好,Java的inner glass OK,好,那么我们就用它,用它。呃,为了省事呢,我们直接把这段代码给大家对不对,拿过来诶啊,首先这一段代码大家看一下,诶这段这一段代码呢,先把它放这,诶放这我们来一个,这边来一个主函数对吧?来一个主函数好,然后格式化一下啊从这里我们可以看出来,这是一个外部类,里面呢,我定义了一个员内部类,为什么呢?因为它的位置哎,就在成员这个位置对吧?另外呢,我还定义了一个静态内部类,因为它有static啊,我们这就回忆了一个成员内部类和静态内部类,跟我们待会讲斯SC呢有些关系的好,里面这个试用怎么去使用呢?诶,使用。
05:27
而使用这段代码呢,我也不写了啊,因为这个呢不是我们的重点,我直接把这一段代码拿过来,我在这里用了这么几,呃,用的时候呢,涉及到这么几个点啊,第一个呢,呃,我给大家演示了一下。怎么去创建一个外部类的对象,这个对我们来说很很简单,就是六一个outer class对吧?啊那么我们通过这个方式呢,就可以拿到一个外部类的对象,我创建了两个,一个是AL1,一个是AL2,这个很简单啊,很简单,然后呢,大家看到诶,当时老师在讲这个点的时候呢,一定讲过,就是我们在Java的内部类内中去创建一个内部类的,这个语法比较特别对吧,当时呃,老师一定讲过这个六啊,他其实是写在这个点后面的,他为什么这样写呢?因为在Java里边,它把成员内部类当做一个什么呀属性来对待的,因此呢,这个语法你看很像,就是al点里面一个玩意儿对吧,六个innerra把它当做一个属性来对待,所以说它用法是al点六什么什么什么好,这个语法大家应该还有还有一点印象好,这个就是这个就是演示的。
06:43
去创建哦,或者说定义或或者去去呃,去实例化一个内部,呃内部类,那么讲到这呢,我们又去使用了一下,在这儿下面这个方法我用内部类调了调用test,这个test的方法在哪写的呢?是藏在这里边的。
07:04
啊,存在这这面我是干什么呢?这里面这个test的方法啊,Test的方法可以接收,对吧,它可以接收什么玩意儿呢?诶,它可以接收一个inner class的实例,对不对?诶那嗯,在这个地方呢,我们可以看到同学们看到我用婴儿一。去调TEST2,我用二调TEST1,这说明什么呢?那这说明它这个Java里边啊,Java里边它这个什么呢?它的内部类只跟类型相关。就它的这个内部类,你只要类,也就是说只要你的类型是auto class inner里面这个类型就可以传,你比如说在这里我既可以在里面传啊,看到这里inner test,你看我我传这个也可以,那大看这个INNER1是个实例,我把in inner二传进去,或者把因INTER1本身传进去都可以,这说明什么呢?这说明Java的Java里面这个它的内部类只跟类型相关。
08:08
但是在了an里面呢,你会发现这样写就会啊报错,为什么呢?因为Java,呃,Scan的内那个内部类呢,它默认是跟外部对象关联起来的,待会呢会做一个比较好,这个做完了以后呢,我又我又去创建了一个静态内部类,静态内部类呢,呃,创建的方式也很简单,对吧?是怎么样呢?诶它是六类六一个al class点你看这样子,这个用法很还是很很简单的。啊,这个静态类,静态内部类Java和scan是几乎一样的,几乎一样的好,这个呢就是它的一个回顾,那当时老师在讲这个内部类的时候,有没有说内部类最主要的作用是什么呀。有说这个点吗?就是咱为什么有就说为什么,呃,高适就是Java的设计者,他要搞一个类类不类这个乖这个东西出来呢,有有没有提到这个这个知识点呢。
09:10
来小鹏你说一下他当时老师当时怎么说的呀,还有印象吗?就累不累,为什么时候有可能用到。血版的也不知道为什么是吧,就累不累它,它有什么用啊。它作用是什么呀。啊对,这是服务于那那多新鲜,那那总有个用处嘛,你说了一个大概的东西。不忘了都忘了哈,有东西想起来吗?咱不慢走。班长累不累?他就是老师讲的时候累不累,他有什么用?总说一下吧。我忘了是吧,哎呀都有都厉害啊,诶是不是当时有请坐下啊,是不当时有提到一个观点,内部类它有还是有很多作用的。啊,内部类有很多种,你比如说我们内部类最经典就是他在内部类可以去直接访问,我们就是相当于说本身类和类之间是不能访问这个私有的东西是吧?但是我们在内部内是不是可以访问这个外部类的私有属性,对吧,这是一个,还有就是涉及到什么呢?加载时机的问题,加载时机的问题有没有?呃,以前我们在讲单例的时候,老师有没有讲过,就是我们如果是一个一段静态代码块。
10:21
它实际上是可以做一个延时加载的作用。啊,如果想不起来,自己去看一下那个老师当时怎么讲的啊,他还是有作用的,还是有作用的啊好,那么这个我们就先说到这,那回顾到这个地方过后呢,我们来运行一下,看这个代码能不能正确的运行起来。好,我们运行一把,我们可以看到这段代码呢,它运行起来,诶这个代码不是这的问题啊,这是我们上午写的这个这这故意写的一个错误,还记得吗?诶这个我先把它注销了啊呃这样子,我这为为了把它啊这这样写,本身上午讲的就是这样写,不对吗?因为呃CC不是exception的,呃一个子类,所以说呃,我这为了让它快速过我把。
11:06
我把它写出来啊,那干脆这样子,我把它注销啊。把它注销就可以了,好注销过后呢,我再跑去执行刚才这段代码。好,我们看一下。好的,同学们。我们看到这段代码运行起来是没毛病的啊,就说明这个代码确实是这样写好,呃,回忆完B以后呢,我们就来看一下开纳的嵌套类的使用,我们回忆一下开的这个嵌套类的,它主要的主要的这个使用方式呢,我们来看一下啊呃,这个题直接上一个案例,请编写一个程序。定义SC的成员内部类和静态内部类、静态内部类,并创建相应的对象实例。大家看我们与我们因为在这个SC里面呢,它没有static这个关键字了,没有这个关键字了,那就呃,它的这个静态的啊,它的这个静态内部里呢,就要放在它的。
12:08
半生对象里边去,这是一个区别,那它的。成员内部类呢,诶仍然是跟原先的一个逻辑一样,好,你看这个创建的方式就已然不一样了,这是第一个好,第二个我们再来看它的使用,大家看这里,我在这里去干什么呢?我在这里创建了两个啊外部类的实例,然后在这里看到区别来了。区别来了,在Java里边呢,我们的创建外部类的方式是呃,Al就是al点六什么什么什么到了这开了,创建内部的方式和Java不一样,它怎么做的呢?它将六这个关机子放在前面。诶,这个呢,就特别的像我们啊,这种更更更传统的一种啊思维方式,它怎么做的呢?6al.scanner inner class诶,同学们可以看到啊,从这个语法上你们可以看出来,它的内部队内部内其实是由外部对象来创建的,那同学们应该可以敏锐的感觉到,将来我们这个内部内的这个对象,它的类型其实不单单是看你里面的这个类,而是跟外部对象相关。
13:32
啊,这是它的一个特色,那同学们待会再看语法的时候呢,会看到这个特色,好,它创建内部类的这个语法格式跟Java是一样的,好我们先回忆到这里啊,那现在我们把这个代码跑一下,因为代码很简单,我就没有花时间去写了,没有什么业务逻辑,纯语法的东西呢,没有必要再写了,纯语法这个东西写一遍没有意义啊,因为他没有业务逻辑,如果是讲算法的话呢,肯定是一行一行给他敲下来的。
14:01
好,现在呢,我们来看一看我们的scan的这个累不累啊,Scan的inner glass,好,我们来写一个这样的东西。好啊,刚才呢,我们这儿有一段代码,对,有一段代码好的,我呢就直接放到这里来。好,同学们可以看到啊。同学们可以看到,诶这两个名字一样了,就会麻烦啊,这样子我把它换一个名字叫DEMO好吧,诶这边有个主函数,好同学们可以看到呢,这里我们这写了一个外部类对吧?A,这个外部类这是我们的成员内部类这个地方是个半生对象,那半生对象里面呢,我们去。搞了一个静态内部类,注意这个要写在呃办成对象里边去,否则它就不是一个静态的,呃,静态性质的内部类了,好,这个写完了以后呢,我们来做一个测试啊,我们来做一个测试,好首先呢,我们来创建了,创建了两个两个外部内的实例,对吧?好,这个实例我就不去写了,很简单,就这两句话。
15:14
啊,六。Very easy啊very easy,好这个呢,我们就写到这,这是两个外部类的实例,那么现在呢,我们要去创建它的内部类实例,是怎么创建的呢?好的,那就是在scanner中,Scanner中诶创建。创建啊,成员成员内部类的啊,这个语法是这样写的,我就写一个啊,另外我就拿过来就六一个什么呢?AL1对点scanner inner哎,他这么他这么来做的啊,他这么来做的啊,你可以给他来设计一个啊这inner inner。Class,好,我这写着IN1吧,好,这个就是创建内部类的一个语法,从这里我们可以看出来呢,它的语创建语法跟Java不一样啊,它是怎么做呢,它其实在这我写了一句话对吧。
16:15
它的语法是对象点内部类的方式来创建的。好,它是把六写在前面的。啊,这个地方就看出来,从这个语法啊,从这个语法可以看到,可以看出来,我们可以看出来是什么呢?就是在中在SC中默认情况下,默认情况下我们的外部外部内实力和什么呢?啊内部内啊说错了,内部内的。内部内的这个实例跟什么呢?跟这个外部对象,外部对象关联的。那也就是说,如果我用这个AL1创建出来的这个类不类,和AL2创建出来类不类,它不是同一个类型,它不是同一个类,这边呢,有可能有些面试官啊,他会呃问那么一嘴啊,因为你看出创建方式就发生变化了,好然后呢,我们再来创建一个IN2,待会我还要举例,好六一个AL2点我们是干了,诶这个地方这样写啊。
17:22
怎么这样子,六一个al 2.scannerinner好点VR,我们来创建一个好inner。啊,CLASS2好,这个婴儿CLASS2。0.2好,这就写完了,创建就成功了啊,代码也不会有问题,那么这个做完了以后呢,我们来看看怎么去创建一个,呃,就是静态的,静态就这个地方静态的内部类的实例,哎,这个语法跟Java一样。哎,创建静态内部类的实例。啊,这个是怎么创建的呢?啊,这个跟Java一样,语法跟Java一样,是用al这个地方点static。
18:08
啊,这个呃,有点长啊,这个怎么只这么这么长一截。没必要这么长吧,好像。啊,没有这么必要,没有必要这么长,我们直接从这粘一份过来就完了啊。从这粘一份过来就行了,好。又一个。261个。好,没有必要这么想,直接就是al class d这个就可以了,好,我这边给他分配一个啊,分配一个static static的inner static的inner。好。走好,可以了,好,这就是他的一个最基本的用法。我们就说怎么去用它基本用法,我们说完了,那下面呢,我们这说完以后,我们就来看它的D,现在这个创建就OK了啊,创建可能基本使用说完,然后呢,我们再来写一个程序,就是来研究一下内部类中访问外部类的属性,哎,好,我们先截取一段视频吧,刚才做了一个SC的,呃,就是嵌套类使用的一个基本介绍,截取一段视频。
我来说两句