【JavaSE】枚舉和注解學習筆記

枚舉和注解

-枚舉

  • 規定多選一數據類型的解決方案-枚舉

    1. 枚舉對應英文(enumeration,簡寫 enum)
      2)枚舉是一組常量的集合。
      3)可以這里理解:枚舉屬于一種特殊的類,里面只包含一組有限的特定的對象。
  • 枚舉的兩種實現方式

    1. 自定義實現枚舉

    2. 使用enum關鍵字實現枚舉

  • 自定義類實現枚舉

    1. 不需要提供setXxx 方法,因為枚舉對象值通常為只讀.

    2. 對枚舉對象/屬性使用 final + static 共同修飾,實現底層優化

    3. 枚舉對象名通常使用全部大寫,常量的命名規范

    4. 枚舉對象根據需要,也可以有多個屬性

  • 自定義類實現枚舉小結

    • 小結:進行自定義類實現枚舉,有如下特點:

      1. 構造器私有化

      2. 本類內部創建一組對象

      3. 對外暴露對象(通過為對象添加public final static修飾符)

      4. 可以提供 get方法,但是不要提供 set

-enum枚舉類

  • enum關鍵字實現枚舉注意事項

    1. 當我們使用enum關鍵字開發一個枚舉類時,默認會繼承Enum類,而且是一個final類,用javap(反編譯 )工具可以驗證

    2. 傳統的public static final Season2 SPRING = new Season2(“春天”,“溫暖”);簡化成SPRING(“春天”,“溫暖”),這里必須知道,它調用的是哪個構造器。

    3. 如果使用無參構造器創建枚舉對象,則實參列表和小括號都可以省略

    4. 當有多個枚舉對象時,使用","間隔,最后一個分號結尾

    5. 枚舉對象必須放在枚舉類的行首

  • enum常用方法說明

    說明:使用enum關鍵字時,會隱式繼承Enum類,這樣我們就可以使用Enum類相關方法。(看以下源碼定義)

    public abstract class Enum<E extends Enum<E>>
    implements Comparable<E>, Serializable{}
    
    1. toString:Enum類已經重寫該方法,返回的是當前對象名,子類可以重寫該方法,用于返回對象的屬性信息
    2. name:可以返回當前對象名(常量名),子類中不能重寫
    3. oridnal:返回當前對象的位置號,默認從0開始
    4. values:返回當前枚舉類中所有常量
    5. valuesOf:將字符串轉換成枚舉對象,要求字符串必須為已有常量名,否則報異常
    6. compareTo:比較兩個枚舉常量,比較的就是編號
    package com.xijie.enum_;/*** 演示Enum枚舉的使用* 記錄紅綠燈顏色、時間、說明的枚舉*/
    public enum TrafficLightEnum {//枚舉對象,訪問權限是私有、類成員、常量,實現了抽象方法GREEN(30,"綠燈代表可以通行"){@Overridepublic String getAction() {return "請通行";}},YELLOW(3,"黃燈代表準備剎車") {@Overridepublic String getAction() {return "請剎車";}},RED(35,"紅燈代表禁止通行") {@Overridepublic String getAction() {return "請停車";}};//私有常量成員變量private final int durationTime;private final String info;//私有構造方法TrafficLightEnum(int durationTime, String info) {//信號燈時間this.durationTime = durationTime;this.info = info;}//get方法public int getDurationTime() {return durationTime;}public String getInfo() {return info;}//抽象方法,由枚舉對象實現public abstract String getAction();
    }
    package com.xijie.enum_;public class TrafficLightEnumTest {public static void main(String[] args) {//TrafficLightEnum枚舉類的基本使用TrafficLightEnum greenLight = TrafficLightEnum.GREEN;TrafficLightEnum greenLight2 = TrafficLightEnum.GREEN;TrafficLightEnum yellowLight = TrafficLightEnum.YELLOW;TrafficLightEnum redLight = TrafficLightEnum.RED;//比較兩個綠燈是否相同System.out.println("兩個綠燈是否相同:"+(greenLight==greenLight2));//比較紅燈和黃燈是否相同System.out.println("紅燈和黃燈是否相同:"+(redLight==yellowLight));//訪問黃燈的所有成員及自定義方法System.out.println("黃燈的名字叫:"+yellowLight.name());System.out.println("黃燈的意思是:"+yellowLight.getInfo());System.out.println("黃燈亮時應該:"+yellowLight.getAction());//enum方法演示//toString:Enum類已經重寫該方法,返回的是當前對象名,子類可以重寫該方法,用于返回對象的屬性信息System.out.println("綠燈的名字是"+greenLight.toString());System.out.println("黃燈的名字是"+yellowLight.toString());System.out.println("紅燈的名字是"+redLight.toString());//name:可以返回當前對象名(常量名),子類中不能重寫System.out.println("綠燈的常量名是"+greenLight.name());System.out.println("黃燈的常量名是"+yellowLight.name());System.out.println("紅燈的常量名是"+redLight.name());//oridnal:返回當前對象的位置號,默認從0開始System.out.println("綠燈的位置號是"+greenLight.ordinal());System.out.println("黃燈的位置號是"+yellowLight.ordinal());System.out.println("紅燈的位置號是"+redLight.ordinal());//values:返回當前枚舉類中所有常量TrafficLightEnum[] enums = TrafficLightEnum.values();for(TrafficLightEnum e:enums){System.out.println(e.name());}//valuesOf:將字符串轉換成枚舉對象,要求字符串必須為已有常量名,否則報異常String redStr="RED";TrafficLightEnum red = TrafficLightEnum.valueOf(redStr);System.out.println("字符串轉換為枚舉對象:"+red.name());//compareTo:比較兩個枚舉常量,比較的就是編號System.out.println("比較綠燈和綠燈:"+greenLight.compareTo(greenLight2));System.out.println("比較黃燈和紅燈:"+yellowLight.compareTo(redLight));System.out.println("比較紅燈和黃燈:"+redLight.compareTo(yellowLight));System.out.println("比較紅燈和綠燈:"+redLight.compareTo(greenLight));}
    }
  • 一個練習-用三種方法定義枚舉常量的別名

    package com.xijie.enum_;public enum DayOfWeekEnum {//重寫toString方法也可以返回自定義字符串MONDAY("星期一"){@Overridepublic String getChineseNameOfTheDay() {return "星期一";}@Overridepublic String toString() {return "星期一";}},TUESDAY("星期二"){@Overridepublic String getChineseNameOfTheDay() {return "星期二";}@Overridepublic String toString() {return "星期二";}},WEDNESDAY("星期三"){@Overridepublic String getChineseNameOfTheDay() {return "星期三";}@Overridepublic String toString() {return "星期三";}},THURSDAY("星期四"){@Overridepublic String getChineseNameOfTheDay() {return "星期四";}@Overridepublic String toString() {return "星期四";}},FRIDAY("星期五"){@Overridepublic String getChineseNameOfTheDay() {return "星期五";}@Overridepublic String toString() {return "星期五";}},SATURDAY("星期六"){@Overridepublic String getChineseNameOfTheDay() {return "星期六";}@Overridepublic String toString() {return "星期六";}},SUNDAY("星期天"){@Overridepublic String getChineseNameOfTheDay() {return "星期天";}@Overridepublic String toString() {return "星期天";}},;//存儲星期日期的中文名稱private final String chineseName;DayOfWeekEnum(String chineseName) {this.chineseName=chineseName;}//get方法public String getChineseName() {return chineseName;}//使用抽象方法也可以起到同樣的效果public abstract String getChineseNameOfTheDay();
    }
    

?

package com.xijie.enum_;public class DayOfWeekTest {public static void main(String[] args) {//通過獲取枚舉對象的成員方法獲取自定義星期名稱System.out.println("==所有星期的信息如下==");for (DayOfWeekEnum dayEnum : DayOfWeekEnum.values()) {System.out.println(dayEnum.getChineseName());}//通過自定義抽象方法獲取自定義星期名稱System.out.println("==所有星期的信息如下==");for (DayOfWeekEnum dayEnum : DayOfWeekEnum.values()) {System.out.println(dayEnum.getChineseNameOfTheDay());}//通過重寫的toString方法獲取自定義星期名稱System.out.println("==所有星期的信息如下==");for (DayOfWeekEnum dayEnum : DayOfWeekEnum.values()) {System.out.println(dayEnum);}}
}
  • 枚舉類的注意事項

    1.使用enum關鍵字后,就不能再繼承其他類了,因為enum會隱式繼承Enum,而Java是單繼承機制

    2.枚舉類和普通類一樣,可以實現接口,如下形式:

    enum 類名 implements 接口1, 接口2...{}

-注解

  • 注解的理解

    1. 注解(Annotation)也被稱為元數據(Metadata),用于修飾解釋包、類、方法、屬性、構造器、局部變量等數據信息。
    2. 和注釋一樣,注解不影響程序邏輯,但注解可以被編譯或運行,相當于嵌入在代碼中的補充信息。
    3. 在JavaSE中,注解的使用目的比較簡單,例如標記過時的功能,忽略警告等。在JavaEE中注解占據了更重要的角色,例如用來配置應用程序的任何切面,代替javaEE舊版中所遺留的繁冗代碼和XML配置等。
  • 基本的Annotation介紹

    使用Annotation時要在其前面增加@符號,并把該Annotation當成一個修飾符使用。用于修飾它支持的程序元素

    • 三個基本的Annotation
      1. @Override:限定某個方法,是重寫父類方法,該注解只能用于方法
      2. @Deprecated:用于表示某個程序元素(類,方法等)已經過時
      3. @SuppressWarnings:抑制編譯器警告
  • @Override簡介

    1. @Override限定某個方法是重寫了父類方法,該注解只能用于方法,不能修飾類、包、屬性等
    2. @Override注解寫在方法上方
    3. 如果沒有寫@Override,該重寫還是會重寫
    4. 如果寫了@Override注解,編譯器在編譯時就會檢查該方法是否真的重寫了父類方法,如果沒有重寫就會報錯。
    5. 在@Override的定義中,@interface表示一個注解類,和interface表示接口不一樣;@Target(ElementType.METHOD)表示該注解只能修飾方法;@Target是修飾注解的注解,是元注解。
  • @Deprecated簡介

    1. @Deprecated注解表示某個程序的元素,比如方法、類已經過時了
    2. 但是該過時的元素還是可以用的,只是不推薦使用
    3. 通過查看@Deprecated的定義,可以知道該注解可用于構造器、成員變量、局部變量、方法、包、參數、類型。
    4. @Deprecated可以用于新老元素的過渡,比如將jdk8升級到jdk11時,可以將舊的類注解,推薦使用新的類。
  • @SupressWarnings簡介

    1. 當我們不希望看到編譯器警告的時候,可以使用@SupressWarnings注解來抑制警告信息

    2. 語法:@SupressWarnings({“”}),在大括號中可以寫入希望抑制的警告信息類型的數組

    3. @SuppressWarnings 常用參數列表(JDK 8)

      參數名用途
      all抑制所有類型的警告(最寬泛的用法)。
      unchecked抑制 “未檢查的類型轉換” 警告(如泛型擦除導致的警告)。
      deprecation抑制 “使用已過時的類或方法” 警告。
      rawtypes抑制 “使用原始類型(raw type)” 警告(如 List 而非 List<String>)。
      unused抑制 “未使用的變量 / 方法 / 類” 警告。
      null抑制 “可能的空指針引用” 警告。
      serial抑制 “實現 Serializable 接口但未定義 serialVersionUID” 警告。
      finally抑制 “finally 塊無法正常完成” 警告(如 finally 中存在 return)。
      fallthrough抑制 “switch 語句缺少 break” 警告(允許 case 穿透)。
      path抑制 “類路徑或源路徑中的不存在的路徑” 警告。
      boxing抑制 “裝箱 / 拆箱操作” 警告(如 intInteger 之間的自動轉換)。
      cast抑制 “不必要的類型轉換” 警告(如 (String) obj 但 obj 已確定為 String)。
      synthetic-access抑制 “內部類的實體訪問” 警告(如內部類訪問外部類的 private 成員)。
      nls抑制 “非國際化字符串文字” 警告(如直接使用硬編碼的字符串)。
      restriction抑制 “使用不建議或禁止的引用” 警告(如使用已被 @Deprecated 標記的 API)。
    4. @SuppressWarnings寫在哪個元素上,那么它的作用范圍就是這個元素,比如寫在類上就作用于整個類,寫在方法上就作用于整個方法,寫在語句上就只作用于這個語句。

    5. @SupressWarning的源碼

      @Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
      @Retention(RetentionPolicy.SOURCE)
      public @interface SuppressWarnings {String[] value();
      }
      

-元注解

  • 元注解基本介紹

    JDK的元用于修飾其他注解

    元注解:在平時開發業務需求時很少用到,但是在開發框架時非常重要

  • 元注解的種類(使用不多,了解,不用深入研究)

    1. Retention //指定注解的作用范圍,三種:SOURCE、CLASS、RUNTIME
    2. Target //指定注解可以在哪些地方使用
    3. Documented//指定該注解是否會在javadoc中體現
    4. Inherited//子類會繼承父類注解
  • @Retention注解

    • 說明

      只能用于修飾一個Annotation定義,用于指定該Annotation可以保留多長時間。@Retention包含一個RetentionPolicy類型的成員變量,使用@Retention時必須為該value成員變量指定值

    • @Retention的三種值

      1. RetentionPolicy.SOURCE:編譯器使用后,直接丟棄這種策略的注釋
      2. RetentionPolicy.CLASS:編譯器將把注釋記錄在class文件中。當運行Java程序時,JVM不會保留注解,這是默認值。
      3. RetentionPolicy.RUNTIME:編譯器將把注釋記錄在class文件中,當運行Java程序時,JVM會保留注釋,程序可以通過反射獲取該注釋
  • @Target注解

    • 說明

      用于修飾Annotation定義,用于指定被修飾的Annotation能用于修飾哪些程序元素。@Target也包含一個名為value的成員變量

  • @Documented注解

    • 說明

      用于指定被該元Annotation修飾的Annotation類將被javadoc工具提取為文檔,即在生成文檔時,可以看到該注解。定義為Documented的注解必須設置Retention值為RUNTIME。

  • @Inherited注解

    被它修飾的Annotation將具有繼承性,如果某個類使用了被@Inherited修飾的Annotation,則其子類將自動具有該注釋

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

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

相關文章

Spark SQL進階:解鎖大數據處理的新姿勢

目錄 一、Spark SQL&#xff0c;為何進階&#xff1f; 二、進階特性深剖析 2.1 窗口函數&#xff1a;數據洞察的新視角 2.2 高級聚合&#xff1a;挖掘數據深度價值 2.3 自定義函數&#xff08;UDF 和 UDTF&#xff09;&#xff1a;拓展功能邊界 三、性能優化實戰 3.1 數…

如何利用 Conda 安裝 Pytorch 教程 ?

如何利用 Conda 安裝 Pytorch 教程 &#xff1f; 總共分為六步走&#xff1a; &#xff08;1&#xff09;第一步&#xff1a;驗證conda 環境是否安裝好&#xff1f; 1) conda -V2) conda --version&#xff08;2&#xff09;第二步&#xff1a;查看現有環境 conda env list…

什么是HTTP

HTTP&#xff08;HyperText Transfer Protocol&#xff09;是萬維網數據通信的基礎協議&#xff0c;作為應用層協議具有以下關鍵特性&#xff1a; 客戶端-服務器模型&#xff1a;基于請求/響應模式 無狀態協議&#xff1a;默認不保留通信狀態 可擴展性&#xff1a;通過首部字…

2025-05-27 學習記錄--Python-模塊

合抱之木&#xff0c;生于毫末&#xff1b;九層之臺&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、模塊 ?? &#xff08;一&#xff09;模塊的導入與使用 &#x1f36d; 模塊的導入&#xff1a;&#x1f41d; 模塊 就好比…

leetcode 131. Palindrome Partitioning

目錄 一、題目描述 二、方法1、回溯法每次暴力判斷回文子串 三、方法2、動態規劃回溯法 一、題目描述 分割回文子串 131. Palindrome Partitioning 二、方法1、回溯法每次暴力判斷回文子串 class Solution {vector<vector<string>> res;vector<string>…

重構開發范式!飛算JavaAI革新Spring Cloud分布式系統開發

分布式系統憑借高可用性、可擴展性等核心優勢&#xff0c;成為大型軟件項目的標配架構。Spring Cloud作為Java生態最主流的分布式開發框架&#xff0c;雖被廣泛應用于微服務架構搭建&#xff0c;但其傳統開發模式卻面臨效率瓶頸——從服務注冊中心配置到網關路由規則編寫&#…

python 生成復雜表格,自動分頁等功能

py&#xff54;&#xff48;&#xff4f;&#xff4e; 生成復雜表格&#xff0c;自動分頁等功能 解決將Python中的樹形目錄數據轉換為Word表格&#xff0c;并生成帶有合并單元格的檢測報告的問題。首先&#xff0c;要解決“tree目錄數據”和“Word表格互換”&#xff0c;指將樹…

根據Cortex-M3(包括STM32F1)權威指南講解MCU內存架構與如何查看編譯器生成的地址具體位置

首先我們先查看官方對于Cortex-M3預定義的存儲器映射 1.存儲器映射 1.1 Cortex-M3架構的存儲器結構 內部私有外設總線&#xff1a;即AHB總線&#xff0c;包括NVIC中斷&#xff0c;ITM硬件調試&#xff0c;FPB, DWT。 外部私有外設總線&#xff1a;即APB總線&#xff0c;用于…

Linux中硬件信息查詢利器——lshw命令詳解!

lshw&#xff08;List Hardware&#xff09;是 Linux 系統下的一款命令行工具&#xff0c;用于全面檢測并顯示詳細的硬件信息。它能夠報告 CPU、內存、主板、存儲設備、顯卡、網絡設備等幾乎所有硬件組件的詳細信息&#xff0c;適用于系統管理、故障排查和硬件兼容性檢查等場景…

用llama3微調了一個WiFiGPT 用于室內定位

一段話總結 本文提出WiFiGPT,一種基于Decoder-Only Transformer(如LLaMA 3)的室內定位系統,通過將WiFi遙測數據(如CSI、FTM、RSSI)轉換為文本序列進行端到端訓練,無需手工特征工程即可實現高精度定位。實驗表明,WiFiGPT在LOS環境中實現亞米級精度(MAE低至0.90米),在…

大模型系列22-MCP

大模型系列22-MCP 玩轉 MCP 協議&#xff1a;用 Cline DeepSeek 接入天氣服務什么是 MCP&#xff1f;環境準備&#xff1a;VScode Cline DeepSeek**配置 DeepSeek 模型&#xff1a;****配置 MCP 工具****uvx是什么&#xff1f;****安裝 uv&#xff08;會自動有 uvx 命令&…

Go語言Map的底層原理

概念 map 又稱字典&#xff0c;是一種常用的數據結構&#xff0c;核心特征包含下述三點&#xff1a; &#xff08;1&#xff09;存儲基于 key-value 對映射的模式&#xff1b; &#xff08;2&#xff09;基于 key 維度實現存儲數據的去重&#xff1b; &#xff08;3&#x…

循環神經網絡(RNN):原理、架構與實戰

循環神經網絡&#xff08;Recurrent Neural Network, RNN&#xff09;是一類專門處理序列數據的神經網絡&#xff0c;如時間序列、自然語言、音頻等。與前饋神經網絡不同&#xff0c;RNN 引入了循環結構&#xff0c;能夠捕捉序列中的時序信息&#xff0c;使模型在不同時間步之間…

java 項目登錄請求業務解耦模塊全面

登錄是統一的閘機&#xff1b; 密碼存在數據庫中&#xff0c;用的是密文&#xff0c;后端加密&#xff0c;和數據庫中做對比 1、UserController public class UserController{Autowiredprivate IuserService userservicepublic JsonResult login(Validated RequestBody UserLo…

【手寫數據庫核心揭秘系列】第9節 可重入的SQL解析器,不斷解析Structure Query Language,語言翻譯好幫手

可重入的SQL解析器 文章目錄 可重入的SQL解析器一、概述 二、可重入解析器 2.1 可重入設置 2.2 記錄狀態的數據結構 2.3 節點數據類型定義 2.4 頭文件引用 三、調整后的程序結構 四、總結 一、概述 現在就來修改之前sqlscanner.l和sqlgram.y程序,可以不斷輸入SQL語句,循環執…

微軟開源bitnet b1.58大模型,應用效果測評(問答、知識、數學、邏輯、分析)

微軟開源bitnet b1.58大模型,應用效果測評(問答、知識、數學、邏輯、分析) 目 錄 1. 前言... 2 2. 應用部署... 2 3. 應用效果... 3 1.1 問答方面... 3 1.2 知識方面... 4 1.3 數字運算... 6 1.4 邏輯方面... …

用HTML5+JavaScript實現漢字轉拼音工具

用HTML5JavaScript實現漢字轉拼音工具 前一篇博文&#xff08;https://blog.csdn.net/cnds123/article/details/148067680&#xff09;提到&#xff0c;當需要將拼音添加到漢字上面時&#xff0c;用python實現比HTML5JavaScript實現繁瑣。在這篇博文中用HTML5JavaScript實現漢…

鴻蒙OSUniApp 開發的動態背景動畫組件#三方框架 #Uniapp

使用 UniApp 開發的動態背景動畫組件 前言 在移動應用開發中&#xff0c;動態背景動畫不僅能提升界面美感&#xff0c;還能增強用戶的沉浸感和品牌辨識度。無論是登錄頁、首頁還是活動頁&#xff0c;恰到好處的動態背景都能讓產品脫穎而出。隨著鴻蒙&#xff08;HarmonyOS&am…

云原生技術架構技術探索

文章目錄 前言一、什么是云原生技術架構二、云原生技術架構的優勢三、云原生技術架構的應用場景結語 前言 在當今的技術領域&#xff0c;云原生技術架構正以一種勢不可擋的姿態席卷而來&#xff0c;成為了眾多開發者、企業和技術愛好者關注的焦點。那么&#xff0c;究竟什么是…

AWS之AI服務

目錄 一、AWS AI布局 ??1. 底層基礎設施與芯片?? ??2. AI訓練框架與平臺?? ??3. 大模型與應用層?? ??4. 超級計算與網絡?? ??與競品對比?? AI服務 ??1. 機器學習平臺?? ??2. 預訓練AI服務?? ??3. 邊緣與物聯網AI?? ??4. 數據與AI…