00:01
行吧,那接下来咱们就接着再往下看了,各位啊,这是一个随机数,那么常用类这块还有什么呢。找一下啊,常用类。这块还有个枚举,各位还有个枚举啊,我们一起看一看这个枚举。枚举也是一种类型。来。嗯,Javac下边呢,新建一个package。啊来,那么这块的话,咱们直接呢在这。嗯,创建一个啊。哎哟。这个包现在。做像问题。
01:03
这还有点问题,各位。你看啊,Insert这边有点变化是吧,这里边是不是。不行,跟以前的不太一样啊,这个改个名吧,各位改个名啊。呃,点右键rename啊,或者shift f6啊,Shift加F6。改一下啊,改成二。改了一下啊。好,这个这个还注意,还得注意一下啊,来我们新建class,可以新建class啊,我们叫做TEST01。注意啊,就是我们来这样啊,看以下这么一个程序,各位啊。呃,分析以下程序在设计方面有什么缺陷?
02:09
刚才的那个问题,我说一下啊,是这个。包名。包名是不是属于标识符,各位?有有问题吗?Package后面这个包名是不是属于标识符?对吧。标识符吧,标识符就是关键字,不能做标识符吧,是不是那是关键字啊,你说你说是关键就是关键字,你看那。是不是你?这确实是个关键字啊,关键字,所以我刚才在这儿给这个包名,我换了个名字啊。换了个名字,后面加了一个二。啊,加了个二理解这意思就行啊,不知道我刚才在操作什么是不是,哎,简单说一下啊,简单说一下啊,改了一下啊改了一下不能是关键字要出问题了啊,就分析一下程序在设计方面有什么缺陷啊,我接下来我去设计一个程序,大家看啊是这样的。
03:16
Public static void。比如像。有这样一个方法啊,呃,这个方法这一块呢,有这么一个代码,各位啊,类型A和in类型B。先看我写代码,各位啊。嗯,这块呢。异常这块咱们还没说呢,没说的话呢,先不用异常啊,比如说A。除以B。他会有一个结果。各位啊,会有一个结果,这个结果呢,我们叫C吧,假如说。
04:09
呃,以下程序啊,计算两个int类型数据的商。呃,计算成功。返回。一。计算失败。返回零。啊,这是int类型的数据,这个参数也是int类型的数据。计算啊,两个int类型数据的商,各位。计算成功呢就返回,一计算失败就返回。那这样的话,这块有一个反馈值int。
05:00
啊。Return啊,Return。返回一个什么呀?哎,返回一表示成功,返回零表示失败,表示失败啊这样规定的。那现在呢,我们直接。这段这边啊,有这么一个代码,各位啊,我先写一下,大概写一下啊。需要一个异常处理机制。我先写上啊,咱们说完这个之后再往下下一个章节就是关于异常异常这一块的东西啊,有同学现在还不知道我在干什么啊TRY。Catch。这是个异常处理机制啊,正常执行到这儿,程序执行到此处,表示以上代码没有发生什么。异常表示执行什么成功返回一、程序执行到此处,表示以上程序出现了异常。
06:14
表示执行失败。Return。零。好,有这么一个设计各位啊,大家看我再我再大概说一下啊,是我想表达什么意思啊,就是因为我们接下来要讲的这个东西啊,是关于我们JDK当中的另外一种类型叫枚举。啊枚举,然后呢,第一个程序给大家写的时候,我并没有枚举。啊,就是这个案例没有使用Java中的枚举类型。枚举啊,分析以下程序在设计方面有什么缺陷,这是它的设计。
07:07
就这么一个方法,有一个参数A,有个参数B,然后呢,A呢除以B。然后有一个结果。那么这个程序说的意思什么意思呢?如果你两个数相除,除完之后能正常算完。对吧,哎,能够计算完,我就认为你怎么着成功,成功你就返回一个一。啊,如果计算失败呢,你就返回什么呀,哎,零。就返回零,那有同学说老师这个是什么东西,我简单在这解释一下啊,这是一个异常处理机制。这个TRY是什么意思啊,表示尝试啊,尝试去执行这个大框里边代码,如果大块代码在执行过程当中出现了异常。假如说这行代码在这里出现了异常。那么它不会往下继续走,19行和20行会直接进到K鱼块中执行。
08:01
这跟异常处理机制关联在一起的。各位。我再说一下啊,就大概是这样,先这样理解一下,就揣一句话中表示尝试去执行的程序。如果大括号中的代码执行成功了。他会一行一行往下走,假如说在我们18行这块执行失败了。那么下面这行代码它是不会执行的,直接进到catch块中执行。所以我认定如果到开据块中执行的话,我认为是执行失败了。如果在上面执行到这儿的话,我就认为是上面这个执行成功了,因为这个程序能到这儿。对吧,就说明上面这个成功了,如果这个是没成功的,那这个是不会执行的,直接进到开始开始一块中执行了。这是一种异常处理机制,各位啊,有老师你在搞什么?有没有可能这个A是十,而B是零,大家都知道,在数学当中除数为零的情况下。是不是就代表是一种异常情况?除数是不是不能为零,在数学里边。
09:01
但是我们在调用这个方法的时候,传了两个参数过去,第一个参数和第二个参数,第二个参数我传了一个零进去。那除数为零的情况下,像这个就不符合我们数学规则了。但如果你传一个五进去的话,大家想一想,十除以五是不是二。对吧,然后程序是不是就正常执行了,往下就执行了,就执行成功了呀,如果你这个是零的话,在我们Java语言当中,十除以零是会发生异常的。我们可以演示一下十除以零来执行一下。嗯。就有异常发生了。发生异常了,看见没有,这个异常叫做BY除数为零。叫数学异常被零除。被零除啊,除号被零除。那么这是个异常,那么如果说我将来往这传这个数据的时候,传一个十进去,传一个零进来十除以零,那这个时候出现异常,下边代表就不执行了,第20行代码就不执行了,各位。
10:11
啊,它会直接进来这个catch语句块中执行执行这个分支。当中的程序如果执行到这儿,我认为就是执行什么失败了吗。反馈什么,哎,零。因为设计上要求是这样的呀,计算失败返回零啊。对不对,设计上要求能计算成功,反馈一嘛,好程序到这儿我就认为它上面没发生异常。上面它没有发生异常,它执行到这儿就表示成功啊,我返回一。我这样去设计这个程序,大家想想有什么样的缺陷?思考一下。各位。我们先不管它缺陷不缺陷啊,我们先尝试着去调一下这个方法行吧,这个方法静态的啊,大家看。括号里面传一个十进去,传一个二进去。
11:02
他最后会有一个结果吧,是不是,哎,这个结果是不是就是。一呀,为什么是一,因为十除以二等于五算完之后呢,接下来返回的是一,返回一这个方法就结束了,所以这个方法最终返回的是一,输出是一啊。对吧,哎,你看执行。那我们再往下程序啊,这样写return value2。DIVIDE10逗号零。那么十和零传进去,接下来我们在这儿呢?我们输出什么呀?我们的return value2。那么大家想一想,这个程序现在十传进去,零传进去,这个是十,这个是零,那么这个是十,这个是010除以零呢,最后呢,它应该是出现异常了,出现异常它下面程序就不执行了,就会进到catch鱼块中执行。
12:06
它最终会返回零,所以这个结果是不是就是零啊。来,我们看一下啊走。对吧,那么现在这个程序写的是没毛病。我也没说这个程序写的有毛病,各位啊,我说的这个程序在设计方面有什么缺陷?大家思考一下。思考一下啊,程序可以运行。编译和以下代码啊,可以编译也可以怎么着运行。对吧,啊,这些都没有问题,就是设计上你觉得。有什么缺陷?他的需求是这样的呀。
13:02
大家好好看看。计算两个因数据商计算成功,返回一,计算失败,返回零。这是设计者说的话。这是设计者说的,他这个设计有什么问题?返回一和零好不好?各位。他这个设计说返回一和零,你觉得怎么样?我们不要这个返回值,这个计算结果,我们根本就不要,我们只想知道这个方法执行成功了还是失败了。它返回一和零好不好,这个设计。虽然你可以做对吧,那么等于等于一的情况下表示什么呀?计算成功是不是?哎计算什么呀,失败对吧?哎,当等于等于零的时候表示什么呀?计算失败对吧?其他情况表示计算什么成功。
14:11
走一个也能也能做。是吧,哎,也能做,但是它这个设计上有什么问题,就是返回值类型设计的一个问题。你不就最后两种情况吗?你哎,飞达说的对,你返回一个布尔类型不行吗?你好好想想,你返回一个int类型,它有什么缺陷?这个缺陷就是int这种东西啊,我可以返回100,他也不会报错。你们有没有发现这个问题?我返回1000,它是不是也不报错?需求上让返回几,返回一和零只能返回这两个值,但是程序员手一哆嗦,是不是有可能会在这加一个零?有没有可能手一哆嗦写错了?
15:03
他明明已经写错了,偏离了需求,但是编译器是不是并没有检测出来这个错误?大家思考过这个问题吗?你想想,我觉得这个设计缺陷在这个返回值类型上,设计缺陷在哪?设计缺陷在这个方法的返回值类型,返回值类型方类型上返回一个一个int不恰当。既然最后的结果只是成功和失败。啊,最好使用什么呀,布尔类型。因为。布尔类型true和false正好可以表示两种不同的什么状态,你如果返回一个int,那程序员有可能在误操作方面,他在写代码的时候有没有可能写错了?
16:06
该写一写成了十写成十是不是已经偏离需求了?返回时已经偏离了需求。对吧,实际上已经出错了,但是编译器没有检查出来,大家思考一下是不是。编译器,它看到是int,你返回个十编译器觉得没毛病。对吧,就是我们一直想,我们一直想追求的。是什么呢?是所有的错误尽可能让什么呀编译器找出来。明白吗?所有的错误越早发现。越好,越早发现。越好啊,所有的错误越早发现越好。
17:00
那你看你这个程序的设计上就有就有缺陷。对吧,哎,实际上就有缺陷。你看。是不是?来,那怎么办呢?实际上比较好的设计,目前为止最好的方法就是返回布尔类型。对吧,哎,这种设计不错。如果你到这儿的话,我们就给它返回一个值,叫做true,如果你到这儿返回一个什么呀,叫做false。是不是返回触表执行成功啊?对吧,那现在这个代码的风格就变了。返回放表执行失败吗?对不对,哎,所以接下来在这一块呢,你的代码上面的测试程序就变成这样了。执行完之后返回布尔类型。
18:00
对吧,我们叫success。Success啊,然后呢,我们输出success对不对,哎计算成功,其他情况就是计算失败呗,对吧,哎,走一个。那现在这个肯定是计算成功啊。对吧,接下来你这个改成零,那你肯定就是计算失败了,因为十除以零,这就除异常了,这一旦除异常这个就执行不了了,会进到catch语块中执行,返回一个falses,那最后就是执行失败呗,是不是这个设计就比刚才要要好一些。啊,要好一些,大家思考一下是不是这个意思。就是说我们有一个什么呢,就是大家最好就是。就是什么呢?就是说我们这个错误越早发现越好,编译器能发现出来,最好让编译器发现。你看。这个返回一个int,你这个设计就有点儿失败,返回布尔类型设计的就很好,对吧,但是大家现在思考一个问题啊,这个还好,是因为我们的结果只有两种情况对吧。
19:07
是不是只有两种情况啊,那么我问大家问题,有没有可能以后在开发的过程当中,你遇到了一个方法,这个方法在执行,最后执行完的时候,这个结果有没有可能有三种不同的情况,那这个时候不玩类型是不是就不行了?思考一下,先思考一个问题啊,思考什么呢?就是以上的这个方法设计没毛病。对吧,哎,听好返回什么呀,哎,True和false表示什么两种情况,但但是啊,但是在以后的开发中。有可能遇到什么,遇到一个结果啊,遇到一个方法的执行结果,可能包括三种情况,四种情况。
20:04
五种情况。啊,五种情况不等。但是每一个都是可以数清楚的。一枚一枚都是可以怎么着列举出来的。这个布尔类型就无法满足需求了,此时需要使用什么呀?哎,Java语言中的什么枚举类型?各位啊,需要使用枚举类型。你上面你想一想,你返回个int这种设计很失败,你返回true和false的设计就很优良,但是你还好,这个方法返回的就是两种情况,有没有可能说你这个方法执行结束的结果是有三种情况,或者四种情况,或者五种情况,那么你有的话,那你这个布尔类型在这里就显得怎么着比较无力了,我这样跟大家说啊,实际上布尔类型里边true和false就是枚举。
21:04
就是枚举的值。就是两种值。啊,什么是枚举啊,来,我们给大家演示一下啊,还是这样的程序。这个啊,我就先说到这儿,就是这个程序存在什么样的缺陷啊,设计上的缺陷。
我来说两句