0基礎Java學習過程記錄——枚舉、注解

一、枚舉

1.基本介紹

(1)枚舉對應英文 enumeration,簡寫為 enum

(2)枚舉是一組常量的集合

(3)可以理解為:枚舉屬于一種特殊的類,里面只包含一組有限的特定的對象

2.實現方式

(1)自定義類實現枚舉

1)步驟

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

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

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

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

package com.figiting.enum_;/*** @version 1.0* @autor 瘋小丟*/
public class Enumeration01 {public static void main(String[] args) {System.out.println(Season.SPRING);System.out.println(Season.SUMMER);System.out.println(Season.AUTUMN);System.out.println(Season.WINNER);}
}class Season{private String name;private String desc;//定義了四個對象public static final Season SPRING = new Season("春天","溫暖");public static final Season SUMMER = new Season("夏天","炎熱");public static final Season AUTUMN = new Season("秋天","涼爽");public static final Season WINNER = new Season("冬天","寒冷");//1.構造器私有化,防止直接new//3.在Season內部,直接創建固定對象//4.優化,可以加入final修飾符private Season(String name, String desc) {this.name = name;this.desc = desc;}public String getName() {return name;}//2.去掉set相關方法,只讀不修改,防止屬性被修改/*public void setName(String name) {this.name = name;}*/public String getDesc() {return desc;}@Overridepublic String toString() {return "Season{" +"name='" + name + '\'' +", desc='" + desc + '\'' +'}';}/*public void setDesc(String desc) {this.desc = desc;}*/
}
2)特點

1.構造器私有化

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

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

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

(2)使用enum關鍵字

package com.figiting.enum_;/*** @version 1.0* @autor 瘋小丟*/
public class Enumeration02 {public static void main(String[] args) {//使用Season2枚舉類演示方法Season2 autumn = Season2.AUTUMN;//輸出枚舉對象的名稱System.out.println(autumn.name());//輸出該枚舉對象的次序/編號,從0開始編號System.out.println(autumn.ordinal());//values()返回枚舉對象,Season[]Season2[] values = Season2.values();for(Season2 season : values){//增強for循環//依次從數組中取出System.out.println(season);}//valueOf():將字符串轉換成枚舉對象,要求字符串必須為已有的常量名,否則報異常//執行流程//1.根據輸入的“AUTUMN"到Season2的枚舉對象去查找//2.如果找到了就返回,沒有就報錯Season2 autumn1 = Season2.valueOf("AUTUMN");System.out.println("autumn1=" + autumn1);System.out.println(autumn == autumn1);//compareTo:比較兩個枚舉常量,比較的就是編號//1.把Season2.AUTUMN枚舉對象的編號和Season2.SPRING枚舉對象的編號進行比較//2.結果  兩編號相減System.out.println(Season2.AUTUMN.compareTo(Season2.SPRING));}
}enum Season2{//1.使用關鍵字eum來實現枚舉類//2.public static final Season SPRING = new Season("春天","溫暖");// SPRING("春天","溫暖");即常量名(實參列表)//3.如果有多個常量(對象).使用,號間隔即可//4.如果使用enum實現枚舉,要求將定義常量對象寫在前面,枚舉對象必須放在枚舉類的行首//5.如果使用的是無參構造器創建常量對象則可以使用What,可以省略()SPRING("春天","溫暖"),AUTUMN("秋天","涼爽");//SUMMER("夏天","炎熱"), What();//調用無參構造器,或Whatprivate String name;private String desc;//定義了四個對象
/*  public static final Season SPRING = new Season("春天","溫暖");public static final Season SUMMER = new Season("夏天","炎熱");public static final Season AUTUMN = new Season("秋天","涼爽");public static final Season WINNER = new Season("冬天","寒冷");*/private Season2() {}private Season2(String name, String desc) {this.name = name;this.desc = desc;}public String getName() {return name;}//2.去掉set相關方法,只讀不修改,防止屬性被修改/*public void setName(String name) {this.name = name;}*/public String getDesc() {return desc;}@Overridepublic String toString() {return "Season{" +"name='" + name + '\'' +", desc='" + desc + '\'' +'}';}/*public void setDesc(String desc) {this.desc = desc;}*/
}
1)說明

