Javaの列挙(列挙型)

まず、列挙

  1.概要

    列挙:JDK1.5は1つのアウトによって網羅リスト1と同様に、導入

    Javaの列挙:タイプのオブジェクトは、すべて記載されています

  2、アプリケーション

    列挙型は、どのような状況下で使用され、?

    オブジェクトが固定されており、限られた数のタイプであるとき、あなたは列挙型を使用するように選択することができます。

    システム全体の動作中、およびこれらのオブジェクトのみ。

    たとえば、次のように性別クラス:2つのだけのオブジェクト:男性、女性

        シーズンクラス:春、夏、秋と冬:4つのオブジェクトがあります。

第二には、JDK1.5の前に、列挙の効果を達成するために

  1、コンストラクタを民営化する必要があります。

      目的:このクラスのうち、あなたはランダムなオブジェクトを作成することはできません。

  このクラスでは2、使用する他の人のために作成されたオブジェクトの先駆け

      デモ:

1  パブリック クラスTestEnum {
 2      公共 静的 ボイドメイン(文字列[]引数){
 3。         // 性別新しい新しいG1 =性別();コンストラクタ民営化、使用することができない
4。         
5。          性別NAN1 = Gender.NAN;
 6          ジェンダーNAN2 = ジェンダー。 NANから;
 7。          のSystem.out.println(NAN1 == NAN2); // trueに
8。     }
 9。 }
 10  クラス性別{
 11      // 公衆:外部に直接アクセスするように
 12である     // スタティック:アクセスの使用を可能にする"クラス名"
 13です     // 決勝:調整前のこのオブジェクトは不変である
14     公共の 静的な 最終性別NANは= 新しい性別を(「男」);
15      公共の 静的な 最終性別NVは= 新しい性別を( "女" );
16      
17      プライベート文字列の記述。
18      
19      プライベート性別(文字列の記述){
 20          この .DESCRIPTION = 説明。
21      }
 22 }

 

第三に、後にJDK1.5のenum

  1.定義フォーマット

    (1)は、列挙型を宣言する

[修飾子]列挙列挙型名{
    一定のオブジェクトリスト
}

    (2)列挙型を宣言2

[修飾子]列挙列挙型名{
	一定のオブジェクトリスト;
	リストの他のメンバー
}

             説明:バックの他のメンバーがある一定のオブジェクトリスト場合は、リストの背後にある一定のオブジェクトに追加する必要があり、セグメンテーションを。

  2.列挙

    (1)は、列挙型であり、その目的は、一定のオブジェクトの限られた数であり、特に、特殊なタイプです。

    (2)枚举类型不能继承其他类型,因为枚举类型有一个隐含的父类

       java.lang.Enum 是所有 Java 语言枚举类型的公共基本类。

  3、常用方法

    (1)构造方法

        Enum 类中有一个唯一的构造器

protected  Enum(String name, int ordinal) 

         这个构造器不是程序员手动调用的,是编译器自动调用,在所有枚举类型的构造器的首行,并且自动传入 name 和 ordinal 的值。

        name:表示常量对象名称

        ordinal:表示常量对象的序号,其中初始常量序数为零

    (2)name() 与 ordinal() 方法

String name():返回 常量对象名称
int ordinal():返回 常量对象序数

    (3)toString() 方法

String toString():在Enum类中重写了Object类的toString方法,返回常量对象名

      自定义的枚举类型,eclipse不能自动生成 toSring 方法,但是可以手动重写。因为IDE认为,父类的 toString方法已经很完美了。

    (4)values() 与 valueof() 方法

枚举类型[] values():返回该枚举的所有枚举对象
枚举类型   valueOf(String name):根据name返回枚举对象

    Demo:

 1 public class TestEnum {
 2     public static void main(String[] args) {
 3         Season s = Season.SPRING;
 4         System.out.println(s);//自动调用toString
 5         
 6         System.out.println(s.name());
 7         System.out.println(s.ordinal());
 8         System.out.println("-----------------");
 9         
10         Season[] all = Season.values();  //获取所有枚举对象
11         for (int i = 0; i < all.length; i++) {
12             System.out.println(all[i]);
13         }
14         
15         System.out.println("-----------------");
16         Season spring = Season.valueOf("SPRING");
17         System.out.println(spring);
18     }
19 }
20 enum Season{
21     //常量对象后面没有(值)就是调用无参构造
22     //常量对象后面有(值)就是调用有参构造
23     SPRING("春暖花开"),SUMMER,FALL,WINTER;
24     
25     private String description;
26 
27     private Season() {
28         
29     }
30 
31     private Season(String description) {
32         this.description = description;
33     }
34     // 手动重写 toString() 方法
35     public String toString(){
36         return name() + ":" + description;
37     }
38     
39 }

 

四、枚举类型实现接口

       枚举实现接口要重写所有的抽象方法,所有对象可以都调用通用的重写方法,也可以调用各自重写的方法。

   Demo:

 1 public class TestEnum {
 2     public static void main(String[] args) {
 3         MyEnum a = MyEnum.A;
 4         a.test();
 5         
 6         MyEnum b = MyEnum.B;
 7         b.test();
 8     }
 9 }
10 interface MyInter{
11     void test();
12 }
13 enum MyEnum implements MyInter{
14     A{
15         @Override
16         public void test() {
17             System.out.println("aaa");
18         }
19     },B{
20         @Override
21         public void test() {
22             System.out.println("bbb");
23         }
24     }
25 }
26 enum MyEnum1 implements MyInter{
27     A,B;
28 
29     @Override
30     public void test() {
31         System.out.println("test");
32     }
33 }

 

 

 

おすすめ

転載: www.cnblogs.com/niujifei/p/11957034.html