您的位置 首页 > 数码极客

javaenum实例如何分配

1.1. 代码块(了解)

什么是代码块:直接使用{}括起来的一段代码区域。

代码块里变量属于局部变量,只在自己所在区域{}内有效。

存在三种形式:

  • 局部代码块: 直接定义在方法内部的代码块,一般的,不会直接使用局部代码块的,结合if、while、for等关键字使用,表示一块代码区域。

  • 初始化代码块(构造代码块):直接定义在类中。每次创建对象的时候都会执行初始化代码块,开发中不使用初始化代码块,即使要做初始化操作,可以直接在构造器中完成即可。
  • 静态代码块:使用static修饰的初始化代码块,当该代码块的类的字节码被加载进JVM,就执行static代码块代码。在开发中,用来做加载资源、加载配置文件等操作。

分析下面代码执行顺序:

运行结果:

静态代码块...

主方法...

初始化代码块...

构造器

初始化代码块...

构造器

1.2. 内部类和匿名内部类(了解)

什么是内部类,把一个类定义在另一个类的内部,把里面的类称之为内部类,把外面的类称之为外部类。(能认识内部类即可)

内部类可以看作和字段、方法一样,是外部类的成员,而成员可以有static修饰。

  • 静态内部类:使用static修饰的内部类,那么访问内部类直接使用外部类名来访问
  • 实例内部类:没有使用static修饰的内部类,访问内部类使用外部类的对象来访问
  • 局部内部类:定义在方法中的内部类,一般不用
  • 匿名内部类:特殊的局部内部类,适合于仅使用一次使用的类

对于每个内部类来说,java编译器会生成独立.class文件。

  • 静态和实例内部类:外部类名$内部类名字
  • 局部内部类:外部类名$数字内部类名称
  • 匿名内部类:外部类名$数字

1.2.1. 匿名内部类(重点掌握)

在多态USB的案例中,当新增一种USB规范的设备,此时需要单独使用一个文件来定义一个新的类。

比如,新增一个USB规范的打印机设备。

把打印机安装在主板上。

如果这一个Print类只需要使用一次的话,就完全没有必要单独定义一个Java文件,直接使用匿名内部类来完成。

匿名内部类,可以使用父类构造器和接口名来完成。

针对类,定义匿名内部类来继承父类(使用较少):

new 父类构造器([实参列表]){

//匿名内部类的类体部分

}

针对接口,定义匿名内部类来实现接口(使用较多):

new 接口名称(){

//匿名内部类的类体部分

}

注意:这里不是根据接口创建对象,而是一种语法而已。

其实匿名内部类,底层依然还是创建了一份字节码文件USBDemo$1,其反编译代码为:

1.3. 枚举类(掌握)

1.3.1. 枚举的诞生历史(了解)

在服装行业,衣服的分类根据性别可以表示为三种情况:男装、女装、中性服装。

需求:定义一个变量来表示服装的分类?请问该变量的类型使用什么?

使用int和String类型,且先假设使用int类型,因为分类情况是固定的,为了防止调用者乱创建类型,可以把三种情况使用常量来表示。

注意:常量使用final修饰,并且使用大小字面组成,如果是多个单词组成,使用下划线分割。

此时调用setType方法传递的值应该是ClothType类中三个常量之一。但是此时依然存在一个问题——依然可以乱传入参数比如100,此时就不合理了。

同理如果使用String类型,还是可以乱设置数据。那么说明使用int或String是类型不安全的。那么如果使用对象来表示三种情况呢?

此时调用setType确实只能传入ClothType类型的对象,但是依然不安全,为什么?因为调用者可以自行创建一个ClothType对象,如:setType(new ClothType)。

此时为了防止调用者私自创建出新的对象,我们把CLothType的构造器私有化起来,外界就访问不了了,此时调用setType方法只能传入ClothType类中的三个常量。此时代码变成:

高,实在是高!就是代码复杂了点,如果存在定义这种类型安全的且对象数量固定的类的语法,再简单点就更好了——有枚举类。

1.3.2. 枚举类的定义和使用(掌握)

枚举是一种特殊的类,固定的一个类只能有哪些对象,定义格式:

public Enum 枚举类名{

常量对象A, 常量对象B, 常量对象C ;

}

我们自定义的枚举类在底层都是直接继承了java.lang.Enum类的。

public enum ClothType {

MEN, WOMEN, NEUTRAL;

}

枚举中都是全局公共的静态常量,可以直接使用枚举类名调用。

ClothType type = Clo;

因为java.lang.Enum类是所有枚举类的父类,所以所有的枚举对象可以调用Enum类中的方法.

String name = 枚举对象.name(); // 返回枚举对象的常量名称

int ordinal = 枚举对象.ordinal(); // 返回枚举对象的序号,从0开始

注意:枚举类不能使用创建对象

目前,会定义枚举类和基本使用就可以了,后面还会讲更高级的使用方式。

本系列教程为叩丁狼Java基础班内部教材,若要获得最好的学习效果,需要配合对应教学视频一起学习。需要完整教学视频,请私信作者。

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“javaenum实例如何分配,javaenum使用实例”边界阅读