1.當使用enum關鍵字開發一個枚舉類時,默認會繼承Enum類

2.將傳統的

public static final Season SPRING = new Season("春天","溫暖");? 簡化成?

SPRING("春天","溫暖");? 這里必須知道調用的是哪個構造器

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

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

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

2)enum常用方法的使用

1.toString:Enum類已經重寫過,返回的是當前對象名,子類可以重寫該方法,用于返回對象的屬性信息

2.name:返回當前對象名(常量名),子類中不能重寫

3.ordinal:返回當前對象的位置號,默認從0開始

4.values:返回當前枚舉類中所有的常量

5.valueOf:將字符串轉換成枚舉對象,要求字符串必須為已有的常量名,否則報異常

6.compareTo:比較兩個枚舉常量,比較的是編號

public class Enumeration02 {public static void main(String[] args) {//使用Season2枚舉類演示方法Season2 autumn = Season2.AUTUMN;//輸出枚舉對象的名稱System.out.println(autumn.name());//輸出該枚舉對象的次序/編號,從0開始編號System.out.println(autumn.ordinal());//values()返回枚舉對象,Season[]Season2[] values = Season2.values();for(Season2 season : values){//增強for循環//依次從數組中取出System.out.println(season);}//valueOf():將字符串轉換成枚舉對象,要求字符串必須為已有的常量名,否則報異常//執行流程//1.根據輸入的“AUTUMN"到Season2的枚舉對象去查找//2.如果找到了就返回,沒有就報錯Season2 autumn1 = Season2.valueOf("AUTUMN");System.out.println("autumn1=" + autumn1);System.out.println(autumn == autumn1);//compareTo:比較兩個枚舉常量,比較的就是編號//1.把Season2.AUTUMN枚舉對象的編號和Season2.SPRING枚舉對象的編號進行比較//2.結果  兩編號相減System.out.println(Season2.AUTUMN.compareTo(Season2.SPRING));}
}

3.使用細節

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

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

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

package com.figiting.enum_;/*** @version 1.0* @autor 瘋小丟*/
public class EnumDetail {public static void main(String[] args) {Music.CLASSICMUSIC.playing();}
}class A {}
//1.使用enum關鍵字后就不能再繼承其它類,因為enum會隱式繼承Enum,而Java是單繼承機制
//enum Season3 extends A {
//
//}
//2.enum實現的枚舉類仍然是一個類,所以還是可以實現接口
interface  IPlaying {public  void playing();
}enum Music implements IPlaying {CLASSICMUSIC;public void playing(){System.out.println("播放好聽的音樂...");}
}

二、注解

1.初步理解

(1)注解(Annotation)也被稱為元數據(Metadata),用于修飾解釋 包、類、方法、屬性、構造器、局部變量等數據信息

(2)和注釋一樣,注解不影響程序邏輯,但注解可以被編譯或運行,相當于嵌入在代碼中的補充信息

(3)在JavaSE中,注解的使用目的比較簡單,例如標記過的時的功能,忽略警告等,在JavaEE中注解占據更重要的角色,例如用來配置應用程序的任何切面,代替JavaEE舊版中所遺留的繁冗代碼和XML配置等

2.基本介紹

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

3.基本的Annotation應用案例

(1)@Override

限定某個方法,重寫父類方法,該注解只能用于方法

使用說明:
package com.figiting.annotation_;/*** @version 1.0* @autor 瘋小丟*/
public class Override {public static void main(String[] args) {}
}class Father{public void fly() {System.out.println("Father fly...");}
}class Son extends Father{//1. @Override注解放在fly方法上,表示子類fly方法重寫了父類的fly//2. 這里如果沒有寫@Override,還是重寫了父類的fly//3. 如果寫了,編譯器就會檢查該方法是否真的重寫了父類的方法//如果重寫了則編譯通過,如果沒有構成重寫,則編譯錯誤//即進行語法校驗//4.@Override定義,@interface表示注解類//public @interface Override {//}@java.lang.Overridepublic void fly() {System.out.println("Son fly...");}
}

1)@Override 表示制定重寫父類的方法,如果父類沒有fly方法,則不會報錯

