《Java-SE-第三十六章》之枚舉

前言

在你立足處深挖下去,就會有泉水涌出!別管蒙昧者們叫嚷:“下邊永遠是地獄!”

博客主頁:KC老衲愛尼姑的博客主頁

博主的github,平常所寫代碼皆在于此

共勉:talk is cheap, show me the code

作者是爪哇島的新手,水平很有限,如果發現錯誤,一定要及時告知作者哦!感謝感謝!


文章目錄

  • 枚舉
    • 概述
    • 基本使用
      • 枚舉和switch
      • 向enum類中添加方法與自定義構造函數
      • 枚舉類不能進行反射的原因
      • 單例模式


枚舉

概述

枚舉類型是Java5以后引用的新特性,它是一種特殊的數據類型,之所以特殊是因為它既是一種類類型但是又比類類型多了一些特殊的約束。其主要的用途是:將一組常量組織起來。在此之前表示一組常量通常是使用定義常量的方式:

public class CoolDemo {public static  final int RED = 1;public static  final int GREEN = 2;public static  final int BLACK = 3;
}

但是常量舉例有不好的地方,比如:可能存在定義int值相同的變量,但是它有可能被誤以為是RED,編譯器也不會有任何警告,因此這種方式在枚舉出現后就不提倡了,我們利用枚舉類型來重新定義上述的常量。

public enum CoolType {RED,BLACK,GREEN
}

在定義枚舉類型的時我們使用的關鍵字是enum,enum是定義枚舉類型。枚舉類型Cool分別定義了紅色,黑色,綠色。這些值一般都是大寫字母,多個值之間用逗號隔開。那么如何使用呢?如下

public class Demo {public static void main(String[] args) {CoolType black = CoolType.BLACK;}
}

我們使用enum關鍵字定義的枚舉類,本質上是java.lang.Enum的子類。雖然自己編寫的枚舉類,沒有顯示的繼承Enum,但是它默認繼承和這個類。

基本使用

枚舉和switch

使用swtich進行條件判斷的時候,條件參數一般只能是整型,字符型。而枚舉類型也被switch所支持,字符串在java1.7后也被switch所支持。接下來,我們簡單看一下枚舉和switch的使用:

public class EnumDemo4 {public static void printName(ColorType color){switch (color){//無需使用Color進行引用case RED:System.out.println("藍色");break;case BLACK:System.out.println("紅色");break;case GREEN:System.out.println("綠色");break;}}public static void main(String[] args){printName(ColorType.RED);printName(ColorType.BLACK);printName(ColorType.GREEN);}
}

向enum類中添加方法與自定義構造函數

public enum CoolType {RED("紅色", 1),BLACK("黑色", 2),GREEN("綠色", 3);private String color;private int key;CoolType(String color, int key) {this.color = color;this.key = key;}public String getColor() {return color;}public int getKey() {return key;}public static void main(String[] args) {for (CoolType c: CoolType.values()) {System.out.println("color:"+c.color+"key:"+c.key);}}
}

運行結果 :

color:紅色key:1
color:黑色key:2
color:綠色key:3

Process finished with exit code 0

枚舉類不能進行反射的原因

我們來看看構造方法源碼

