Java: Kiểu liệt kê


Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên

Một kiểu enum là một kiểu dữ liệu đặc biệt cho phép cho một biến là một tập hợp các hằng số được xác định trước. Các biến phải bằng một trong những giá trị đã được xác định trước cho nó. Ví dụ thường gặp bao gồm hướng la bàn (giá trị của NORTH, SOUTH, EAST và WEST) và các ngày trong tuần.

Bởi vì họ là hằng số, tên của các trường một kiểu enum của những chữ viết hoa.

Trong ngôn ngữ lập trình Java, bạn định nghĩa một kiểu enum bằng enum từ khóa. Ví dụ, bạn sẽ xác định một kiểu enum ngày-of-the-tuần như:

enum công Day { 
    chủ nhật, thứ hai, thứ ba, thứ tư, 
    thứ năm, thứ sáu, thứ bảy 
}

Bạn nên sử dụng các loại enum bất cứ lúc nào bạn cần phải đại diện cho một tập cố định các hằng số. Điều đó bao gồm các loại enum tự nhiên như các hành tinh trong hệ thống và dữ liệu bộ năng lượng mặt trời của chúng tôi, nơi bạn biết tất cả các giá trị có thể tại thời gian biên dịch cho ví dụ, các lựa chọn trên menu, cờ dòng lệnh, và như vậy.

Dưới đây là một số code đó cho bạn thấy làm thế nào để sử dụng ngày enum định nghĩa ở trên:

public class EnumTest { 
    ngày ngày; 
    
    EnumTest công cộng (ngày ngày) { 
        this.day = ngày; 
    } 
    
    public void tellItLikeItIs () { 
        switch (ngày) { 
            Trường hợp thứ hai: 
                System.out.println ( ". Thứ hai là xấu"); 
                nghỉ ; 
                    
            trường hợp thứ sáu: 
                System.out.println ( ". Sáu là tốt hơn"); 
                break; 
                         
            trường hợp thứ bảy: trường hợp Chủ Nhật: 
                System.out.println ( "những ngày nghỉ là tốt nhất."); 
                break; 
                        
            default: 
                System.out.println ( "những ngày giữa tuần là cái như vậy."); 
                break; 
        } 
    } 
    
    public static void main (string [] args) { 
        EnumTest firstDay = new EnumTest (Day.MONDAY); 
        firstDay.tellItLikeItIs (); 
        EnumTest thirdDay = new EnumTest (ngày .WEDNESDAY); 
        thirdDay.tellItLikeItIs (); 
        EnumTest fifthDay = new EnumTest (Day.FRIDAY); 
        fifthDay.tellItLikeItIs (); 
        EnumTest sixthDay = new EnumTest (Day.SATURDAY); 
        sixthDay.tellItLikeItIs (); 
        EnumTest seventhDay = new EnumTest ( Day.SUNDAY); 
        seventhDay.tellItLikeItIs (); 
    } 
}

Đầu ra là:

Thứ Hai là xấu. 
Ngày giữa tuần là cái như vậy. 
Thứ Sáu được tốt hơn. 
Những ngày nghỉ là tốt nhất. 
Những ngày nghỉ là tốt nhất.

Java loại ngôn ngữ lập trình enum là mạnh hơn rất nhiều so với các đối tác của họ trong các ngôn ngữ khác. Các enum khai định nghĩa một lớp (gọi là một kiểu enum ). Cơ thể lớp enum có thể bao gồm các phương pháp và các lĩnh vực khác. Trình biên dịch sẽ tự động thêm một số phương pháp đặc biệt khi nó tạo ra một enum. Ví dụ, họ có một tĩnh giá trị phương thức trả về một mảng chứa tất cả các giá trị của các enum trong thứ tự mà chúng được khai báo. Phương pháp này thường được sử dụng kết hợp với cho-mỗi cấu trúc để lặp qua các giá trị của một kiểu enum. Ví dụ, mã này từ Planet lớp ví dụ dưới đây lặp trên tất cả các hành tinh trong hệ mặt trời.

cho (Planet p: Planet.values ​​()) { 
    System.out.printf ( "trọng lượng của bạn trên% s là% f% n", 
                      p, p.surfaceWeight (khối lượng)); 
}