2)如果不寫@Override注解,而父類仍有public void fly(){},仍然構成重寫

3)如果寫了,編譯器就會檢查該方法是否真的重寫了父類的方法,如果重寫了則編譯通過,如果沒有構成重寫,則編譯錯誤。即進行語法檢驗

4)@Override只能修飾方法,不能修飾其他類,包,屬性等

5)注解源碼:

(2)@Deprecated

用于表示某個程序元素(類,方法等)已過時

package com.figiting.annotation_;/*** @version 1.0* @autor 瘋小丟*/
public class Deprecated_ {public static void main(String[] args) {A a = new A();a.hi();System.out.println(a.n1);}
}//1.@Deprecated 修飾某個元素,表示該元素已經過時
//2.即不再推薦使用,但是仍然可以使用
//3.@Deprecated類的源碼
//4.可以修飾方法、類、字段、包、參數等
//5.可以做版本升級過度使用
@Deprecated
class A {public int n1 = 10;public void hi(){}
}

注解源碼:

(3)@SuppressWarnings

抑制編譯器警告

package com.figiting.annotation_;import java.util.ArrayList;
import java.util.List;/*** @version 1.0* @autor 瘋小丟*/
public class SuppressWarnings_ {//1.當我們不希望看到這些警告時,可以使用SuppressWarnings注解來抑制警告信息//2.在{"all"}中,可以寫入希望抑制(不顯示)的警告信息//3//4.關于SuppressWarnings作用范圍和放置的位置有關//比如@SuppressWarnings放置在main方法,則抑制警告范圍就是main//5.源碼//(1)放置的位置就是 TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE//(2)該注解類有數組String[] value();設置一個數組,比如{"rawtypes","unchecked","unused"}@SuppressWarnings({"rawtypes","unchecked","unused"})public static void main(String[] args) {List list = new ArrayList();list.add("");list.add("");list.add("");int i;System.out.println(list.get(1));}
}
可以指定的警告類型

1.all,抑制所有警告

2.cast,抑制與強制轉型作業相關的警告

3.dep-ann,抑制與淘汰注釋相關的警告

4.deprecation,抑制與淘汰相關警告

5.fallthrough,抑制與switch陳述式中遺漏break相關的警告

6.finally,抑制與未傳回finally區塊相關的警告

7.hiding,抑制2與隱藏變數的區域變數相關的警告

8.incomplete-switch,抑制與switch陳述式(enum case)中遺漏項目相關的警告

9.javadoc,抑制與javadoc相關的警告

10.nls,抑制與非nls字串文字相關的警告

11.rawtypes,抑制與使用raw類型相關的警告

12.resource,抑制與使用Closeable類型的資源相關的警告

13.restriction,抑制與使用不建議或禁止參照相關的警告

14.serial,抑制與可序化的類別遺漏serialVersionUID欄位相關的警告

15.static-access,抑制與靜態存取不正確相關的1警告

16.static-method,抑制與可宣告為static的方法相關的警告

17.super,抑制與置換方法相關但不含super呼叫的警告

18.synthetic-access,抑制與內部類別的存取未最佳化相關的警告

19.sync-override,抑制因為置換同步方法而遺漏同步化的警告

20.unchecked,抑制與未檢查的作業相關的警告

21.unqualified-field-access,抑制與欄位存取不合格相關的警告

22.unused,抑制與未用的程式碼及停用的程式碼相關的警告

生成@SupperssWarnings時直接點擊左側的黃色提示就可以選擇,注意可以指定生成的位置

4.元注解

(1)基本介紹

JDK的元注解用于修飾其他Annotation

元注解本身作用不大,但要清楚它是干什么的

(2)種類

1)@Retention 注解
1.說明

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

2.@Retention的三種值

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

2)@Target
基本說明

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

3)@Documented
基本說明

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

4)@Inherited
基本說明

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

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

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

相關文章

高效計算的源泉:深入淺出馮諾依曼模型與操作系統的管理藝術 —— 構建穩定、高效的應用基石 【底層邏輯/性能優化】

???~~~~~~歡迎光臨知星小度博客空間~~~~~~??? ???零星地變得優秀~也能拼湊出星河~??? ???我們一起努力成為更好的自己~??? ???如果這一篇博客對你有幫助~別忘了點贊分享哦~??? ???如果有什么問題可以評論區留言或者私信我哦~??? ??????個人…

