以下為本人的學習筆記
1.認識列舉
-
列舉不是類,是跟類,介面同級別的型別,
-
列舉就是限制某個型別的變數的取值只能為諾干個固定值中的一個,否則編譯器就會報錯;
-
列舉可以讓編譯器在編譯時就可以控制源程式賦給的非法值,使用普通變數的方式在開發階段無法實作這一目標
-
在JDK1.5之后,使用關鍵字enum定義一種新的型別,稱為列舉型別,列舉是列舉出來,選其中的一個
-
列舉的本質是一個繼承了Enum類的子類,JVM編譯器把列舉編譯后生成一個final class
2.列舉的關鍵字和方法
關鍵字:enum ,跟class,interface類似
public class EnumDemo{
public static final int RED = 0x1;
public static final int GREEN = 0x2;
public static final int BLUE = 0x3;
//public int color;//變數,可以隨意賦值
public Color colorEnum;//Color是一個列舉型別
@Test
public void test1(){
//呼叫時用列舉型別名.物件名
colorEnum = Color.RED;
colorEnum = Color.BLUE;
colorEnum = Color.GREEN;
System.out.println(colorEnum);//輸出(字串):GREEN
//列印colorEnum實際上是列印colorEnum.name()
System.out.println(colorEnum.name());//輸出:GREEN
System.out.println(colorEnum.ordinal());//ordinal序號,編號,輸出:1
System.out.println(colorEnum.toString());//輸出:GREEN
Color[] values = Color.values();//values()獲取Color所有的值
System.out.println( Arrays.toString(values));//輸出:[ RED,GREEN,BLUE]
}
}
?
//定義一個列舉型別
public enum Color{
//讓color必須是RED ,GREEN,BLUE中的一個值
//下面三個,每一個都代表列舉的一個實體化物件,列舉型別的物件都是從列舉型別內部定義的,外部不能定義列舉物件
RED,GREEN,BLUE;
//寫上一個物件,內部自動會呼叫Enum(String name,int ordinal),此構造方法不能被外部直接呼叫,只能被其子類訪問,此構造方法為自動呼叫
}
3.集合對列舉的支持
在JDK1.5之后,對于Set和Map介面而言又增加了兩個新的子類:EnumSet(抽象類)、EnumMap兩個類(很少用)
@Test
public void test3(){
EnumSet<Color> set = EnumSet.allOf(Color.class);
for(Color c :set ){
System.out.println(c);//輸出列舉型別Color的所有實體化物件
}
//key用列舉型別元素來表示
EnumMap<Color,String> map = new EnumMap<>(Color.class);
map.put(Color.RED,"red");
map.put(Color.GREEn,"green");
map.put(Color.BLUE,"blue");
?
}
4.帶構造方法的列舉
通過物件去呼叫構造方法(但很少使用)
public enum Color{
//列舉物件后面沒有加括號,表示呼叫無參構造方法
//列舉物件后面有加括號,表示呼叫有參構造方法
RED(10),GREEN(20),BLUE;
//可以定義屬性
private int color;
private Color(){
System.out.println("無參構造器");
?
}
private Color(int color){
this.color = color;
System.out.println("有參構造器");
}
}
@Test
public void test4(){
System.out.println(Color.RED);//第一次使用列舉,列舉內部的三個物件的構造方法都會被呼叫
?
}
5.讓列舉實作介面
public interface Info{
public int getColor();
}
public enum Color implements Info{
RED(10),GREEN(20),BLUE;
private int color;
private Color(){
System.out.println("無參構造器");
}
private Color(int color){
this.color = color;
System.out.println("有參構造器");
}
public int getColor(){
return color;
}
}
public void test5(){
System.out.println(Color.RED.getColor());
}
6.在列舉中定義抽象方法
public enum Color{
RED{
@Override
publci String getColor2(){
return "red";
}
},GREEN{
@Override
publci String getColor2(){
return "green";
}
},BLUE{
@Override
publci String getColor2(){
return "blue";
}
};
public abstract String getColor2();
}
使用列舉實作單例設計模式
public enum Singleton{
SINGLETON;
publci void method(){
System.out.println("method");
}
?
}
//使用列舉實作單例設計模式
@Test
public void test5(){
Singleton.SINGLETON.method();
}
最后,列舉更符合我們設計的要求,但是列舉總歸是一種型別,因此它占用的記憶體空間會更大一些,
所以如果記憶體空間滿足要求的話會用列舉,不然一般建議使用常量,而且使用常量的效率會更快一些,
■免責申明
⒈ 本站是純粹個人學習網站,與朋友交流共賞,不存在任何商業目的,
⒉ 本站利用了部分網路資源,著作權歸原作者及網站所有,如果您對本站所載文章及作品著作權的歸屬存有異議,請立即通知我們,我們將在第一時間予以洗掉,同時向你表示歉意!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/522893.html
標籤:其他
