文章目錄
- 一、前言
- 二、自定義列舉類方式(2種)
- 方式一:JDK5.0之前,自定義列舉類
- 方式二:JDK5.0,使用enum關鍵字
- 三、Enum類中的主要方法
- 四、使用enum關鍵字定義列舉類實作介面的情況
- 情況一:實作介面,在enum類中實作抽象方法
- 情況二:讓列舉類的物件分別實作介面中的抽象方法
一、前言
這篇技術博客是我復習尚硅谷JavaSE教程做的筆記總結,方便大家的學習同時也方便自己,博客內容非復制粘貼,純手寫,如果對你有幫助,歡迎點贊評論收藏!
二、自定義列舉類方式(2種)
列舉類的理解:類的物件只有有限個,確定的,我們稱此類為列舉類
當需要定義一組常量時,強烈建議使用列舉類
如果列舉類中只有一個物件,則可以作為單例模式的實作方式
方式一:JDK5.0之前,自定義列舉類
代碼展示:
/**
* 列舉類的屬性
* 1.列舉類物件的屬性不應允許被改動, 所以應該使用 private final 修飾
* 2.列舉類的使用 private final 修飾的屬性應該在構造器中為其賦值
* 3.若列舉類顯式的定義了帶引數的構造器, 則在列出列舉值時也必須對應的傳入引數
*
* 注意點:
* 1. 私有化類的構造器,保證不能在類的外部創建其物件
* 2. 在類的內部創建列舉類的實體,宣告為:public static final
* 3. 物件如果有實體變數,應該宣告為private final,并在構造器中初始化
*/
public class SeasonTest {
public static void main(String[] args) {
Season spring = Season.SPRING;
System.out.println(spring);
}
}
//自定義列舉類
class Season{
//1.宣告Season物件的屬性:private final修飾
private final String seasonName;
private final String seasonDesc;
//2.私有化類的構造器
private Season(String seasonName,String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//3.提供當前列舉類的多個物件:public static final的
public static final Season SPRING = new Season("春天","春暖花開");
public static final Season SUMMER = new Season("夏天","夏日炎炎");
public static final Season AUTUMN = new Season("秋天","秋高氣爽");
public static final Season WINTER = new Season("冬天","冰天雪地");
//4.其他訴求1:獲取列舉類物件的屬性
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
//5.其他訴求2:提供toString()
@Override
public String toString() {
return "Season{" +
"seasonName='" + seasonName + '\'' +
", seasonDesc='" + seasonDesc + '\'' +
'}';
}
}
方式二:JDK5.0,使用enum關鍵字
使用說明:
- 使用 enum 定義的列舉類默認繼承了 java.lang.Enum類,因此不能再繼承其他類
- 列舉類的構造器只能使用 private 權限修飾符
- 列舉類的所有實體必須在列舉類中顯式列出(, 分隔 ; 結尾),列出的實體系統會自動添加 public static final 修飾
- 必須在列舉類的第一行宣告列舉類物件
/**
* 使用enum關鍵字定義列舉類
* 說明:定義的列舉類默認繼承于java.lang.Enum類,
* 所以toString方法不會列印地址值
*/
public class SeasonTest1 {
public static void main(String[] args) {
Season1 summer = Season1.SUMMER;
System.out.println(summer); //SUMMER
}
}
//使用enum關鍵字定義列舉類
enum Season1{
//1.提供當前列舉類的物件,多個物件之間有逗號隔開,末尾物件分號結束
SPRING("春天","春暖花開"),
SUMMER("夏天","夏日炎炎"),
AUTUMN("秋天","秋高氣爽"),
WINTER("冬天","冰天雪地");
//2.宣告Season物件的屬性:private final修飾
private final String seasonName;
private final String seasonDesc;
//3.私有化類的構造器
private Season1(String seasonName,String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//4.其他訴求1:獲取列舉類物件的屬性
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
}
三、Enum類中的主要方法
Enum類中的方法有很多:

我們今天講解主要方法的使用,不全部講述
1. values()方法:回傳列舉型別的物件陣列,該方法可以很方便地遍歷所有的
列舉值,
2. valueOf(String str):可以把一個字串轉為對應的列舉類物件,要求字符
串必須是列舉類物件的“名字”,如不是,會有運行時例外:IllegalArgumentException,
3. toString():回傳當前列舉類物件常量的名稱
代碼展示:
public class SeasonTest1 {
public static void main(String[] args) {
Season1 summer = Season1.SUMMER;
//toString()
System.out.println(summer.toString()); //SUMMER
//values()
Season1[] values = Season1.values();
for (int i = 0; i < values.length; i++) {
System.out.println(values[i]);
}
//valueOf(String objName):回傳列舉類中物件名是objName的物件
Season1 winter = Season1.valueOf("WINTER");
System.out.println(winter); //WINTER
//Season1 winter = Season1.valueOf("WINTER1");
//如果objName的列舉類物件,則拋出例外:IllegalArgumentException
}
}
//使用enum關鍵字定義列舉類
enum Season1{
//1.提供當前列舉類的物件,多個物件之間有逗號隔開,末尾物件分號結束
SPRING("春天","春暖花開"),
SUMMER("夏天","夏日炎炎"),
AUTUMN("秋天","秋高氣爽"),
WINTER("冬天","冰天雪地");
//2.宣告Season物件的屬性:private final修飾
private final String seasonName;
private final String seasonDesc;
//3.私有化類的構造器
private Season1(String seasonName,String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//4.其他訴求1:獲取列舉類物件的屬性
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
}
四、使用enum關鍵字定義列舉類實作介面的情況
情況一:實作介面,在enum類中實作抽象方法
代碼展示:
/**
* 情況一:實作介面,在enum類中實作抽象方法
*/
public class SeasonTest1 {
public static void main(String[] args) {
Season1 summer = Season1.SUMMER;
summer.show();
}
}
//定義介面
interface Info{
void show();
}
//使用enum關鍵字定義列舉類
enum Season1 implements Info{
//1.提供當前列舉類的物件,多個物件之間有逗號隔開,末尾物件分號結束
SPRING("春天","春暖花開"),
SUMMER("夏天","夏日炎炎"),
AUTUMN("秋天","秋高氣爽"),
WINTER("冬天","冰天雪地");
//2.宣告Season物件的屬性:private final修飾
private final String seasonName;
private final String seasonDesc;
//3.私有化類的構造器
private Season1(String seasonName,String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//4.其他訴求1:獲取列舉類物件的屬性
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
//實作show()
@Override
public void show() {
System.out.println("這是一個季節");
}
}
情況二:讓列舉類的物件分別實作介面中的抽象方法
代碼展示:
/**
* 情況二:讓列舉類的物件分別實作介面中的抽象方法
*/
public class SeasonTest1 {
public static void main(String[] args) {
Season1 summer = Season1.SUMMER;
Season1[] values = Season1.values();
for (int i = 0; i < values.length; i++) {
values[i].show();
}
}
}
//定義介面
interface Info{
void show();
}
//使用enum關鍵字定義列舉類
enum Season1 implements Info{
//1.提供當前列舉類的物件,多個物件之間有逗號隔開,末尾物件分號結束
SPRING("春天","春暖花開"){
@Override
public void show() {
System.out.println("春天在哪里?");
}
},
SUMMER("夏天","夏日炎炎"){
@Override
public void show() {
System.out.println("寧夏");
}
},
AUTUMN("秋天","秋高氣爽"){
@Override
public void show() {
System.out.println("秋天不回來");
}
},
WINTER("冬天","冰天雪地"){
@Override
public void show() {
System.out.println("大約在冬季");
}
};
//2.宣告Season物件的屬性:private final修飾
private final String seasonName;
private final String seasonDesc;
//3.私有化類的構造器
private Season1(String seasonName,String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//4.其他訴求1:獲取列舉類物件的屬性
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/259453.html
標籤:java