性能測試-jmeter9-邏輯控制器、定時器壓力并發

課程:B站大學 記錄軟件測試-性能測試學習歷程、掌握前端性能測試、后端性能測試、服務端性能測試的你才是一個專業的軟件測試工程師 性能測試-jmeter邏輯控制器、定時器妙用IF控制器**IF 控制器的作用**循環控制器循環控制器的作用ForEach控制器ForEach 控制器的作用…

T:線段樹入門(無區間更新)

線段樹.線段樹介紹.線段樹框架.理解線段樹.圖式整個過程.線段樹代碼逐層解析.代碼匯總.leetcode練習.線段樹介紹 線段樹(SegmentTree)\;\;\;\;\;\;\;\;線段樹(SegmentTree)線段樹(SegmentTree) is 用于高效處理區間查詢和單點修改的數據結構,和樹狀數組很像&#xf…

【ISP】Charlite工具實操

實習一周了&#xff0c;參與了客觀拍攝和測試&#xff0c;復習一下nv工具 BLACK LEVEL&#xff08;黑電平&#xff09; eg&#xff1a; $ nv_ob 0 in_dir <input directory> out_name <ob file> nv_ob 0 in_dir D:\study\nvraw\ob1 out_name D:\study\nvraw\my_out…

普藍機器人 AutoTrack-IR-DR200 外設配置全指南

為什么外設配置對機器人研究如此重要&#xff1f;在當今機器人技術飛速發展的時代&#xff0c;高校學生研究團隊正成為創新的重要力量。無論是參加機器人競賽、開展畢業設計&#xff0c;還是進行學術研究&#xff0c;正確配置和使用外設設備都是成功的關鍵。尤其學生組裝一個服…

8、Python性能優化與代碼工程化

學習目標&#xff1a;掌握Python程序性能分析和優化的通用方法&#xff0c;建立工程化開發的規范意識&#xff0c;為后續AI項目開發奠定堅實的編程基礎在數據科學和AI開發中&#xff0c;代碼性能往往決定了項目的可行性。一個處理時間從幾小時縮短到幾分鐘的優化&#xff0c;可…

【算法--鏈表】117.填充每個節點的下一個右側節點指針Ⅱ--通俗講解

通俗算法講解推薦閱讀: 【算法–鏈表】83.刪除排序鏈表中的重復元素–通俗講解 【算法–鏈表】刪除排序鏈表中的重復元素 II–通俗講解 【算法–鏈表】86.分割鏈表–通俗講解 【算法】92.翻轉鏈表Ⅱ–通俗講解 【算法–鏈表】109.有序鏈表轉換二叉搜索樹–通俗講解 【算法–鏈…

分詞器(Tokenizer)總結(89)

分詞器(Tokenizer)總結 分詞器(Tokenizer) 分詞器的詞表(vocabulary)長度通常短于模型嵌入層(embedding layer)的長度。 結束標記(EOS token)應僅用于標記文本結尾,不可用于其他用途。 填充標記(PAD token)通常未預先定義,但你仍可能需要用到它: 對于生成式模型…

19 webUI應用中 Controlnet精講(05)-圖像修復與編輯

前面的篇章已經詳細講解了線條約束、三維關系與空間深度、人體姿態等幾類controlnet的功能與應用&#xff0c;本節內容將對通過controlnet對圖像修復與編輯進行講解。 通過controlnet也可以對圖片進行編輯、重繪及放大等操作&#xff0c;具體包括Recolor、Inpaint、Tile等&…

消息推送的三種常見方式:輪詢、SSE、WebSocket

摘要&#xff1a;本文介紹消息推送的三種常見方式&#xff1a;輪詢&#xff08;定時請求&#xff0c;易增負擔&#xff09;與長輪詢&#xff08;阻塞請求至有數據 / 超時&#xff0c;減少請求&#xff09;、SSE&#xff08;HTTP 單向實時傳輸&#xff0c;純文本、自動重連&…

論文閱讀:ACL 2024 Stealthy Attack on Large Language Model based Recommendation

