00:00
大家好,我是海波老师,接下来我们继续来讲Java面向对象的相关语法,那么接下来啊,我们来讲Java除了类接口以外的一个特殊类型,我们称之为叫枚举,我们这里呢,把类拷贝一下来,我们写上一个,我们叫23。把这个呢,我们写成叫,那这个那呢就是我们枚举的意思了,我们点击OK,然后呢,把里面的东西啊,咱们都给它去掉,然后把这个改一下,咱们称之为叫枚举啊,把这个呢,我们去掉。我们前面啊,有class,有那个叫interface啊,那么我们这里呢,有一个叫枚举,所谓的枚举啊,它是一个特殊的类啊,枚举是一个特殊的类,那么其中它包含了一组特定的对象。而这些对象呢,一般不会改变啊,这些我们的对象它不会发生改变。所以我们也可以把这些对象呢,我们称之为常量,这是可以的啊,因为英文中枚举的翻译呢叫,所以在使用时我们使用enough作为关键字使用,所以我们说一下咱们的枚举,它使用那关键字使用,那么我们这里呢,就可以创建一下,我们写上它叫那。
01:12
好了,然后呢,就写上叫city,咱们叫城市就可以了,诶我为什么写个城市呢?因为啊,咱们的城市什么北京,上海,天津就会有很多,对不对,它就是一种特定的对象,所以呢,我们在这里呢,就写上我们叫做北京,再写个逗号,我们再写上一个上海,诶这么写就行了。哎,老师啊,你这里为什么写成大写呢?是因为我刚才说过了,我们这些对象它不会发生改变,我们一般都使用大写的标识符。就是这样的,这样的话我一看哦,他不能改我就明白了啊,一般能改的呢,我们都用小写的对吧?像咱们之前给大家讲的那些变量不都是小写的吗?诶老师呀,那你这么写完了以后怎么用呢?其实使用起来还是非常简单的,我这里写上一个city,然后点一下我们叫北京,其实就可以了,就这么简单啊,然后呢,我直接打印一下,打印以后你会发现我现在运行一下看结果啊,看一看你就会发现我们打印就是个北京,同样道理呢,我们的这个上海呢,我们也可以去打印一下,没有任何的问题啊,同学们你看看,哎,就这么简单呀,所以枚举还是非常方便的,但是这样感觉啊,有点太简单了,我如果想给这个城市增加中文的名称和它的一些国际编码怎么办?对吧,你现在写个北京,那是汉语拼音啊,我想看到的中文怎么办?所以告诉大家枚举其实也是累啊。
02:35
它也是类的话,只不过是个特殊的类,所以呢,它的什么构造方法呀,它的那些属性啊,其实我们都可以添加,也就意味着我们在这里呢,可以添加它的构造方法,我们写上叫city,然后写个括号,括号以后我在这地方,诶大家有没有发现你写完以后我们这里标红了,为什么标红,因为啊,我们这两个其实是城市的对象,也就意味着我们的枚举呢,来枚举类,它会将我们的对象放置在最前面,放置在。
03:08
最前面和后面的语法,它需要使用分号隔开。好了,那这里呢,我们就加上一个分号给它隔开就行了,然后呢,我的这个city呢,我在这个地方给它写上咱们叫做string,咱们叫做name,咱们叫城市名称,然后呢,我再给他写上一个叫做code,叫国际编码,诶我写完以后,同学们有没有发现我当前的这两个字就报错了,为什么?我告诉大家这个就是city的对象,这个也是city的对象,但是因为啊,之前是无参的构造方法,你现在呢,有参数了,它就不行了。诶老师呀,那我这里怎么给他参数呢?很简单呀,你在这个地方,我给他一个咱们叫做北京就完事了吗?他的编码呢,我就随便写了1001,然后呢,我的上海呢,我给他加个括号,我写上他,我写上上海。
04:04
然后呢,我写上1002不就完事了吗?好了,那我写完了以后,诶,你在构建两个对象的时候,那这两个参数我怎么给它接收一下呢?很简单呀,我这里写上public,我叫做string,我们就叫做name,对吧?我再来一个我们叫做code不就完事了吗?好,我写完了以后,同学们看一下,我写上叫this,点我们的code,它等于code,再来一个this.name它等于name,你这么写的话,不就等同于把我当前的城市的名称复制给这个属性,把我当前的这个国际编码给我们当前的这个属性,你看这不就行了吗?行了以后你拿到的是我这个枚举类的一个对象,那么对象有了,它的属性不就有了吗?所以点一下我们叫做name,同样道理,我的上海的点我叫code,你看都能访问好了,我运行一下看结果。运行以后你会发现北京这是我们的1001对吧,我们的上海呢是1002,你看这不都可以了吗?所以啊同学们,这个枚举啊,就是一种我们类的特殊的用法啊,这种用法呢比较特殊,所以大家稍微的看一看,记一记就可以了。枚举类啊其实也是个类,但是它底层呢,是由我们加入蓄拟机帮我们把这个类啊,它继承了一个叫in纳姆的类,大家看一下来,我们叫java.la点纳,我们有这么一个类,这个类呢就叫枚举类,这个是由我们Java虚拟机把咱们当前的加了那的这个city的这个类啊,继承了我们的它,只不过这个过程你看不见,但是是我们的加入虚拟机帮你自动完成的,所以这个你就不用管了,你知道就行了,诶,老师,那么既然枚举也是累,只不过加入虚拟机帮咱们做了一些继承相关的操作,那咱们自己可不可以实现类似的操作呢?对不对,其实是可以的,为什么呢?只要你明白它基本的使用原理的话,咱们自己写也没有问题。所以啊,咱们接下。
05:59
来给大家去协商一下,我写上class,写上咱们叫my city,好放过来,你放过来以后,你这里不就是俩对象吗?而且有相关的属性,对不对?那我把属性增加上呗,你把这两个咱们拿过来,拿过来以后呢,一个code的一个name没问题吧,然后呢,我接下来干嘛呢?我写上public,然后呢叫my city,然后放过来,放过来以后把我们的这个name和这个code,诶给它放到这边同道里,把这个值放过来不就行了吗?
06:28
还有枚举类啊,它的这个构造方法你在外面是不能使用的,什么意思啊,它的对象是我自己在内部创建的,所以这里咱们补充一下我们的枚举类,枚举类它不能创建对象,他的对象。是在内部自行创建。也就意味着我们的这种方式就等同于在创建对象了,只不过没有用new的方式,咱们的加入虚拟机自动帮你完成了对象的创建,就是这个道理,如果这个大家能明白的话,那咱们这就有问题了,为什么?因为你PA这个构造方法的话,哪不都能创建吗?所以我这都改成什么,咱们叫pro。
07:09
你把咱们当前的这个my city呢,你改成我们的,那么外面不就创建不了了吗?那如果你外面创建不了的话,你的内部就得创建对不对?所以我就写上他叫public,咱们叫做static,我叫做final,然后给他一个叫my city,我写上一个叫Beijing,然后呢,等于new,咱们叫my city。我这么写上,写完了以后,把这两个参数我传过来。好了,我写上一个括号。好,这样的话就可以了,那么可以了,之后我再写个上海不就完事了吗?好,放过来放过来,以后把上海呢,我们拷贝到这个位置就可以了。好了,我们现在呢,就把两个对象构建完毕了,大家想想我们这里为什么使用static,因为咱们刚才的枚举啊,我们是不是通过这个名称直接访问对象呢?哎,你看我们现在也可以啊,所以咱们来我叫做my city,把这个放过来,把这个呢我去掉,去掉以后你看到没有,我在上海就能用吧,访问道理我的北京它也能用,你看这不就解决了吗?还有一个我为什么用final啊,因为用final修饰的这个变量,它的值是不能改的吧,你现在想把这个北京上海你想改了,你做不到,诶不就这么回事吗?还有我们为什么大写,我说过了,我们一般常量值不能改的值,我们都用大写,你看不就这意思吗?
08:31
还有呢,就是我们刚才说过了,我们的my city能创建对象吗?创建不了吧,同学们是不是创建不了,哎,创建不了,但是我们的这些属性你该用,诶,对了,说到这儿了,同学们,我们现在想访问这个属性的话,是不是可以直接访问了,所以我们写上它叫name,我们再写上它叫点扣,是不是也可以啊?哎,你会发现我这种写法跟这种写法是不是大同小异啊,只不过呢,我们这个更加简洁一些。好了,同学们枚举类,我们就先讲到这里。
我来说两句