00:00
啊,今天的话呢,是咱们第13天是吧?呃,今天讲完以后呢,整个咱们从时间上来讲的话呢,这个内容就算是过半了哈,然后呢,随着咱们这个内容呢,越讲越多,呃,这个大家呢也及时的做一个复习啊,这个咱们前面也提到了,等这个面向对象呢,这一章讲完之后呢,大家呢,需要做一个作业是吧,刚才你现在呢,就可以筹划这个事儿了啊,就把整个咱们讲的这个面向对象呢,这三章的内容呢,诶大家呢,以一个思维导图的方式呢去呈现。啊,因为呢,整个面向对象这块呢,咱们内容量呢比较多一些,细节也比较多,而且呢,一开始我们讲的时候呢,也提到过了,就整个面向对象这块呢,其实没有什么是需要大家我了解的啊,熟悉的差不多呢,都算是重点是吧?啊因为里边呢细节很多,呃,那你要是有几个细节没注意到呢,后续我们写代码当中呢,可能就会受到这个影响。诶,所以呢,大家呢,需要呢及时做一个梳理,OK啊对,然后呢,你可以参照一下啊,这里边第八章呢,我放了一个文件夹啊,里边呢,放了一些之前同学写的这个啊,但是这块你也只是看一下,你看它,呃大块的这个思路是什么?呃,简单看一下就行,然后呢,你也没有必要去抄啊,咱们说了啊,主要呢,你得体现这个体验这个过程是吧。
01:11
哎,这个过程呢,其实梳理的过程就是大家呢去消化吸收的一个过程,最终呢,只是说呈现出来一个东西而已啊,然后随着咱们这个内容呢,越来越多,尤其呢是当这个面向对象,诶基本上讲完的时候呢,大家应该啊,针对于Java这个语言呢,差不多能够形成一个呃,小的一个闭环的一个系统一样了,以后呢,我们再讲后续的这个章节的时候,比如从这个异常处理开始啊,一直到我们后边讲的这个第18章啊新特性,整个呢后续呢,其实都可以看到是基于面向对象,包括我们前面讲的基本语法这个应用了。啊,就相当于后续的相应的一些语法上的一些问题啊,咱们都可以使用Java的面向对象,包括在之前的内容啊进行解释了。啊,就因为什么什么,所以他是怎么怎么着的啊,后续呢,简单来说呢,其实就是API的一些使用了。啊,像咱们前面也涉及到过,比如说像mass类啊,啊像string呢,是吧,当然除了之外呢,障碍语言,我们说具体的可以做网络开发是吧?那网络相关的啊,一些API到底怎么去用的,然后呢,我们在处理这种高并发问题的时候呢,需要用到这种线程的问题啊,那线程呢是怎么创建的,包括我们在内存当中处理数据的话呢,除了数组啊数组呢有点单薄了,除了它之外呢,还有其他的哪些容器呢?是吧?这呢就我们后续的这样的一些知识点。
02:26
OK啊对,然后另外呢,大家学的时候呢,肯定还是比较辛苦的,毫无疑问是吧,但另外一点的话呢,其实。我想说的什么呢?就是每个人其实都是有潜力的哈。啊,就是现在来看的话呢,你觉得每天东西讲的好像挺多的,那随着我们这个知识呢,不断的去增加,呃,当大家学到比如说第四个阶段,第五个阶段啊,第四个月第五个月的时候,你再翻回来,可能看我们基础阶段讲的内容,诶,你会发现诶每天感觉讲的东西好像挺少的是吧。呃,但是当初你刚开始学的时候呢,你发现还是挺挺累挺辛苦,感觉每天东西还挺多啊这样啊这样呢,就是大家这个认知能力呢提高了。
03:03
啊,另外一个点的话呢,其实啊,就是想说的点呢啥呢,就是每天我们讲的内容啊,其实量呢。嗯,只能算还行啊,其实你要说自己能不能逼一逼自己学的更多一点,我觉得每个人都是能做到的啊。嗯,不知道呢,大学的时候大家期末考试都是咋度过的啊?是吧,一说都笑了哈,诶都有这个经验是吧,像昨天的话呢,我分享分享我上学的时候,基本上这一个学期,因为我本科的数学嘛,数学呢,就是啥,你只要是前几节课没怎么听的,你后边听的也很吃力啊,对很痛苦啊,所以怎么办呢?呃,那基本上大学的话呢,咱都知道这个相应的期末考试的话呢,很多都是平时的作业的这种原题是吧。嗯,那抄了一个学期的作业啊,然后呢,当然有一点我觉得我还做的挺好的啊,就是每次发的这个作业呢,我都把它留好了是吧?诶然后期末的时候呢,就把这个作业呢,都翻过来给做一遍是吧,当然即使这样的话呢,你也也差点意思,所以就得把这个书得啃下来。
04:01
啊,大家可能也都有类似的这种经验啊,你发现了一个学期啊,自己感觉也没学明白的这个书的那种,你花一周的时间基本上能拿下是吧。啊,确实如此哈,就是一周的时间啊,告诉你,甚至说一周时间都不到,大概四五天的时间啊,说就要考某门课程了,像这个数学的话,我们比较难的一门课呢,叫十遍函数,就是一般都是十遍函数学十遍是吧,泛函分析新泛函就是比较难一些啊,那一学期下来就是真没整明白,那期末的时候呢,就得一点点啃,你发现他几天时间真的是平时抄的那个作业呢,竟然能。自己写了哈。啊,而且有些东西呢,呃连被是吧,呃再理解的呃差不多也能啃下来,当然这种呢,其实属于这个叫什么呀。你为了考试应付的哈,你过了这一周之后呢,其实很多东西也就忘了,没有真正的说理解的那么透彻,但是你花一周的时间呢,能够基本上把一本书能够啃的差不多,实际上呢,也是算发挥了人的这个潜力了,大家肯定也都类似的啊,你像现在这个扎va基础,我们讲这个呃,20多天这个时间哈,其实呢,你浓缩液话呢,也差不多有一个挺厚的一本书了。
05:07
那你想想,你能不能从零开始,一周时间差不多让你能够啃下来呢?我就要发挥一点你的极限假设呢,你啃下来之后呢,给你1万块钱。我觉得你应该有戏是吧,那现在咱们讲20多天的这个时间啊,所以你把这个内容的话呢,每天一定要浓缩最核心的东西把它啊,这个一定要拿下是吧,一些稍微细枝末节的那种呢,该放的可以放一放。哎,每天讲课呢,咱们有一些重点的代码,那一定要翻来覆去的多去敲一敲。把这个代码真正变成你自己的啊呃,有一些的话呢,这个代码呢,或者有一些这个内容,诶,大家稍微熟悉熟悉了解了解就行了,你就不要眉毛胡子一把抓,说什么都想弄,你像你期末考试的时候呢,也都是抓这个核心的重点问题啊,只要你把重点拿下了啊,你从这个代码量来上来讲,比如说我们讲了十个代码是吧,这十个代码里边呢,比如说五个代码是重要的,五个代码呢,是衍生出来的,或者一些补充的一些内容哈,你把这五个拿下之后呢,其实你就能够解决,可能我们这我们85%。
06:06
哎,到90%,哎,开发中的这个场景啊。啊,其实呢,你把这个拿下呢,是非诚算的哈,你说我这五个也不是特别熟,这五个呢也模模糊糊的,那其实呢,你就我写的时候呢,呃,远达不到这样的这个场景能搞定的问题啊呃,你只需要呢,把核心的问题拿下呢,其实基本上就。差不多了啊,然后呢,这个问题拿下以后呢,其实你会发现呢,一些衍生出来一些小细节啊,其实也很好理解,甚至有的时候你稍微看一下的话呢,也就清楚了,所以要把这些问题呢,一定变成自己的东西哈。呃,你形成一个知识体系以后呢,大家以后再学起来其实就会更快一些啊。好,这个呢,我们就简单的唠两句哈,然后接下的话呢,我们看一看前一天这个内容啊,前一天呢,咱们是讲完这个static关键字了,OK,然后接下来的话呢,我们提一个叫单利模式,这个单利模式呢,可以看作是基于这个此在这个关键词之后的一个应用啊。
07:00
好,那首先呢,咱们来看一下这个课件诶。找到这个单利模式啊,这个单利呢,对应的英文呢叫singleton。这个大家了解一下就行啊好,那么首先的话呢,我们先关注一下,这里边儿一个词儿叫设计模式啊,以前我们说过对MVC的设计模式是吧。OK啊,那什么叫设计模式呢?来看一下这里边儿的一段话啊,说设计模式是在大量的实践中总结和理论化之后,优选的代码结构、编程风格以及解决问题的思考方式。哎,设计模式呢,免去了我们在思考和摸索,就像是经典的棋谱,不同的棋局我们用不同的棋谱啊,就完了。这个大概能看懂不?稍微有点抽象是吧,哎,简单来说的话呢,就是我们要解决一类问题了啊,比如我们这个单列模式呢,它解决的问题呢,就是在整个软件系统当中,我们只需要创建某个类的一个对象。哎,就拿着这一个对象呢,我们去操作就可以了,没必要呢造多个对象,那如果你要有这样的需求,它对应的就是这样的一种套路是吧?哎这样的一种方式,哎我们把称为呢,把它称为呢叫设计模式了,叫做单立的设计模式,这个力呢就是实力的意思。
08:15
单独一个实例,那就是单独一个对象的意思。哎,就是这个场景啊,诶那像以前呢。咱们可能听过一个词呢,叫做套路是吧,啊说做什么事呢,都有套路啊,其实这个所谓的套路呢,就是你在长期的理论之后呢,总结出来的解决具体问题的一种方案,是吧?哎,这就是套路了。你像咱们上这个中学的时候,比如学这个数学是吧,其实也有好多的这种。方式方法或者叫套路是吧,有的这种,比如说就画图的这种方式。是吧,有的这种叫枚举法的这种方式是吧,你把这个情况都举出来,哎,这个问题就解决了啊还有呢,比如说这个叫呃,直接代入的方式。是吧,哎,你把这个数呢,往里边带一个,然后呢,相应的结果就出来了。还有呢,比如说这种反正法,把相应的一种思路啊,这个呢,其实都理解成我们解决问题的一种方式方法,哎,在咱们编程这块的话呢,诶可以理解为呢,就叫做设计模式。
09:09
好,那么经典的设计模式呢?这块提到有23种。呃,试用呢,在不同的场景下呢,我们去做这个使用,比如说像这种创建型的模式。呃,创建型的,呃,主要呢体验呢,我们用来创建对象的啊,哎有不同的这种场景,哎我们呢,可以使用具体的一些设计模式,然后结构型的行为型的,哎这块一缕呢,一共是23种啊这里边呢有个加一指的这个红色的啊,这个红色的话呢,没有算。哎,也比较简单嘛,是吧,哎把它就归为这个工厂方法的一种简化版了啊,哎之所以呢,这是五加七加11。这样的啊,OK好,那提到这个使用模式呢,首先第一个啊,大家呢,你得知道它大概什么意思,第二呢,来记住一个数叫23。啊,这个二三呢,其实从哪来的呢?呃,也是有叫什么有地可循的哈,呃,其实最早的时候呢,是在九五年的时候呢,出了一本书,这本书呢,就叫做设计模式啊,就这本书哈。
10:06
那这本书呢?是四个人编的。所以这四个人的话呢,一般也称为呢叫gone of four,翻译过来呢叫。叫四人组,有时候也叫四大金刚。你别翻译成四人包哈。啊对,就是指的是他们四个哈,就是他们四个出的这个书里边呢,一共呢,就捋了捋啊,有23种啊,我们解决具体问题的一些设计的套路是吧?哎,我们叫做设计模式了,哎,所以呢,这个书出来以后呢,就非常。具有代表性哈,可以看作是呢,设计模式的一本,叫圣经一样。啊,现在呢,大家你去京东啊,呃,这个当当啊是吧,你去搜各种设计模式的书,其实非常多,那追溯的话呢,最早啊,应该说呢,就是这本书,这个时间呢,你发现跟Java语言呢,哎,是同一个时间的是吧。所以呢,我们也能看到就是这个设计模式啊,注意它不只是在Java语言上去体现的啊。就任何一个语言呢,其实都可以去体现这个设计模式的啊,就类似于说数据结构跟算法一样啊,具体的一个算法问题,你可以用Java呢去实现,你也可以用C和C加加呢去实现啊,设计模式也同样的道理,只不过呢,就是由于咱们Java语言呢,主要擅长的去写这个后台嘛,那后台的业务呢就比较复杂,场景也比较多,所以说呢,这个设计模式呢,在Java后台这块呢,体现呢就非常的多,所以导致大家你去网上搜设计模式的时候,呃,用Java语言写的就比较多,仅此而已,别的语言呢也能涉及到啊。
11:30
好,这呢,就我们简单知道,一共有23种设计模式就行。好了,然后这个完了以后呢,我们下边主要呢,来看一个叫单利模式啊。什么叫单利模式?刚才我们提了一下。说所谓的啊类的单例设计模式呢,就是采取一定的方法,保证在整个软件系统当中。我们对某一个类啊,只需要存在一个对象实例就可以了。没有必要创建多个对象。哎,怎么保证这个事儿,哎下边你看有一个思路啊。
12:02
哎,咱们下边呢,就来讲这个事儿了。好,大家来看一下啊。诶,如果我们要让一个类在虚拟中只产生一个对象,首先我们需要将类的构造器的访问权限设置为私有的。啊,这样的话呢,我们就不能够用new操作符在内的外部产生对象了。这个能理解吧。对啊,你要是public的话呢,那是不是在内的外部它掉一次构造器就能造个对象了,那这块呢,完全显示不住,所以呢,我必须得给它私有化啊,那私有化以后呢,外边不能造了,那我只能在类的内部呢去创建该类的对象了。OK,好,那你创建完对象以后呢,我们把这个对象呢,权限呢,可能就给私有化了啊,这样我们在内外部呢,你发现还没有办法去得到这个对象,怎么办呢?我们得提供一个方法。但是这个方法的话呢,你注意我们还不能是非静态的。因为非静态方法得通过对象去调。你现在就想用这个盖的方法拿到这个对象。那你总不能让我拿着对象去调的方法,现在对象还没有呢,有了这个方法才能造这个对,才能获取这个对象是不是?
13:07
卡死到这儿了是吧,诶所以怎么办呢,这个方法呢,必须不能用对象去调了,那就得拿来去调,嗯,拿来调我们就得静态化。所以呢,我们得声明一个静态的方法去呃,获取你当前内部创建好的这个对象了。哎,然后呢,静态方法里边也只能调静态的,所以导致我们这个对象呢,你也得是静态的。那这一圈儿的一个逻辑呢,我们就串下来了。好,那下边的话呢,咱们就具体来去实现一下啊,看看怎么去实现这个单利OK啊好,那回到我们这个代码层面,简单的我们把这个笔记呢,先稍微的写一写啊,第一个的话呢,就是大家针对这个设计模式啊,诶你就知道这就是解决我们具体问题的一些思路啊,或者是方式方法啊,这个呢就可以了。啊,这是第一个是吧,然后第二个呢,我们提到说经典的设计模式。啊,一共有。对,这个你得稍微记下这个数啊,23种。
14:02
OK,呃,注意啊,咱们讲的那个MVC的设计模式呢,你会发现呢,不在这里边儿啊。呃,MVC的话呢,它不是一个具体解决问题的一种方式,是整个我们设计这个软件,呃,整个这个项目的架构的是一种思想,算是啊,只不过呢,我们也套了个词叫设计模式。那它是不在这里边儿的啊,OK,好,那么单利模式刚才我们也提到了,那就这个意思啊。And I'。诶好,我们把它呢就拿过来这呢也是,呃,大家做一个理解就可以啊。好,那下边的话呢,我们看如何去实现单列模式呢,呃,这块呢,我们下边就具体来写,那首先我们整体上说一下这个单列模式的写法呢,大方向来分呢,它有两种方式,一种呢叫做饿汉式啊,一种呢叫做懒汉式。这到底是怎么回事儿,咱们就直接来这写,一边写一边说啊好,首先的话呢,我们这儿呢,去创建一个类。啊,比如说这个类呢,我们叫银行了。啊,把这个类呢,咱们设计成是单立的。那顺带这个测试呢,我就写一起了,好,所以呢,就在这里边啊,首先我声明一个bank。
15:03
啊,咱们国家的一个银行央行是吧,哎,就一个啊,所以我们可以理解成这个银行它实力,唯一的实力呢,就是中国人民银行啊,我就造一个对象。好,回忆一下我们刚才看到的实现思路哈,首先的话呢,我们为了保证这个类呢,只能造一个对象,造对象呢使用构造器,那就不能在类的外边呢,随便让它去调用这个构造器。比如说目前哈,哎,我这叫半个一啊,扭了一个半。哎,我再复制一份,这是不是已经不是单例了。对,那就因为你这个构造器呢,对外暴露了啊,所以怎么办呢。首先,第一步。是不是类的构造器私有化呀?A。好,这样的话呢,我们就避免了它在内的外部呢去创建对象。这是我们说的第一步啊,好,那么第二步,既然呢,你不让我在内的外部去创建对象了,那你好歹也得有一个实力吧。那我们就可以呢,是不是在类的内部去创建对象。
16:01
OK啊,在类的内部啊,创建当前类的实例。而且呢,你就造一个就行啊,所以呢,我们就声明成是个bank,比如说这个名呢,我叫instance。啊就它了啊好,后边呢,我直接呢,就用了个bank。就写完了。啊,注意写完以后呢,有同学可能会说,诶,这不是一个执行语句吧,不应该放到方法里边去做吗?注意哈,我这呢,其实也可以看作是当前类的一个属性吧。其实就是这个属性啊,只不过这个属性呢,就是当前这个类类型的呗。啊,所以没啥问题啊,这有个属性好,那么这个生命完以后的话呢,咱们习惯上呢,把这个属性都私有化了。所以这块呢,我就也加了一个叫private啊。好就完事了,好,那这个造完了,那我们内的外部呢,想用你这个对象,你现在给私有化了,我还调不了。那我们得通过方法。对,相当于呢,提供私有的属性的一个get方法啊。好,那get方法呢,我们就public,然后呢,返回的是一个bank,咱们就叫get,比如instance吧。
17:05
啊,就这么着啊,然后呢,在这个方法里边,你把你造好的这个属性啊,给我返回一下。Instance。啊,没啥问题,好,那现在这个问题呢,其实接着又出现了啊,所以呢,我们通过这个方法呢,去返回当前类的这个实例了,那问题是这个方法谁来调。对,你看现在呢,是不是只能拿对象来调。来说啊,你现在不是需要一个对象吗?行,我告诉你了,你通过这个调这个方法呢,就能拿到这个对象,但是这个方法呢,得通过对象来调对象呢。得通过这个方法获取。这不就绕在里边了吗?是吧,诶就好比这个开学的时候呢,给大家开过一个玩笑啊,说呢,这个我这个给大家发的资料呢,是压缩文件的方式是吧?呃,然后呢,你要是没有这个解压软件呢,我在这个压缩文件里边放了一个解压软件。是吧?这不就类似的问题吗?对诶就是这样场景啊,所以说这块的话呢,我们呃,要想调这个方法获取这对象,你肯定不能拿对象去调了啊,所以呢,我们只能是通过类来调,那就意味着我们这个方法呢,得静态化是吧。
18:12
OK啊,所以这块我们可以看到是这个第三个点啊说呢使用啊get方法。啊,这样的这个方法。呃,获取,呃当前啊,这个类的这个实力啊,当然呢,这个方法呢,我们说必须声明为。诶是呆的一科的是吧。好,那么这个方法呢,声明study以后呢,你发现呢,下边就报错了。因为静态方法中只能调静态的属性或方法,所以呢,你这个instance的话呢,也必须。哎,静态化。哎,得这样才行啊,这呢可以看作是我们这个第四步吧。来说呢,词属性啊也必须。呃,声明为哎,斯克。好,那这个呢,其实我们就搞定了啊,啊,那这样完了以后呢,我们回到另外的一个场景上啊,比如说你想使用当前类的唯一实例,我们就通过这个类叫做bank点叫get instance。
19:10
啊,这样的话呢,我们奥特回车一下啊,就获取了一个实例,比如叫B1了。好,那么这时候你可以再复制一份,我们再去调用这个方法获取另外的这个。啊,一个所谓的实力,其实呢,指向的就是同一个。啊,你可以拿这个等等的去做一个判断啊,实际上呢,它是一个出。哎,没有问题啊好,那么下边这个呢,就相当于是咱们实现的这个单利模式。那就这样来做啊。那这里边儿呢,就使用到了一个static。那么这呢是我们实现的一种方式,把这种方式呢,咱们就称为呢叫。对,A还是。注意这个,呃,哈。是饥饿的恶还是凶恶的恶呢?对饥饿的恶哈,哎,怎么叫饥饿的饿呢?咱们对照另外一种方式大家去理解,可能是更清晰一些啊。
20:03
好,那咱们就接着来写第二种方式了。第二种方式的话呢,那咱们就换一个类吧。还有哪些类呢,是单立的呢?比如说这个咱叫girlfriend吧。有同学笑了,说这不应该是单利,应该是没有实力的是吧?嗯,没有对象是吧。诶,我写错了吗?上面写已经写了名了是吧,把上面的名咱们改一下啊,哎,这个呢先改文件名吧,这个呢改文件名factor啊,Name啊,这个呢我们加一个test是吧。然后这个位置你再把这个test加上那就可以啊好,这个叫女朋友的这个类啊,这个类的话呢,你就不要造多个对象了啊,一个女朋友就够了是吧,精力也没那么多是吧。一说到这儿的话呢,我想起来这个。我记得我刚到北京,那时候读研期间啊,然后呢,认识我们本科比我们第一第两届啊,一个一个女生是经济学院的啊。
21:06
呃,是南京的一个女孩,长得也挺好是吧,然后给保送到那个中央财经了,然后呢,她到北京以后呢,因为我也在,因为我是之前工作过,然后我后来不是又读的研,所以呢,跟他这个基本上就拉齐了,都在这个读研了哈,然后呢。他请我吃饭,说非要请我吃饭,然后呢,我俩就在他们阳台旁边那个饭店吃饭,吃饭的时候我感觉他就在暗示我啊。对,他说,我们央财的女生特别多。啊,我说啊,他说这个我们宿舍单身的也可多了。是吗?我说是吗,他说是,他说而且呢,大家都特别想找it的男生做男朋友,我心里想,我又单身,我又是it的是吧?嗯,我说他是在暗示我吗?然后我就多余问了一句,说为什么?啊,他说呢,这都是搞it的,都说挣得多,死的早是吧,OK哈,对,从那个时候开始啊,就一一年啊左右,那会儿整个呢,移动互联网就已经起来了啊,整个呢,你发现做软件开发的这个薪资待遇确实就蹭蹭的往上涨啊,确实如此,包括咱们做这个培训的啊,这个培训其实已经好多年了,是吧,像06年10年11年那会儿呢,大家如果做Java开发,像在北京啊上海这样城市出来以后呢,其实很普通的,可能能四五千块钱啊,做的稍微的就是班里学的还行的这种出来人可能能要个六七千。
22:28
哎,大概这样程度,你要现在的话呢,基本上就属于翻一倍的。啊,那种场景甚至说还要高一些。啊,所以薪资呢,确实是高一些啊,以前传统的都是金融告是吧,然后那几年开始,这个it的明显蹭蹭的就往上涨。OK啊好,然后这块咱们这个拉回来哈,然后看这个叫诶go哈,说这个呢类我们就创建它一个实例就行啊,那还是有第一个要求,这个构造器呢,一定要限制,所以呢,跟刚才这个呢是一样的啊。哎,所以第一步不变。
23:00
好,那这块我们仍然呢是private一下啊,这个我们叫girlfriend。诶这呢是第一步啊好,那这个完了以后啊,接着我们看第二步哈,第二步话呢,还是跟我们刚才思路一样,说你外边呢不能造对象了,你里边就得造,里边造的话呢,区别就在于我只是做了一个声明。啊,我这儿比如说还叫这个吧。诶,右边这块在赋值的时候呢,我们附了一个no啊,或者我要不写的时候呢,其实本身也是no啊。哎,这个呢,就跟我们鄂汉市开始有区别了啊,这个呢,我们只是说叫声明当前类的实力哈。作为一个属性图片。所以这个时候呢,我们并没有去创建这个对象。那那什么时候创建呢。呃,第三步啊,我们通过这个get方法呢,去调用的时候发现呢,你要是没有实例化,那我们就帮你造一下。哎,所以第三个呢,诶,通过这个我们叫get是吧,哎,相关的这种方法。来获取当前类的这个实力啊,如果为。
24:04
啊,创建对象。啊,则在方法内部。来进行创建。诶就可以了,好,所以这块呢,首先啊,你得是public的了,返回呢就是一个go了,然后我们就要get一个incense吧,诶后边一个小call啊进来进来以后的话呢,不能像之前一样上来就return这个ince了,因为可能它是个no嘛。所以呢,我们必须得提前呢去判断一下啊,说如果呢,你这个CES呢,你等等于no哈,说明呢,你还没有实例化,那我呢就把你呢给实例化一下,那叫new一个girlfriend。哎,又一个勾贩子是吧?行啊好,那么我们创建好这个实例以后呢,那你在里边呢,去做一个return是吧,这个instance就可以了,然后呢,对应的else呢,说明呢,之前已经创建好对象了,那直接return就行,然后你发现呢,这俩里边其实都写return了,就没有必要了啊,所以呢,我把这个代码简化一下呢,就是这样子处理。
25:00
哎,看能理解不?啊,那就意味着如果你调离方法的时候呢,这时候还是个no,那你就创建一下,创建完以后呢,Return,呃,如果呢,再调的时候呢,发现已经有实力了,直接呢就到return这了。哎,所以这呢,就是我们这样的一种方式的实现啊,好,然后接着的话呢,跟哎刚才的鄂汉式的问题一样,说这些方法的话呢,我们必须得通过类来调,所以呢也得需要加上static。这个加完之后啊呢,哎,静态方法里边只能叫静态的,所以它呢也得加上斯tic。哎,这呢也可以看到是我们这个第四步啊,跟我们刚才这个需求呢是一样的。CTRLC。诶,站过来啊好,那么这样的话呢,我们就把它写完了,哎,这个呢,我们相较于刚才的饿汉式呢,这个可以称为呢叫懒汉式。啊,一个懒一个恶。啊,这样的一个场景,好,那么接下来啊,我们要做的事呢,就是对比一下这两种模式啊,大家你看你怎么去记哈,因为有的时候在这个笔试当中啊,我们可能会考察大家啊,说你写一个单利模式。
26:02
有的时候呢,他明确说呢,让你写饿汉式,有的呢让你写懒汉式是吧?哎,那这块大家你看一看,怎么我们去记哈。这两种模式,或者说大家呢,对比一下,你看这两这两种模式的,呃,主要区别你看在哪哈。诶注意这里边儿的话呢,我在创建的时候呢,我就过滤掉一些,呃,其他的一些东西了,什么意思啊,我们针对于当前你创建的这个实例呢,其实没有任何的属性啊。比如说你这个银行名啊是吧,等等这样一些信息呢,我就给过滤掉了,咱们就没有提供啊,如果你想提供的话呢,也是可以的,但是它不属于我们单利模式的这个核心问题了啊,所以我就把这个就过滤掉了,只暴露最核心的这样的一个逻辑。好,那我们来看一看啊,嗯,对比他们的区别的话呢,咱们不妨呢,就抛个问题,就是大家呢,如果去让你选一种单利模式,你愿意选饿汉式还是选懒汉式。啊,大家好像还真不一样了,那说明你有倾向性是吧?
27:01
那那选鄂汉式的是为什么?简单。简单代码少,代码也没少两行呀。是吧,啊就少两行是吧,就少两行。嗯,这个少的原因是什么呢?是因为他一上来是不是就把这个对象给创建好了。对,然后这个的话呢,一上来没有创建,那什么时候创建呢。对,当你需要的时候。什么叫需要?就是当你要调get instance说我现在就要用这个对象了,这时候呢,发现没有,是不是才帮我们创建?OK啊,那你觉得是这种好啊,还是算这种好啊?懒汉好啊,说懒汉好的是因为空间上会有一些节省是吧,你像我一开始的时候呢,你不用你不用我就不帮你创建。当你现在要用的时候呢,我就帮你去创建。啊,这个呢,我们用一个词呢来形容,这叫延迟加载。
28:03
让你需要的时候我再给你是吧,而这个呢。是不是立即加载是吧?诶什么叫立即加载呢?我们讲过静态啊,静态声明的这个变量是随着类的加载而加载的,那也就是说呢,这个类呢,加载了它就有了。你也可以理解成呢,就是随着类的加载而立即加载的,那么它呢,就是比较早的就出现了在我们的内存当中了,哎,你要用的时候呢,直接拿过来用就可以了。那从内存节省的角度来讲呢,是不是右边的要好一些是吧,左边呢,相对来说呢,这个诶所谓的这个实力的生命周期就有点儿长。咱们以前讲过一个概念呢,叫做内存什么呀,泄露是吧。啊叫内存的泄露啊,内存泄露啊,就是什么叫泄露,还记得吧。就是本身是个垃圾,但是呢,这个GC的话呢,还没有帮我们回收是吧,诶这叫内存泄露了啊,那其实在一定程度上来讲呢,我们把诶什么样的问题啊,就是有的这种变量啊,你说它是呃泄露吧,他好像也谈不上泄露,但是呢,这哥们儿的生命周期啊特别长。
29:06
呃,但是实际上我们用它的时候呢,又比较短,那多出来的这部分呢,呃,我们其实不想用了,说白了就是。可以想办法回收掉了是吧,但是呢,事实上呢,它又是比如说静态的,导致它的生命生命周期呢特别长,我们没有办法回收,一定程度上也可以理解成是泄漏的问题。啊,OK,就是因为它生命周期过长,超出了我们使用的这个范围了是吧,哎,可以理解成这个也看作是泄露了啊,所以从那个角度来讲的话呢,这种呃,上来呢,就加载的似乎差点意思是吧。呃,当然这块呢,其实相较于这种延伸的方式,它也有好处。对,大家可能会觉得稍微的能快一点点是吧,呃,因为呢,你用的时候它都已经有了嘛。啊,事实上也是如此,你像大家这两天这不是这个安卓手机又发一些新机子哈,然后我看我这块我会收到一些新闻,就是说呃,手机的大内存是吧,有没有必要。
30:01
啊,苹果呢,现在还在六个G呢是吧,然后呢,这个安卓手机都已经干到16个G起是吧啊。对,还是很夸张的哈,对,当然这个呢,具体系统这个层面的区别咱就不多说了哈,但是有一点就是说内存的话呢,它体现的就是你现在加载的一些任务是吧。啊,硬盘呢,体现的就是你可以实际存储数据的能力。啊举个简单的例子呢,比如说大家假设你是个厨师啊,你现在正在这个后厨这块呢,然后呢,你这个厨房呢,如果说特别大,那你就可以装的东西就很多,这呢就好比是你的这个磁盘一样,磁盘的你装的东西又多啊,但是呢,你现在作为一个厨师,你要呃做菜是吧,你的这个台面。就好比呢,是你这个内内存台面呢,如果说特别大,你可以同时呢,就可以做好多道菜,台面如果特别小,那你这块你只能是处理这一道菜是吧,如果呢,你想再做菜,你把现在的桌面呢清理干净,你再呢,去加载一些其他的一些数据是吧才可以,所以这个台面的这个多少意味着就是你可以同时处理任务的这个多少了,越大的话呢,你这个同时处理任务。
31:05
这个能力就更强一点啊,那如果说你要内存小的话呢,现在你要需要用一个新的数据了,内存不够了,你得把现有的数据呢清理掉,然后再去加载新的,那内存大呢,就意味着你同时可以有好多的数据呢,都缓存在这个内存当中,需要用的时候呢,直接一打开用就可以了,不用呢再去磁盘呢去加载,那这时候呢就比较好使。OK啊,所以呢,这个提前加载好的数据呢,我们要用的话呢,诶似乎能快那么一点点。OK啊好,那么拉回来咱们这块呢,就稍微说一下他们二者的区别啊,那首先的话呢,我们这块看一下他们二者算是一个特点吧。哎,特点这块的话呢,我们提到这个饿汉式哈,这个呢,其实谈不上说叫优缺点了哈,这个饿汉式的特点呢,就是哎,咱们用一个词呢来形容,就好比呢,叫立即加载。啊,这个怎么来理解呢?就是随着啊类的加载啊当前。
32:00
啊的唯一实例。那就创建了。啊,这个呢,我们称为呢,就是立即加载的一个意思了,好,那对应的这个懒汉式,哎,我们可以称为呢,叫哎对延迟加载。哎,就好比是呢,我们对应人上呢,就是有这种咱说的那个词叫什么叫拖延症的一样。啊,比如说要交作业了啊,有的同学呢,就是留了作业了,有的同学呢,就立马就开始写是吧,写完了,那啥时候收啥时候就收啊有的呢,属于这种懒汉式。啊,怎么着呢,就是能不写就不写啊,等第二天呢,必须要交了,前一天晚上呢,加班加点的开始去写这个作业,这就属于叫延迟加载,属于懒汉式,呃,饿汉式呢。你可以想象就比较饿嘛,上来呢,就必须得把这个东西得造好,是吧,饿还是啊啊,它的特点呢,就是说在需要使用的时候。啊,进行呃,创建。啊,这就是他的一个特征,好,就这两个的话呢,我们谈不上说这就一定算优点或者缺点啊呃,只能说呢,它是特点,然后呢,我们接着呢,说他们的这个优缺点啊。
33:04
那优缺点这块呢,我们也是分别的来看一下,这个叫饿汉式,还有这个懒汉式哈。哎,这个懒汉式。好,那么我们怎么去说呢,这个呢,比如我们说这个鄂汉式,它的这个优点是什么呢?呃,相对来说哈,写法简单是吧。呃,稍微简单一点啊。还有吗?说鱿鱼。啊,然后内存中啊较早。哎,加载啊,所以呢,使用更方便。诶更快是吧,诶可以这样去说,这呢,看到是他的这个优点。啊OK啊好,那么对应的话呢,嗯,它有什么缺点吗。对,缺点就是我们刚才说的哈,它一上来的话呢,就把这个实力呢,就给加载好了,它呢在内存当中占用的时间就比较长。啊。时间啊,较长。
34:01
哎,所以一定程度上的话呢,我们都可以把它看作是有点像这个泄漏一样。啊,大家知道呢,它是随着类的加载而加载的,那对应的也是随着类的卸载而消亡的哈,这个类的卸载呢,实际上呢,轻易我们不会去卸载这个类。啊,大家以后呢,呃,接触到这个GVM的话呢,你就知道哈,这个我们说呢,相应的这个类呢,占堆,我们把这个类呢,是不是都加载到方法区了。对,这个方法去呢,垃圾回收呢,这个频率是非常低的啊,在即使非常低的情况下呢,我们试图去卸载一个类,你发现呢,也很困难啊。啊,因为这个类的话呢,它可能会在任意不确定的地方被使用,包括呢,它会被类的加载器呢所引用,类类加载器只要呢不消亡,它也跟着呢被引用,所以也消不了,它消不了,那静态的这个变量呢,也就跟着消不了,所以呢他在内存中占用时间呢就比较长。OK啊行,这是一个,然后其实呢,相较于我们这个懒汉市呢,欧汉市呢,还有一个优点,这个优点呢,我们后边呢,会体现它呢,叫做呃,线程安全的啊。
35:04
哎,它是线程安全的,这个怎么来理解呢。啊,这个呃,简单来说一下啊,什么叫现场安全性问题,利润这上有1000块钱。然后你先判断一下它的是不是。大于零啊,如果大于零,我就把这个钱呢都取出来,取出来以后呢,你不就变成零了吗。哎,我有两个过程啊,先判断是不是大于零啊,如果都大于零,我就都把它取出来,取出来以后,呃,另外一个先生如果呢,又过来去取这个钱了。哎,他呢也先判断一下,这个时候我发现呢是零了,所以他就不取了。哎,就退出了,这是我们希望啊,或者正常的一个思路哈,当然呢,也有可能会出现这样的问题,说这个线程过来之后呢,我先判断一下这里边儿啊,1000块钱是不是大于零,好大于零,注意判断完大于零之后呢,还没有取这1000块钱呢。另外一个先生也过来了。生态A,这时候呢,是不是大于零,你看1000块钱也是大于零,所以他也要取钱。先后呢,一直行这个线程呢,把它整成零了,这个也取1000块钱,最后呢,整成负1000了。
36:04
啊,那这儿呢,就相当于是一个现城的安全问题啊,以后我们会讲这个事儿哈,那放到咱们这块的话呢,呃,我们说呢,鄂汉式呢是安全的,而这个懒汉式呢是不安全的。我先写上啊。诶,它的这个缺点就是叫呃,线程不安全。好,那怎么去体现一个安全一个不安全呢?呃,这块呢,我们来这个懒汉市呢,来简单的说一下啊。这里边儿呢,那个1000块钱呢,就类似于我们这里边儿这个instance啊,就是创建这个实例,那我们说呢,应该只让他调一次就行啊。但是我们说呢,有可能会调用到两次,比如说一个线程过来之后呢,我们先判断一下,说当前这个incense呢,是不是no,一判断的是no我就进去了。进去以后呢,注意这时候他还没有马上执行呢。这时候,另外一个先生也过来了。过来之后的话呢,诶,我也判断一下,说你in森是不是no,一看判断的也是no,我呢也进去了。
37:00
那么接下来呢,诶,前面一个线程呢,就继续要执行了,你可以理解成咱们这个CPU呢,就是先切换到第一个线程,执行到这儿的时候呢,它突然呢,就切换到第二个线程这了。然后切换到这儿呢,第二线程也判断也进去了,然后可能呢,第二线程接着执行了,也可能是又切换到第一个线程,总之他俩先后呢,就都调用到了这行代码。那就意味着你是不是就拗过两次了?哎,那这时候呢,我们就意味着啊,他有现成的安全问题。啊,那么这个现场安全问题呢,是需要去解决的啊,这个注意一下,我们放到呃,多线程啊内容。哎,或者叫章节是啊解决。好,这呢是它的一个缺点哈,那他有没有这个优点呢。诶它的优点的话呢,就相当于它的这样的一个缺点一样,呃,它的内存当中由于是延迟加载的,所以呢,它呃占用内存的这个时间呢,就比较短一些是吧?呃优点呢,我们说在需要的时候。啊,进行创建哈。
38:02
哎,节省哎这个内存空间啊。OK啊好,那么大家呢,就把这两个呢去体会一下就行了,那么如果呢,在笔试当中啊,出现这个说让你去写这个单例模式了,那大家写哪个呀。诶,对,推荐的,你写恶汉是因为它天然的是安全的。也比较简单是吧,呃,但是呢,如果他明确说呢,说你写一个懒汉式。哎,注意大家要写的话呢,就不要写咱们目前的这种有线上安全问题的了。哎,后边呢,我们讲了线程安全的方式以后呢,你写个线程安全的。啊,注意一下啊,呃,最糟糕的就是啥呢,你自己呢,没说让你写什么,然后你自己主动写了个懒汉式,然后下边写了一个说明,说呢此方式存在线程安全问题。然后还没解决是吧,那这就比较麻烦了啊,诶这个他可能会问你说,诶怎么解决,所以你还不知道,相当于自己挖了个坑是吧?OK啊,诶那么实际在开发当中,除了我们现在写的这两种方式之外呢,还会有一些其他的一些方式,比如说我们后边会讲的枚举类的方式啊,类不类的方式啊,哎,其实都可以,那么这些方式相较我们现在写的这两种有什么区别呢?这个咱们以后再讲。
39:13
啊,因为暂且咱们还没有接触过枚举类,没有接触过内部类呢啊,你可以百度搜一搜,能查看到很多啊好,那么关于单利模式呢,咱们就说到这儿,大家呢,目前只需要呢,把它看作是咱们此在这个之后的一个应用场景,哎就可以了,在实际开发当中哪些地方会用呢?诶简单看一下啊。首先啊,在咱们这个Java代码当中,有一个类叫做runtime,这呢叫运行时环境。啊,它呢,对应的呢,哎,我看一下这个咱们的GM的这个架构图啊。它对应的呢,其实就是我们这个内存结构里边,你看这儿呢,叫运行时数据区。哎,整个这个结构的话呢,它其实对应着一个类,就叫做runtime。然后呢,它呢就是单立的啊,你可以直接在我们代码层面啊CTRLN。
40:02
At run time。诶,这块我们来啊,All places这是包看哪个版本呢都可以啊好进来以后的话呢,这不我们首先构造器私有化了,然后呢,在这儿呢造了一个,然后呢通过方法来获取一下,这就是典型的恶汉是吧。啊,没问题啊,诶就有一个实例就行啊,那除了它之外呢,还有比如说像咱们那个Windows的这个任务管理器。就一个啊。这个Windows的这个回收站啊,就这一个,所以这都算单利的啊,这个呢叫application啊,也是单立的典型应用啊,什么意思,比如说以手机为例啊,手机上的话呢,大家有好多的这个具体的APP了。每一个APP呢,在你打开的时候啊,它就会铺满整个界面了啊,其实呢,我们再点击其中的一个链接,它会又出来一个新的界面,每一个界面呢,其实是一个对象。甚至呢,也是不同类的对象啊,但是呢,不管怎么着,你整个这个APP它呢,在内存当中呢,它也有一个类,这个类呢对应的叫application。啊,对应的它的这个实例呢,就只有一个好,还有呢,包括这个应用程序的这个日志啊,我们也是一个单立的数据连接池,以后我们会讲的也是这种单立的啊,就造一个就行。
41:10
好,这呢是它的一个应用场景啊,了解一下就行。好,那么关于static单例咱们就告一段落了啊,下边呢,我们看一个may方法,这个may方法呢,咱们在第一天写代码的时候呢,其实就写了,只不过当时呢,我们告诉大家说,大家呢,你先不用细研究是吧,你先呢,诶把它记下来,以后呢,我们会慢慢的展开来讲。那么在我们讲完死在这个之后呢,这里边儿的每一个位置呢,咱们就都认识了。哎,Public表明呢,就是这个方法的权限呢,是比较大的。啊呃,在整个我们这个项目当中,各个包里边儿都能看得到啊,然后死在这个呢。诶,它是静态的,随着类的加载而加载的。啊,因为呢,你想这个方法呢,我们是程序的入口了,你不能说一上来让我先造个对象。啊,造对象才能调离方法,但问题是造对象的这个代码也得在程序入口里边做。
42:01
又又又给相互之间这个是吧,又又又给卡死了啊,所以呢,你这种不能让这个方法呢,拿对象去掉了啊,你得拿泪去掉啊,所以呢,就得是staic的。好,这个方法的话呢,我们执行完以后呢,也不需要返回,或者你也没有可返回的这个结构了啊,你已经是最基础的那样一个方法了。咱们前面讲过啊,这样一个场景哈,说呢这是一个方法,这个方法里边呢,调另外一个方法,然后上面这个方法呢,如果有返回值,它执行完以后呢,会把这个返回值呢,相当于就返回到你下边这个方法里了。但问题是现在没方法,他一定是不是在这个方法的这个战争里边是最下边的了。对,它没有可返回的了,是吧,所以呢,它就是个word了啊。然后呢,这个方法呢,比较特别,是个程序的入口,所以呢,我们就把它写成may,那就表示是入口的意思了啊哎,这呢,就我们说清楚里边每一个关键字的意思了。好,那么由于呢,Sta讲完之后呢,我们能说清楚了,那关于may呢,哎,还有没有其他的一些点可以去讲的,这就是我们这一节呢,呃,简单的给大家说的这个事儿,这个内容的话呢,大家作为一个了解就行啊,这个呢不算是重点的。
43:08
好,那么关于这个may方法它的理解一呢,哎,我们说呢,人家呀,也可以看作是一个普通的静态方法。哎,看作是一个。呃,普通的啊,静态方法。诶,这是一个角色啊,然后另外一个角色呢,就是这个静态方法呢,也比较特别啊,叫做没方法,就我们说的主方法,它呢,诶看作是程序的入口。OK吧,真的就是这样的特点,哎,那如果说从程序入口这个角度来说呢,我们说它的这个格式啊,是固定的啊,不要修改是吧。是固定的,所以大家你还记不记得我们好像做过前面的一个企业真题啊,他说呢,这个main方法能不能把它改成private的。嗯,还记得是吧,对,我们改成private以后呢,它是没有报错的啊,这个呢,你可以理解成就是从一个普通方法的角度,那你愿意生明成什么就生什么。
44:02
但是你要改完之后的话呢,他就。不能表示为入口了是吧?呃,因为这个格式固定的不能改,你改完之后呢,那就不是一回事了啊,诶就这个意思,好那么从这两个角度出发呢,咱们可以写一个简单的代码,大家感受一下啊,比如我这呢,叫做may的一个测试了。啊这么着啊,哎在这儿呢,我写个没方法,哎把它呢看作是呢叫诶程序的入口。然后呢,我在呢,声明一个class,比如说我叫呃,我我就叫妹吧。哎,这样个名啊,这呢也不是关键字了,好,然后在这里边儿呢,哎,我也写个没方法。诶外形没方法啊,然后我把它呢,看作是一个普通的静态方法。好,你要是个普通的静态方法的话呢,你看你有参数吗。你有参数的话,我想在这个方法里边呢,我就把你诶参数对应的这个数组呢,遍历一下啊,那我写个for循环是吧。哎,这就x.length一下,里边我们就打印一下啊。
45:04
哎,比如xa,那就这样呗。好,然后在这块呢,我们也想就是再写一句话说呢,我们就是may里边的。啊,这样一个酶方法。哎,它的一个调用。诶,我就这样写一下啊好,那我们把它呢,看作是一个普通的方法,它别看成是入口了,那我们这是入口,那我就在这个入口里边,我就想调你这个方法,方法呢是静态的,是不是通过类调就行。所以我就may了啊,点,然后点这个may方法,那你得需要传一个四针形的一个数组,提前我们造好。在这个数组是吧,比如讲啊AR。哎,你有一个四针形的一个数组。比如说A。啊,BB。哎,CC是吧,好,然后呢,我把这个数组呢,就放进去了。哎,这个就不报错了。他看成入口,他看成是个普通方法,所以呢,我就从这个入口那去执行它。
46:00
哎,那执行的时候呢,他就调用这个main方法里边呢,就把这个数据呢,给输出了一下。哎,所以呢,我们把下边这个呢,就看作是一个普通的静态方法就可以了。啊,没啥问题啊,行,简单的体会一下这里边儿的两个角度,然后第二个问题哈。大家呢,会发现呢,这个魅方法呢,它带一个刑残啊。那么到目前为止呢?我们好像从来没有用过这个所谓的型材。也不知道说他这有啥用啊。是吧,你这程序的入口,你该咋执行咋执行呗,那有个它干啥呢。呃,难道呢,只是把它看作是一个普通的方法,然后我们调的时候传一下吗?呃,显然不是哈,所以这块呢,我们就再说一下这个行参这块呢,有什么作用啊。说它这个作用的时候呢,我们就也可以回一个知识,诶,我们在最初讲流程控制的时候呢,提到过哈,说我们现在呢,要求从控制台输入一个啊岳小鹏的这个期末成绩。啊,当时我们开始用的啊,当时呢,咱们是用的谁啊。Scner是吧,哎,所以呢,我们可以这块写一下啊,状态与控制台交互啊。
47:04
要如何获取啊,或者叫如何从啊键盘获取啊数据。是吧,这个时候呢,我们其实讲过这个方式一。哎,咱们呢叫哎使用scanner啊。哎,使用scanner去做,那这里呢,其实还有一种这个叫方式二。这个方式二的话呢,咱们就可以用现在这个main方法,通过main方法的这个行参进行传值。哎,使用酶方法的这个,哎行参啊进行传值。直播呢,这时候传值的时候呢,你注意哈,我们死甘蔗的时候呢,他传的是各种类型的。In的类型啊,盖类型啊,包括string类型都行,而他呢。诶这块你看他声明的是顿是吧,所以呢,他只能传顿。啊,哪怕你说传岳小鹏的期末成绩啊,成绩呢,比如说考了这个89分。是吧,89分,那不好意思,这个89呢,也是得带引号的89。
48:02
哎,那你传过来以后呢,你可以考虑把它呢,再转换成是一个int是吧,哎就可以了,诶这个怎么转,咱们呢,这一章最后不是要讲这个包装类吗。哎,讲这个包装类的时候呢,到时候咱们说这个事儿。啊,怎么去转啊,好,至少这块呢,给了我们一种方式哈,那咱们就来演示一下呗。来一个啊,我们叫may的一个DEMO是吧。好,那这块我们这样来处理啊,当我们去调这个方法的时候呢,你给我传值了,传值以后呢,我这里边儿呢,我也不做什么复杂操作了,我就简单的把它做一个。简历啊。打印一下,为了证明呢,我这块就是船的,我就前面加一个前缀吧。就这样啊,简单的我写一下就行了。好,那写完之后呢,问题是。怎么去传呀?是吧,这块呢,咱们演示两种方式,大家了解一下就行啊,咱们开发灯的时候呢,其实也不怎么用啊。呃,了解一下,呃,第一种方式呢,你看我先把这个文件呢,CTRLC一下。
49:01
咱们就用命令行的方式去演示。嗯,我就随便给大家放到一个位置吧。有点就我就放这儿吧。啊,放这了啊好,这块放这儿呢,你稍微注意一下,咱们这个命令行的时候呢,它就没有这个包的概念啊。或者说呢,咱们这块放的文件目录跟那个包也没啥关系,所以把这个package呢注释一下啊。除掉了啊,除掉以后呢,就留着这个。Class就行,好,关掉。保存一下啊好在这儿呢,咱们都说过了CMD呗。我来啊。呃,我呢先编译啊叫Java c。的一个DEMO。点Java是吧。忘了个事儿。子数集的事是吧,这我们得给他一下啊,这块我们是不是GBK啊。诶保存一下啊,改一下这个字数集啊,因为呢,这块我们认可的是这个JBK。是不是在这个属性这块能看着是吧。好了啊好,那我重新的再去编译啊。
50:00
哎,可以了。那编译完以后,那这块这不就生成这个资金码文件了吗。接下来啊,Java,然后may DEMO好,以前的时候呢,我们就直接这样回车了。啊,这个程序就执行了,那就意味着现在呢,你执行完以后里边呢,由于我们也没有输任何的这个数据,所以呢,这个L呢就是零。所以呢,这块你也看不到任何的执行效果啊。那我们怎么去传呢?注意在这个类名写完以后呢,空格一下,你在后边呢,就可以输入这些数据了。比如说我们写个字符串,注意是英文格式下的啊,哎,我写个Tom这是一个,然后呢,你还想写你空格一下。哎,这个时候呢,你写的这个字符串呢,加不加双引号都可以。啊,甚至说呢,我们写一个89。啊哎,再加个触都行啊,然后你看我回车了。这时候的话呢,这四个就看作是我们输入的这个数据了。哎,那么这呢,我们就写了一个for循环嘛,哎,其实呢,意味着我们这个二这个数组的长度呢,就是四啊接下来呢,把这个数据呢,就依次呢,咱们变利了。
51:08
哎,这不就体现了我们从控制台那去获取指定类型的数据了吗?哎,我说的不准确,不能叫指定类型了,全是死顿类型的。哎,只不过呢,你可以呢,在我们代码层面呢,把呃,像这样的数据呢,你再转化成是int类型,把这个呢,你转成波尔类型。对这个呢,咱们讲到呃,这个包装类的时候呢,会说这个问题啊。好,刚才呢,我演示的是命令行,这就过了。啊,过了啊,那么在我们的idea当中怎么去体现这个传值呢?哎,这个是在这儿哈。这有个run。啊,这个大家就了解就行啊,就是平时我们其实也不怎么这样做啊,在run这块呢,有一个叫呃,Edit configuration是吧?啊点开啊点开以后呢,呃这块呢,我们找谁先找这块哈,咱们现在是用JDK17,咱们是在这个这个Mo下。
52:04
诶,这不就我写代码那个Mo嘛,然后在那个Mo下呢,你在这个位置哈,你去写一下你那个叫made的。DEMO是吧?哎,选中你当前这样的一个文件哈。咱们这是没这样一个程序吗。选中它这个一定得选完以后的话呢,下边有个叫program arguments啊。这就是程序的参数吗?哎,这呢,你就在这写就行了,像我们刚才写的,写过Tom啊,写过这个加引号的啊,这种场景的啊,再来一个这个78,再来一个处就写这儿就行,中间用空格隔开啊,写完以后OK一下,然后呢再去做一个软。这不就出来了吗?哎,就这样就行。诶,所以呢,我们也可以从这个控制台呢,来获取指定的数据了啊,使用的是main方法,以后的话呢,我们还会去讲啊,像IO流的时候呢,提到过这个buffer input,我们也可以呢,从来获取指定类型的。啊,就是还有别的方式啊,大家了解一下就行了。
53:03
好,这个呢,就是关于咱们这个没方法的一个简单的一个说明了啊,大家呢,稍微的感受一下就行,这呢是一个我们讲面向对象的时候,难得的一个大家了解一下就行的一个内容了啊OK。
我来说两句