{"id":6606,"date":"2024-04-22T00:11:01","date_gmt":"2024-04-22T07:11:01","guid":{"rendered":"https:\/\/zentut.com\/java-tutorial\/java-enum\/"},"modified":"2024-04-22T00:11:46","modified_gmt":"2024-04-22T07:11:46","slug":"java-enum","status":"publish","type":"page","link":"https:\/\/www.zentut.com\/java-tutorial\/java-enum\/","title":{"rendered":"Java Enum"},"content":{"rendered":"\n<p><strong>Summary<\/strong>: in this tutorial, you&#8217;ll learn about Java enum and how to use it effectively to make your code more readable and concise.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Introduction to the Java enum type<\/h2>\n\n\n\n<p>In Java, an enum (short for &#8220;enumeration&#8221;) is a special type that represents a fixed set of related constant values.<\/p>\n\n\n\n<p>To declare an enum, you use the enum keyword followed by the enum&#8217;s name, and a pair of curly braces contains its constants:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">enum<\/span> MyEnum {\n   VALUE1, VALUE2,...\n};<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>By convention, the enum&#8217;s constants are uppercase. The <code>enum<\/code> keyword denotes that it is a <strong>special type of class<\/strong> that extends the <code>java.lang.Enum<\/code> class:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/zentut.com\/wp-content\/uploads\/2024\/04\/java-enum.svg\" alt=\"\" class=\"wp-image-546\"\/><\/figure>\n\n\n\n<p>It means that <code>MyEnum<\/code> inherits all methods of the <code>Enum<\/code> class. We&#8217;ll cover some of them shortly. In addition, enums may have <a href=\"https:\/\/zentut.com\/java-tutorial\/java-enum-methods\/\">methods<\/a> and <a href=\"https:\/\/zentut.com\/java-tutorial\/java-enum-constructor\/\">constructors<\/a> like regular classes.<\/p>\n\n\n\n<p>For example, the following declares an enum that represents the days of the week:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">enum<\/span> Day {\n   SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In this example, we declare the <code>Day<\/code> enum that includes seven constants, each representing the day of the week.<\/p>\n\n\n\n<p>All constants, which you declare in an enum, are <strong>instances<\/strong> of the enum class. They are implicitly <code>static<\/code>, <code>public<\/code>, and <code>final<\/code>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>static<\/code>: You can access constants by their names via the enum name e.g., <code>Day.MONDAY<\/code>.<\/li>\n\n\n\n<li><code>public<\/code>: You can access the enum&#8217;s constants from any part of the program.<\/li>\n\n\n\n<li><code>final<\/code>: You cannot modify enum constants.<\/li>\n<\/ul>\n\n\n\n<p>For example, the following declares a variable <code>day<\/code> with the type <code>Day<\/code> enum:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\">Day day;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>It&#8217;s possible to declare and initialize a value to an enum&#8217;s variable at the same time like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\">Day day = Day.MONDAY;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Because Java can infer the type of the day variable, you can use the <a href=\"https:\/\/zentut.com\/java-tutorial\/java-var\/\">var keyword<\/a> as follows:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">var<\/span> day = DAY.MONDAY;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The following example illustrates that constants declared in an enum are instances of the enum:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\">Day day = Day.MONDAY;\n<span class=\"hljs-keyword\">boolean<\/span> result = Day.MONDAY <span class=\"hljs-keyword\">instanceof<\/span> Day;\nSystem.out.println(result); <span class=\"hljs-comment\">\/\/ true<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Comparing enum constants using == operator<\/h2>\n\n\n\n<p>For a given enum type, Java ensures that there will be a <strong>unique instance<\/strong> for each constant value in Java Virtual Machine (JVM). For example, in the <code>Day<\/code> enum, there is only one instance of the <code>Day.MONDAY<\/code> in the JVM.<\/p>\n\n\n\n<p>Because of the uniqueness of enum instances, you can safely use the <code>==<\/code> operator to check if two variables reference the same instance of the enum constant.<\/p>\n\n\n\n<p>The following example illustrates how to use the <code>==<\/code> operator to compare two enum constants:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">App<\/span> <\/span>{\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">main<\/span><span class=\"hljs-params\">(String&#91;] args)<\/span> <\/span>{\n        <span class=\"hljs-keyword\">enum<\/span> Day {\n            SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY\n        }\n        <span class=\"hljs-keyword\">var<\/span> day1 = Day.MONDAY;\n        <span class=\"hljs-keyword\">var<\/span> day2 = Day.MONDAY;\n        <span class=\"hljs-keyword\">var<\/span> day3 = Day.TUESDAY;\n\n        <span class=\"hljs-keyword\">var<\/span> result = day1 == day2;\n        System.out.println(result); <span class=\"hljs-comment\">\/\/ true<\/span>\n\n        result = day1 == day3;\n        System.out.println(result); <span class=\"hljs-comment\">\/\/ false<\/span>\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The == operator also provides compile-time and run-time safety.<\/p>\n\n\n\n<p>At compile time, the Java compiler checks if you are comparing values of incompatible types and issue an error. For example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">var<\/span> day = Day.MONDAY;\n\n<span class=\"hljs-keyword\">if<\/span> (day == <span class=\"hljs-string\">\"MONDAY\"<\/span>) { <span class=\"hljs-comment\">\/\/ error<\/span>\n    <span class=\"hljs-comment\">\/\/ ..<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In this example, we attempted to compare the enum constant with a string literal and got an error by the Java compiler.<\/p>\n\n\n\n<p>At runtime, because of the unique instances, the == operator is guaranteed to be accurate and reliable:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">var<\/span> day = Day.MONDAY;\n<span class=\"hljs-keyword\">if<\/span> (day == Day.FRIDAY) {\n    <span class=\"hljs-comment\">\/\/<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Examining enum member positions<\/h2>\n\n\n\n<p>Each constant that you declare in an enum is associated with an integer value. The integer value represents the order in which you declare the constant. The first constant is 0, the second constant is 1, and so on.<\/p>\n\n\n\n<p>To get the position of a constant, you call the <code>ordinal()<\/code> method inherited from the <code>java.lang.Enum<\/code> class.<\/p>\n\n\n\n<p>For example, the following uses the <code>ordinal()<\/code> method to get the position of the <code>SUNDAY<\/code> and <code>MONDAY<\/code> constants in the <code>Day<\/code> enum:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">App<\/span> <\/span>{\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">main<\/span><span class=\"hljs-params\">(String&#91;] args)<\/span> <\/span>{\n        <span class=\"hljs-keyword\">enum<\/span> Day {\n            SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY\n        }\n        <span class=\"hljs-keyword\">var<\/span> day = Day.SUNDAY;\n        System.out.println(day.ordinal()); <span class=\"hljs-comment\">\/\/ 0<\/span>\n\n        day = Day.MONDAY;\n        System.out.println(day.ordinal()); <span class=\"hljs-comment\">\/\/ 1<\/span>\n\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In practice, you will rarely use the <code>ordinal()<\/code> method. It is designed for use by enum-based data structures including <code>EnumSet<\/code> and <code>EnumMap<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Iterating over enum members<\/h2>\n\n\n\n<p>The Enum class provides a static method <code>values()<\/code> that returns an array containing all values of the enum in the order that is declared in the enum definition.<\/p>\n\n\n\n<p>The following example shows how to use the <code>values()<\/code> method with a <a href=\"https:\/\/zentut.com\/java-tutorial\/java-foreach\/\">foreach<\/a> statement to iterate all enum constants:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">App<\/span> <\/span>{\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">main<\/span><span class=\"hljs-params\">(String&#91;] args)<\/span> <\/span>{\n        <span class=\"hljs-keyword\">enum<\/span> Day {\n            SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY\n        }\n        Day&#91;] allDays = Day.values();\n\n        <span class=\"hljs-keyword\">for<\/span> (Day day : allDays) {\n            System.out.println(day);\n        }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Using Java enum in a switch statement &amp; expression<\/h2>\n\n\n\n<p>In practice, you often use enums with the <a href=\"https:\/\/zentut.com\/java-tutorial\/java-switch\/\">switch statement<\/a> to make your code more readable and less error-prone. For example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">App<\/span> <\/span>{\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">main<\/span><span class=\"hljs-params\">(String&#91;] args)<\/span> <\/span>{\n        <span class=\"hljs-keyword\">enum<\/span> Day {\n            SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY\n        }\n\n        Day day = Day.MONDAY;\n\n        <span class=\"hljs-keyword\">switch<\/span> (day) {\n            <span class=\"hljs-keyword\">case<\/span> MONDAY:\n            <span class=\"hljs-keyword\">case<\/span> TUESDAY:\n            <span class=\"hljs-keyword\">case<\/span> WEDNESDAY:\n            <span class=\"hljs-keyword\">case<\/span> THURSDAY:\n            <span class=\"hljs-keyword\">case<\/span> FRIDAY:\n                System.out.println(<span class=\"hljs-string\">\"It's a weekday.\"<\/span>);\n                <span class=\"hljs-keyword\">break<\/span>;\n            <span class=\"hljs-keyword\">case<\/span> SATURDAY:\n            <span class=\"hljs-keyword\">case<\/span> SUNDAY:\n                System.out.println(<span class=\"hljs-string\">\"It's a weekend.\"<\/span>);\n                <span class=\"hljs-keyword\">break<\/span>;\n        }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\">It<span class=\"hljs-string\">'s a weekday.<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>How it works.<\/p>\n\n\n\n<p>First, declare an enum variable <code>day<\/code> and initialize its value to <code>Day.MONDAY<\/code>.<\/p>\n\n\n\n<p>Second, determine whether it is a weekday or weekend by using a <code>switch<\/code> statement to compare the enum variable with the enum&#8217;s members. <\/p>\n\n\n\n<p>Starting from Java 12, you can use enums in <code>switch<\/code> expressions to make your code more concise:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">App<\/span> <\/span>{\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">main<\/span><span class=\"hljs-params\">(String&#91;] args)<\/span> <\/span>{\n        <span class=\"hljs-keyword\">enum<\/span> Day {\n            SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY\n        }\n\n        Day day = Day.MONDAY;\n\n        <span class=\"hljs-keyword\">switch<\/span> (day) {\n            <span class=\"hljs-keyword\">case<\/span> MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY -&gt; System.out.println(<span class=\"hljs-string\">\"It's a weekday.\"<\/span>);\n            <span class=\"hljs-keyword\">case<\/span> SATURDAY, SUNDAY -&gt; System.out.println(<span class=\"hljs-string\">\"It's a weekend.\"<\/span>);\n        }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Summary<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use enums when you have a fixed set of related constants.<\/li>\n\n\n\n<li>Use enums in switch statements or switch expressions to enhance code readability.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>In this tutorial, you&#8217;ll learn about Java enum and how to use it effectively to make your code more readable and concise.<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":2190,"menu_order":54,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-6606","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.zentut.com\/wp-json\/wp\/v2\/pages\/6606","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.zentut.com\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.zentut.com\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.zentut.com\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.zentut.com\/wp-json\/wp\/v2\/comments?post=6606"}],"version-history":[{"count":2,"href":"https:\/\/www.zentut.com\/wp-json\/wp\/v2\/pages\/6606\/revisions"}],"predecessor-version":[{"id":6608,"href":"https:\/\/www.zentut.com\/wp-json\/wp\/v2\/pages\/6606\/revisions\/6608"}],"up":[{"embeddable":true,"href":"https:\/\/www.zentut.com\/wp-json\/wp\/v2\/pages\/2190"}],"wp:attachment":[{"href":"https:\/\/www.zentut.com\/wp-json\/wp\/v2\/media?parent=6606"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}