	@CallerSensitivepublic T newInstance(Object ... initargs)throws InstantiationException, IllegalAccessException,IllegalArgumentException, InvocationTargetException{if (!override) {//這就是判斷如果是枚舉類型那么就只接拋出異常了, 也就不能進行構造了if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) {Class<?> caller = Reflection.getCallerClass();checkAccess(caller, clazz, null, modifiers);}}if ((clazz.getModifiers() & Modifier.ENUM) != 0)throw new IllegalArgumentException("Cannot reflectively create enum objects");ConstructorAccessor ca = constructorAccessor;   // read volatileif (ca == null) {ca = acquireConstructorAccessor();}@SuppressWarnings("unchecked")T inst = (T) ca.newInstance(initargs);return inst;}

其中有一段代碼

if ((clazz.getModifiers() & Modifier.ENUM) != 0)

這就是判斷如果是枚舉類型那么就只接拋出異常了, 也就不能進行構造了。

單例模式

public enum Singleton {INSTANCE;public static Singleton getInstance() {return INSTANCE;}public static void main(String[] args) {Singleton singleto1 = Singleton.getInstance();Singleton singleto2 = Singleton.getInstance();System.out.println("兩個實例是否相同:"+(singleto1==singleto2));}
}

各位看官如果覺得文章寫得不錯,點贊評論關注走一波!謝謝啦!。

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/35536.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35536.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35536.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux 日志管理

Linux 日志管理 一.Linux 下的日志服務簡介 1.1 CentOS5 之前的版本 centos5 之前的版本使用系統和內核日志分離的格式記錄日志 syslogd:該服務專門用于記錄系統日志(system application logs) klogd: 該服務專門用于記錄內核日志(linux kernel logs) centos5 之前事件的記錄格…

Redis_Geospatial(基于位置信息的應用)

12.Geospatial 12.1 簡介 基于位置信息服務(Location-Based Service,LBS)的應用。Redis3.2版本后增加了對GEO類型的支持。主要來維護元素的經緯度。redis基于這種類型&#xff0c;提供了經緯度設置、查詢、范圍查詢、距離查詢、經緯度hash等一些相關操作 12.2 GEO底層結構 …

war和war exploded

war和war exploded的區別 war模式&#xff1a;將WEB工程以包的形式上傳到服務器 &#xff1b; war exploded模式&#xff1a;將WEB工程以當前文件夾的位置關系上傳到服務器&#xff1b;>> war包是自己打包生成的&#xff0c;如pom文件中<packaging>war</packag…

使用 Visual Studio Code 調試 CMake 腳本

之前被引入到 Visual Studio 中的 CMake 調試器&#xff0c;現已在 Visual Studio Code 中可用。 也就是說&#xff0c;現在你可以通過在 VS Code 中安裝 CMake 工具擴展&#xff0c;來調試你的 CMakeLists.txt 腳本了。是不是很棒? 背景知識 Visual C 開發團隊和 CMake 的維…

Flutter源碼分析筆記:Widget類源碼分析

Flutter源碼分析筆記 Widget類源碼分析 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at: https://jclee95.blog.csdn.netEmail: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/article/details/132259681 【介紹】&#x…

TestNG和Junit5測試框架梳理

一、testNG 1. testNG優勢 注解驅動&#xff1a; TestNG 使用注解來標識測試方法、測試類和配置方法&#xff0c;使得測試更具可讀性。 并行執行&#xff1a; TestNG 支持多線程并行執行測試&#xff0c;可以加速測試套件的執行。 豐富的配置&#xff1a; 可以通過 XML 配置文…

Qt下載安裝及配置教程

進入qt中文網站&#xff1a;https://www.qt.io/zh-cn/ 下載開源版 往下滑&#xff0c;下載Qt在線安裝程序 它已經檢測出我的是windows系統&#xff0c;直接點擊download就好。如果是其它的系統&#xff0c;需要找到對應自己系統的安裝包。 然后跟網速有關&#xff0c;等…

Gitlab CI/CD筆記-第三天-使用主機docker in docker 進行構建并push鏡像。

一、啥叫docker in docker 就是允許的鏡像里頭有一個docker,但這個docekr鏡像只有docker的cli和/var/lib/docker.sock的套接字&#xff0c;沒有允許build.然后里頭又運行了一個docker&#xff0c;這個docker有build的能力&#xff0c;此時構建時就是里頭的docker使用外部的dock…

登錄驗證碼實現

Hutool代碼改造 Hutool 有參考文檔&#xff1b;很多工具類&#xff1b;把一些功能都封裝好&#xff1b;都不用你自己去寫&#xff1b;直接調用它的工具類 它這里會詳細告訴你引入方式Hutool <dependency><groupId>cn.hutool</groupId><artifactId>hu…

STM32F429IGT6使用CubeMX配置SPI通信(W25Q256芯片)

1、硬件電路 需要系統性的看一下W25Q256芯片手冊 2、設置RCC&#xff0c;選擇高速外部時鐘HSE,時鐘設置為180MHz 3、配置SPI 4、生成工程配置 5、相關代碼 #define sFLASH_ID 0XEF4019 // W25Q256#define SPI_FLASH_PageSize 256 #define SPI_FLASH_PerWritePageSize 256#def…

《雷達像智能識別對抗研究進展》閱讀記錄

&#xff08;1&#xff09;引言 ? 神經網絡通常存在魯棒性缺陷&#xff0c;易受到對抗攻擊的威脅。攻擊者可以隱蔽的誘導雷達智能目標識別做出錯誤預測&#xff0c;如&#xff1a; ? a圖是自行車&#xff0c;加上對抗擾動后神經網絡就會將其識別為挖掘機。 &#xff08;2&a…

【Quarkus技術系列】打造基于Quarkus的云原生微服務框架實踐(1)

前提介紹 本系列文章主要講解如何基于Quarkus技術搭建和開發"專為Kubernetes而優化的Java微服務框架"的入門和實踐&#xff0c;你將會學習到如何搭建Quarkus微服務腳環境及腳手架&#xff0c;開發Quarkus的端點服務&#xff0c;系統和應用層級的配置介紹與Quarkus的…

單芯片3路CC管理的VR轉接器解決方案

VR眼鏡即VR頭顯&#xff0c;也稱虛擬現實頭戴式顯示設備&#xff0c;隨著元宇宙概念的傳播&#xff0c;VR眼鏡的熱度一直只增不減&#xff0c;但是頭戴設備的續航一直被人詬病&#xff0c;如果增大電池就會讓頭顯變得笨重影響體驗&#xff0c;所以目前最佳的解決方案還是使用VR…

C# BeginInvoke 加 EndInvoke實現異步操作

1、定義一個委托 delegate long MyDel(int first, int second); 2、 需異步操作的函數 static int sum(int x,int y) {Console.WriteLine("InSide Sum1");Thread.Sleep(1000);Console.WriteLine("InSide Sum2");return x y;} 3、回調方法…

[HDLBits] Exams/m2014 q3

Consider the function f shown in the Karnaugh map below. Implement this function. d is dont-care, which means you may choose to output whatever value is convenient. //empty

gitui 解決 git error:Bad credentials.

問題描述 cat .git/config """ [remote "origin"]url gitgitcode.net:xxx.gitfetch refs/heads/*:refs/remotes/origin/* """ls -lh ~/.ssh/ """ -rw------- 1 z z 2.6K 8月 12 15:04 id_rsa -rw-r--r-- 1 z z 56…

學習左耳聽風欄目90天——第六天 6/90(學習左耳朵耗子的工匠精神,對技術的熱愛)【如何擁有技術領導力】

學習左耳聽風欄目90天——第六天 6/90&#xff08;學習左耳朵耗子的工匠精神&#xff0c;對技術的熱愛&#xff09;【如何擁有技術領導力】

【第358場周賽】限制條件下元素之間的最小絕對差,Java解密。

LeetCode 第358場周賽 恒生專場。 文章目錄 劍指Offer:限制條件下元素之間的最小絕對差示例:限制:解題思路:劍指Offer:限制條件下元素之間的最小絕對差 【題目描述】 給你一個下標從 0 開始的整數數組 nums 和一個整數 x 。 請你找到數組中下標距離至少為 x 的兩個元素的…

虛擬機內搭建CTFd平臺搭建及CTF題庫部署,局域網內機器可以訪問

一、虛擬機環境搭建 1、安裝docker、git、docker-compose ubuntu&#xff1a; sudo apt-get update #更新系統 sudo apt-get -y install docker.io #安裝docker sudo apt-get -y install git #安裝git sudo apt-get -y install python3-pip #安裝pip3 sudo pip install dock…