MySQL的聚集索引和非聚集索引
阿新 • • 發佈:2020-11-19
技術標籤:列舉類
列舉
假設我們要定義一個人類,人類中包含姓名和性別。通常會將性別定義成字串型別,效果如下:
public class Person {
private String name;
private String sex;
public Person() {
}
public Person(String name, String sex) {
this.name = name;
this.sex = sex;
}
// 省略get/set/toString方法
}
public class Demo01 {
public static void main(String[] args) {
Person p1 = new Person("張三", "男");
Person p2 = new Person("張三", "abc"); // 因為性別是字串,所以我們可以傳入任意字串
}
}
不使用列舉存在的問題:可以給性別傳入任意的字串,導致性別是非法的資料,不安全。
列舉的作用與應用場景
列舉的作用:一個方法接收的引數是固定範圍之內的時候,那麼即可使用列舉。
列舉的基本語法
列舉是一種特殊類。列舉是有固定例項個數的型別,我們可以把列舉理解成有固定個數例項的多例模式。
定義列舉的格式
enum 列舉名 {
第一行都是羅列列舉例項,這些列舉例項直接寫大寫名字即可。
}
入門案例
- 定義列舉:BOY表示男,GIRL表示女
enum Sex {
BOY, GIRL; // 男,女
}
- Perosn中的性別有String型別改為Sex列舉型別
public class Person {
private String name;
private Sex sex;
public Person() {
}
public Person(String name, Sex sex) {
this.name = name;
this.sex = sex;
}
// 省略get/set/toString方法
}
- 使用是隻能傳入列舉中的固定值
public class Demo02 {
public static void main(String[] args) {
Person p1 = new Person("張三", Sex.BOY);
Person p2 = new Person("張三", Sex.GIRL);
Person p3 = new Person("張三", "abc");
}
}
列舉的其他內容
列舉的本質是一個類,我們剛才定義的Sex列舉最終效果如下:
enum Sex {
BOY, GIRL; // 男,女
}
// 列舉的本質是一個類,我們剛才定義的Sex列舉相當於下面的類
final class SEX extends java.lang.Enum<SEX> {
public static final SEX BOY = new SEX();
public static final SEX GIRL = new SEX();
public static SEX[] values();
public static SEX valueOf(java.lang.String);
static {};
}
列舉的本質是一個類,所以列舉中還可以有成員變數,成員方法等。
public enum Sex {
BOY(18), GIRL(16);
public int age;
Sex(int age) {
this.age = age;
}
public void showAge() {
System.out.println("年齡是: " + age);
}
}
public class Demo03 {
public static void main(String[] args) {
Person p1 = new Person("張三", Sex.BOY);
Person p2 = new Person("張三", Sex.GIRL);
Sex.BOY.showAge();
Sex.GIRL.showAge();
}
}
執行效果:
列舉的應用
列舉的作用:列舉通常可以用於做資訊的分類,如性別,方向,季度等。
列舉表示性別:
public enum Sex {
MAIL, FEMAIL;
}
列舉表示方向:
public enum Orientation {
UP, RIGHT, DOWN, LEFT;
}
列舉表示季度
public enum Season {
SPRING, SUMMER, AUTUMN, WINTER;
}
列舉實現單例設計模式
- 它不僅能避免多執行緒同步問題,而且還自動支援序列化機制,防止反序列化重新建立新的物件,絕對防止多次例項化。
- 並且這種方式是Effective Java的作者Josh Bloch提倡的使用方式.
public enum Singleton {
INSTANCE;
public void whateverMethod() {
}
}