09. 枚举类
枚举概述
枚举用来管理一组相关常量的集合,使用枚举可以提高程序的可读性,使代码更清晰且更易于维护。
在 Java 5 之前没有提供枚举类型,可以通过声明静态常量(final static 变量)替代枚举常量。
通常在接口中声明一组静态常量,当然也可以在一般类中声明一组静态常量。这些常量往往都是 int 类型,这是为了以后方便使用 switch 语句进行判断。
1 | public interface WeekDays { |
枚举用来管理一组相关常量的集合,使用枚举可以提高程序的可读性,使代码更清晰且更易于维护。
在 Java 5 之前没有提供枚举类型,可以通过声明静态常量(final static 变量)替代枚举常量。
通常在接口中声明一组静态常量,当然也可以在一般类中声明一组静态常量。这些常量往往都是 int 类型,这是为了以后方便使用 switch 语句进行判断。
1 | public interface WeekDays { |
在 Java 中,抽象类是一种特殊的类,它不能被直接实例化,只能被其他类继承。抽象类通常用于定义一些抽象的方法和属性,这些方法和属性可能在子类中有不同的实现。
抽象类的主要目的是提供一个公共的接口,让子类可以根据自己的需求进行扩展和实现。抽象类中的抽象方法没有具体的实现,只包含方法的签名,子类就知道它必须要实现该方法,而不可能忽略,若忽略 Java 编译器会提示错误。
在 Java 中抽象类和抽象方法的修饰符是 abstract
,注意抽象方法中只有方法的声明,没有方法的实现。
1 | public abstract class 类名称 { |
普通类加上 abstract 关键字就变成了抽象类。一但类中包含有抽象方法的类必须定义为抽象类或者接口,否则编译时会提示 The type XXX must be an abstract class to define abstract methods
比抽象类更加抽象的是接口,在接口中所有的方法都会被 public 和 abstract 修饰。
接口的定义:一般由常量和抽象方法组成
1 | [public] interface 接口名 [extends 父接口名列表 ] { |
Java 只支持类的单继承,不支持类多继承,但是支持接口的多实现。
多个类中存在相同属性和行为时,将这些内容抽取到单独一个类。定义类时直接通过 extends 关键字指明要继承的父类。
子类对象除了可以访问子类中直接定义的成员外,可直接访问父类的所有非私有成员。
出现在类的实例方法或构造方法中,this 代表所在函数所属对象的引用。用 this 作前缀可访问当前对象的实例变量或成员方法。
this.实例变量;
能加 this 则尽量加,这样代码更清晰this.成员方法;
本类成员方法的调用,能加 this 则尽量加 thisthis(参数)
用来调用同类其他构造方法。注意 this 语句只能定义在构造函数的第一行,因为初始化要先执行Java 是彻底的、纯粹的面向对象语言。面向对象是 Java 最重要的特性。本章将介绍面向对象基础知识。
特点:
相对面向过程而言,面向对象和面向过程都是一种思想
将功能封装进对象,强调具备了功能的对象。
是一种符合人们思考习惯的思想,可以将复杂的事情简单化,将程序员从执行者转换成了指挥者
面向对象的开发过程:其实就是不断的创建对象,使用对象,指挥对象做事情。
面向对象的设计过程:其实就是在管理和维护对象之间的关系。
面向对象的特征:
java.lang.Object 作为所有 Java 类的祖先,编译系统默认继承 Object 类,Object 类包含了所有 Java 类的公共属性和方法。
Object()
构造方法getClass():Class<?>
public boolean equals(Object obj)
比较两对象封装的数据是否相等;而比较运算符“==”在比较两对象变量时,只有当两个对象引用指向同一对象时才为真值。hashCode()
public String toString()
该方法返回对象的字符串描述,建议所有子类都重写此方法。如果没有覆盖toString()方法,默认的字符串是 “类名@对象的十六进制哈希码”wait()
, wait(long)
, wait(long, int)
让当前线程进入阻塞状态notify()
, notifyAll
唤醒阻塞状态的线程protected Object clone()
克隆对象protected void finalize()
该方法 Java 垃圾回收程序在删除对象前自动执行。不建议开发者直接调用哈希码(hashCode),每个 Java 对象都有哈希码(hashCode)属性,哈希码可以用来标识对象,提高对象在集合操作中的执行效率。
小技巧:为了减轻书写重复 equals 和 hashCode 代码的负担,不建议手巧,而是可借助 IDEA 自动的生成功能和一些公共的类库进行辅助工作,例如使用 google/guava: Google core libraries for Java 来做生成这两方法。