什么是枚举? 是列出某些有穷序列集的所有成员。 举例:表示星期的SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY就是一个枚举。 java中的枚举:为了让编译器自动检查某个值是否在枚举的集合内,产生了枚举的定义,可以用enum来定义枚举。
public class Main { public static void main(String[] args) { Weekday day = Weekday.SUN; if (day == Weekday.SAT || day == Weekday.SUN) { System.out.println("Work at home!"); } else { System.out.println("Work at office!"); } } } enum Weekday { SUN, MON, TUE, WED, THU, FRI, SAT; }枚举的比较:可以直接用‘==’来比较。也可以用equals()比较 枚举的类型:枚举定义的类型和其他class没有区别,可以说枚举(enum)定义的类型就是class。 特点:
定义的enum类型总是继承自java.lang.Enum,且无法被继承;只能定义出enum的实例,而无法通过new操作符创建enum的实例;定义的每个实例都是引用类型的唯一实例;可以将enum类型用于switch语句。枚举中的方法
name():返回常量名String s = Weekday.SUN.name(); // "SUN"ordinal():返回常量定义的顺序int n = Weekday.MON.ordinal(); // 1switch:前面说过枚举更适合用在switch语句中
public class Main { public static void main(String[] args) { Weekday day = Weekday.SUN; switch(day) { case MON: case TUE: case WED: case THU: case FRI: System.out.println("Today is " + day + ". Work at office!"); break; case SAT: case SUN: System.out.println("Today is " + day + ". Work at home!"); break; default: throw new RuntimeException("cannot process " + day); } } } enum Weekday { MON, TUE, WED, THU, FRI, SAT, SUN; }String和包装类型中有两个特点:
定义class时使用final,无法派生子类;每个字段使用final,保证创建实例后无法修改任何字段。在实际情况中也有这样的需求,因此产生了记录类,用关键字record 定义:
public record Point(int x, int y) { //在这里可以编写构造方法和普通的方法。 }实际编译之后的结果为:
public final class Point extends Record { private final int x; private final int y; public Point(int x, int y) { this.x = x; this.y = y; } public int x() { return this.x; } public int y() { return this.y; } public String toString() { return String.format("Point[x=%s, y=%s]", x, y); } public boolean equals(Object o) { ... } public int hashCode() { ... } }