Lưu ý:  Tất cả các enums ngầm mở rộng java.lang.Enum . Bởi vì một lớp chỉ có thể kéo dài một phụ huynh (xemTuyên bố Classes ), ngôn ngữ Java không hỗ trợ đa kế thừa của nhà nước (xem Nhiều thừa kế của Nhà nước, thực hiện, và Type ), và do đó một enum không thể mở rộng bất cứ điều gì khác.

Trong ví dụ sau, Planet là một kiểu enum đại diện các hành tinh trong hệ mặt trời. Chúng được định nghĩa với khối lượng và bán kính tính liên tục.

Mỗi liên tục enum được khai báo với giá trị cho các thông số khối lượng và bán kính. Những giá trị này được truyền cho constructor khi liên tục được tạo ra. Java đòi hỏi rằng các hằng số được xác định đầu tiên, trước khi bất kỳ lĩnh vực hoặc các phương pháp.Ngoài ra, khi có những lĩnh vực và phương pháp, danh sách các hằng số enum phải kết thúc bằng dấu chấm phẩy.


Lưu ý:  Các nhà xây dựng cho một kiểu enum phải gói riêng hoặc phòng riêng. Nó tự động tạo ra các hằng số được định nghĩa ở phần đầu của cơ thể enum. Bạn không thể gọi một enum xây dựng cho mình.

Ngoài tài sản và xây dựng của nó, Planet có phương pháp cho phép bạn lấy lại trọng lực bề mặt và trọng lượng của một đối tượng trên mỗi hành tinh. Dưới đây là một chương trình mẫu mà mất trọng lượng của bạn trên trái đất (trong bất kỳ đơn vị) và tính toán và in trọng lượng của bạn trên tất cả các hành tinh (trong cùng đơn vị):

enum công Planet { 
    MERCURY (3.303e + 23, 2.4397e6), 
    VENUS (4.869e + 24, 6.0518e6), 
    EARTH (5.976e + 24, 6.37814e6), 
    MARS (6.421e + 23, 3.3972e6), 
    JUPITER ( 1.9e + 27, 7.1492e7), 
    Sao Thổ (5.688e + 26, 6.0268e7), 
    Sao Thiên Vương (8.686e + 25, 2.5559e7), 
    NEPTUNE (1.024e + 26, 2.4746e7); 

    tin cuối cùng đôi khối lượng; // Trong kg 
    tin cuối cùng đôi bán kính; // Trong mét 
    Planet (khối lượng gấp đôi, bán kính gấp đôi) { 
        this.mass = khối lượng; 
        this.radius = bán kính; 
    } 
    tin đôi khối lượng () {return tin đại chúng; } 
    Đôi bán kính nhân () {return bán kính; } 

    // Hằng số hấp dẫn phổ quát (m3 kg-1 s-2) 
    công tĩnh cuối cùng đôi G = 6.67300E-11; 

    surfaceGravity đôi () { 
        trở lại G * khối lượng / (bán kính * bán kính); 
    } 
    surfaceWeight đôi (double otherMass) { 
        trở otherMass * surfaceGravity (); 
    } 
    public static void main (string [] args) { 
        if (args.length = 1) { 
            System.err.println ( "Cách sử dụng: java Planet <earth_weight>"); 
            System.exit ( -1); 
        } 
        đôi earthWeight = Double.parseDouble (args [0]); 
        khối lượng gấp đôi = earthWeight / EARTH.surfaceGravity (); 
        for (Planet p: Planet.values ​​()) 
           System.out.printf ( "trọng lượng của bạn trên % s là% f% n ", 
                             p, p.surfaceWeight (khối lượng)); 
    } 
}

Nếu bạn chạy Planet.class từ dòng lệnh với một đối số của 175, bạn sẽ có được kết quả này:

$ Java Planet 175 
Cân nặng của bạn trên MERCURY là 66,107583 
trọng lượng của bạn trên VENUS là 158,374842 
trọng lượng của bạn trên EARTH là 175,000000 
trọng lượng của bạn trên MARS là 66,279007 
trọng lượng của bạn trên JUPITER là 442,847567 
trọng lượng của bạn trên SATURN là 186,552719 
trọng lượng của bạn trên sao Thiên Vương là 158,397260 
trọng lượng của bạn trên NEPTUNE là 199.207413
» Tiếp: Lớp lồng nhau (Nested Classes)
« Trước: Bài tập phần Abstract Class & Interface
Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên
Copied !!!