總目錄 大模型相關研究&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/142132328 https://arxiv.org/pdf/2402.14836 https://www.doubao.com/chat/19815566713551106 文章目錄速覽攻擊方法速覽一、攻擊核心目標與前提1. 核心目標2. 攻擊前提二、模型無關的簡單…

自動駕駛中的傳感器技術43——Radar(4)

本文對目前毫米波雷達中的天線設計進行比較全面的羅列&#xff0c;并進行簡單的設計評述 1、實際設計案例 圖1 涵蓋能寬窄覆蓋的天線設計&#xff08;無俯仰分辨率&#xff09;圖2 Bosch前雷達的天線設計&#xff08;有俯仰的分辨率但比較弱&#xff0c;也涵蓋了擴展覆蓋&…

使用反轉法線材質球,實現切換天空盒相同的功能,優點:包體變小

切換天空盒第一步先把SKY 天空球資源導入到工程里&#xff0c; 第二步&#xff1a;天空球文件下的SKY預制件拖入到場景里 第三步 選著SKY材質球&#xff0c;拖入自己的全景圖片(圖片分辨率不能超過5000*5000&#xff0c;否則手機無法顯示) 如果并沒有效果&#xff0c;看看圖…

真正有效的數據指標體系應該長什么樣?

真正有效的數據指標體系應該長什么樣&#xff1f;為什么大多數企業的指標體系都是"花架子"&#xff1f;真正有效的指標體系應該長什么樣&#xff1f;從數據到洞察&#xff1a;讓指標真正"活"起來結語在這個人人都在談數字化轉型的時代&#xff0c;企業就像…

分布式專題——6 Redis緩存設計與性能優化

1 多級緩存架構2 緩存設計 2.1 緩存穿透 2.1.1 簡介緩存穿透是什么&#xff1f;當查詢一個根本不存在的數據時&#xff0c;緩存層和存儲層都不會命中。正常邏輯下&#xff0c;存儲層查不到數據就不會寫入緩存層。這會導致&#xff1a;每次請求這個不存在的數據&#xff0c;都要…

一文了解大模型壓縮與部署

一文了解大模型壓縮與部署&#xff1a;從 INT4 量化到 MoE&#xff0c;讓大模型跑在手機、邊緣設備和云端&#x1f3af; 為什么需要模型壓縮與部署&#xff1f;你訓練了一個強大的大模型&#xff08;如 Qwen-72B、LLaMA-3-70B&#xff09;&#xff0c;但在部署時發現&#xff1…

新手向:中文語言識別的進化之路

自然語言處理&#xff08;NLP&#xff09;技術正在以前所未有的速度改變我們與機器的交互方式。根據Gartner最新報告顯示&#xff0c;全球NLP市場規模預計在2025年將達到430億美元&#xff0c;年復合增長率高達21%。而中文作為世界上使用人數最多的語言&#xff08;全球約15億使…

LeetCode100-206反轉鏈表

本文基于各個大佬的文章上點關注下點贊&#xff0c;明天一定更燦爛&#xff01;前言Python基礎好像會了又好像沒會&#xff0c;所有我直接開始刷leetcode一邊抄樣例代碼一邊學習吧。本系列文章用來記錄學習中的思考&#xff0c;寫給自己看的&#xff0c;也歡迎大家在評論區指導…

uniapp開源多商戶小程序商城平臺源碼 支持二次開發+永久免費升級

在電商行業競爭日益激烈的今天&#xff0c;擁有一個功能強大、靈活可拓展的多商戶小程序商城至關重要。今天給大家分享一款 uniapp 開源多商戶小程序商城平臺源碼&#xff0c;它不僅具備豐富的基礎功能&#xff0c;還支持二次開發&#xff0c;更能享受永久免費升級服務&#xf…

使用腳本一鍵更新NTP服務器地址為自定義地址

【使用場景】 在銀河麒麟桌面操作系統V10SP1-2303版本中使用腳本一鍵修改NTP服務器地址為自定義地址。 【操作步驟】 步驟1. 編寫shell腳本 ```bash desktop2303@desktop2303-pc:~$ vim setntptimeserver.sh #!/bin/bashfunction modifykylinconf() { # 檢查是否已存在目標配置…