当前位置: 首页 > news >正文

Java-day13(枚举与注解)

枚举与注解

枚举

1.自定义枚举

如果枚举只有单个成员,则可以作为单例模式的实现方式

public class test{
public static void main(String[] args) {              Season spring = Season.spring;System.out.println(spring);spring.show();System.out.println(spring.getSeasonName());
}
}
//枚举类
class Season{//1.提供类的属性的私有,不可修改private final String seasonName;private final String seasonDesc;//声明为final的属性,在构造器中初始化private Season(String seasonName, String seasonDesc){this.seasonDesc = seasonDesc;this.seasonName = seasonName;}//通过公共的方法来调用属性public String getSeasonName(){return  seasonName;}public String getSeasonDesc(){return  seasonDesc;}//创建枚举类对象:将类的对象声明为public static finalpublic static final Season spring = new Season("spring", "万物复苏");public static final Season summer = new Season("summer", "烈日炎炎");public static final Season autumn = new Season("autumn", "秋高气爽");public static final Season winter = new Season("winter", "寒冬来临");public String toString(){return "Season [ Name: " + seasonName + ", Desc: " + seasonDesc + "]";}public void show(){System.out.println("又是这个季节");}
}

2.使用enum关键字定义枚举类

enum关键字是JDK1.5新增的
枚举类的主要方法

public class test1{
public static void main(String[] args) {              Season1 spring = Season1.spring;System.out.println(spring); spring.show();System.out.println(spring.getSeasonName()); System.out.println(); //1.枚举的values()方法Season1[] seasons = Season1.values();for(int i = 0;i < seasons.length;i++){System.out.println(seasons[i]); }    System.out.println(); //2.枚举的valueof(String name)方法:要求传入的形参name必须是枚举对象的名字,否则报异常IllegalArgumentExceptionString str = "spring";Season1 sea = Season1.valueOf(str);System.out.println(sea); 
}
}
//枚举类
enum Season1{spring ("spring", "万物复苏"),summer ("summer", "烈日炎炎"),autumn ("autumn", "秋高气爽"),winter ("winter", "寒冬来临");private final String seasonName;    private final String seasonDesc;private Season1(String seasonName, String seasonDesc){this.seasonDesc = seasonDesc;this.seasonName = seasonName;}public String getSeasonName(){return  seasonName;}public String getSeasonDesc(){return  seasonDesc;}public String toString(){ return "Season [ Name: " + seasonName + ", Desc: " + seasonDesc + "]"; }public void show(){System.out.println("又是这个季节");}
}

3.实现接口的枚举类

  • 可以让枚举类的对象调用同一套被重写的抽象方法,执行的效果相同

例:

public class test1{
public static void main(String[] args) {         Season1 spring = Season1.spring;System.out.println(spring);spring.show();System.out.println(spring.getSeasonName());System.out.println();
}
}
enum Season1{spring ("spring", "万物复苏"),summer ("summer", "烈日炎炎"),autumn ("autumn", "秋高气爽"),winter ("winter", "寒冬来临");private final String seasonName;private final String seasonDesc;private Season1(String seasonName, String seasonDesc){this.seasonDesc = seasonDesc;this.seasonName = seasonName;}public String getSeasonName(){return  seasonName;}public String getSeasonDesc(){return  seasonDesc;}public String toString(){return "Season [ Name: " + seasonName + ", Desc: " + seasonDesc + "]";}public void show(){System.out.println("又是这个季节");}
}
  • 可以让不同的枚举类的对象调用被重写的抽象方法,执行的效果不同(相当于让每个对象重写自己的抽象方法)

例:

public class test2{
public static void main(String[] args) {  Season1 spring = Season1.spring;System.out.println(spring);spring.show();System.out.println(spring.getSeasonName());System.out.println();
}interface info{void show();
}
enum Season1 implements info{spring ("spring", "万物复苏"){public void show(){System.out.println("春天到了!");  }},summer ("summer", "烈日炎炎"){public void show(){System.out.println("夏天到了!");}},autumn ("autumn", "秋高气爽"){public void show(){System.out.println("\u79CB天到了!");}},winter ("winter", "寒冬来临"){public void show(){System.out.println("冬天到了!");}};private final String seasonName;private final String seasonDesc;private Season1(String seasonName, String seasonDesc){this.seasonDesc = seasonDesc;this.seasonName = seasonName;}public String getSeasonName(){return  seasonName;}public String getSeasonDesc(){return  seasonDesc;}public String toString(){return "Season1 [ Name: " + seasonName + ", Desc: " + seasonDesc + "]";}
}
}

注释(Annotation)

  • 从JDK5.0开始增加对元数据的支持,即注解(代码中的特殊标记)

  • 可用于修饰包,类,构造器,方法,成员变量,参数,局部变量的声明,保存在注解的"name=value"对中

  • 能被用来为程序元素(类,方法等)设置元数据

4.内置的基本注释类型(3个)

@Override

限定重写父类方法,只能用于方法
例:

public class test{public static void main(String[] args) {           Person p = new Student();p.info();}
}
class Student extends Person{@Overridepublic void info(){System.out.println("学生表演吃瓜!");}
}
class Person{//个人信息private String name;  //姓名private int age;      //年龄private String sex;   //性别public Person(String name,int age,String sex){super();this.name = name;this.age = age;this.sex = sex;}public Person(){super();}public void info(){System.out.println("人\u8868\u6F14吃瓜!");}
}

@Deprecated

用于表示某个程序元素(类,方法等)已过时
例:

public class test6 {public static void main(String[] args) {      Person p = new Student();p.info();}
}
class Student extends Person{public void info(){System.out.println("学生表演吃瓜!");}
}
@Deprecated
class Person{//个人信息private String name;  //姓名private int age;      //年龄private String sex;   //性别public Person(String name,int age,String sex){super();this.name = name;this.age = age;this.sex = sex;}public Person(){super();}public void info(){System.out.println("人\u8868\u6F14吃瓜!");}
}

@SuppressWarnings

抑制编译器警告

import java.util.ArrayList;
import java.util.List;
public class test {public static void main(String[] args) {      @SuppressWarnings({"rawtypes","unused"})//抑制没有使用泛型,没有使用的警告List list = new ArrayList();}
}

5.自定义注解

例:

public @interface test7 {String value() default "hello";
}
//使用
public class test6 {@test7(value = "qwerq")public static void main(String[] args) { }
}

6.元注解(4个)

修饰其他注解的定义,该注解具体有

@Retention

只能修饰一个注解的定义,指定该注解可以保留多长时间,@Retention中有一个RetentionPolicy类型的成员变量,使用时,必须给这个成员变量指定值(值:

  • SOURCE(编译器直接放弃这种注解)
  • CLASS(编译器将注释记录到class文件中,运行时,JVM不保留注解,这是默认值)
  • RUNTIME(编译器将注释记录到class文件中,运行时,JVM保留注解,程序可以通过反射获取该注解))
import java.lang.annotation.Retention;                                                        
import java.lang.annotation.RetentionPolicy;@Retention(RetentionPolicy.CLASS)
public @interface test7 {String value() default "hello";
}

@Target

指定被修饰的注解能用于哪些程序元素,@Target中有一个value的成员变量

@Documented

将被javadoc工具提取成文件,@Retention值必须是RUNTIME

@Inherited

被它修饰的注解将具有继承性,某个类使用了此注解,那它的子类将自动具有该注释

感谢大家的支持,关注,评论,点赞!
参考资料:
尚硅谷宋红康20天搞定Java基础中部

相关文章:

Java-day13(枚举与注解)

枚举与注解 枚举 1.自定义枚举 如果枚举只有单个成员&#xff0c;则可以作为单例模式的实现方式 public class test{ public static void main(String[] args) { Season spring Season.spring;System.out.println(spring);spring.show();System.out.println(…...

vue PDF或Word转换为HTML并保留原有样式

方法一 要将PDF或Word转换为HTML并保留原有样式&#xff0c;可以使用pdfjs-dist和mammoth.js这两个库。首先需要安装这两个库&#xff1a; npm install pdfjs-dist mammoth.js然后在Vue项目中使用这两个库进行转换&#xff1a; import * as pdfjsLib from pdfjs-dist; impor…...

华硕笔记本摄像头倒置怎么办?华硕笔记本摄像头上下颠倒怎么调整

笔记本电脑相较于台式电脑&#xff0c;更易携带&#xff0c;解决了很大一部分人的使用需求。但是笔记本电脑也存在很多不足&#xff0c;比如华硕笔记本电脑就经常会出现摄像头倒置的错误&#xff0c;出现这种问题要如何修复呢&#xff1f;下面就来看看详细的调整方法。 华硕笔记…...

本地套接字通信

1.本地套接字 本地套接字的作用&#xff1a;本地的进程间通信 有关系的进程间的通信 没有关系的进程间的通信 本地套接字实现流程和网络套接字类似&#xff0c;一般采用TCP的通信流程 2.本地套接字通信的流程 - tcp // 服务器端 1.创建监听的套接字int lfd socket(AF_U…...

数据结构(Java实现)-优先级队列(堆)

队列是一种先进先出(FIFO)的数据结构&#xff0c;但有些情况下&#xff0c;操作的数据可能带有优先级&#xff0c;一般出队 列在这种情况下&#xff0c;数据结构应该提供两个最基本的操作&#xff0c;一个是返回最高优先级对象&#xff0c;一个是添加新的对象。 这种数据结构就…...

算法通关村第8关【黄金】| 寻找祖先问题

思路&#xff1a;递归三部曲 第一步&#xff1a;确定参数和返回值 题目要求找到指定的结点&#xff0c;就需要返回结点。 题目又涉及到p,q就需要传入p,q&#xff0c;需要遍历传入root 第二步&#xff1a;确定终止条件 当遍历到结点为空说明到底没找到返回空 或者遍历到p,…...

栈和队列(详解)

一、栈 1.1、栈的基本概念 1.1.1、栈的定义 栈&#xff08;Stack&#xff09;&#xff1a;是只允许在一端进行插入或删除的线性表。首先栈是一种线性表&#xff0c;但限定这种线性表只能在某一端进行插入和删除操作。 栈顶&#xff08;Top&#xff09;&#xff1a;线性表允许…...

iOS开发Swift-3-UI与按钮Button-摇骰子App

1.创建新项目Dice 2.图标 删去AppIcon&#xff0c;将解压后的AppIcon.appiconset文件拖入Assets包。 3.将素材点数1-6通过网页制作成2x&#xff0c;3x版本并拖入Asset。 4.设置对应的UI。 5.拖入Button组件并设置style。 6.Ctrl加拖拽将Button拖拽到ViewController里&#xff0…...

1、[春秋云镜]CVE-2022-32991

文章目录 一、相关信息二、解题思路&#xff08;手注&#xff09;三、通关思路&#xff08;sqlmap&#xff09; 一、相关信息 靶场提示&#xff1a;该CMS的welcome.php中存在SQL注入攻击。 NVD关于漏洞的描述&#xff1a; 注入点不仅在eid处&#xff01;&#xff01;&#xff…...

pdf如何删除其中一页?了解一下这几种删除方法

pdf如何删除其中一页&#xff1f;随着电子文档的广泛应用&#xff0c;PDF已成为最常见的文档格式之一。然而&#xff0c;有时候你可能会发现&#xff0c;你的PDF文档中包含了一些多余的页面&#xff0c;或者你需要删除其中的某一页。那么&#xff0c;该如何删除PDF中的页面呢&a…...

PO设计模式是selenium自动化测试中最佳的设计模式之一

Page Object Model&#xff1a;PO设计模式是selenium自动化测试中最佳的设计模式之一&#xff0c;主要体现在对界面交互细节的封装&#xff0c;也就是在实际测试中只关注业务流程就OK了传统的设计中&#xff0c;在新增测试用例之后&#xff0c;代码会有以下几个问题&#xff1a…...

yolov8使用C++推理的流程及注意事项

1.下载yolov8项目源码GitHub - ultralytics/ultralytics: NEW - YOLOv8 &#x1f680; in PyTorch > ONNX > OpenVINO > CoreML > TFLite 2.下载opencvReleases - OpenCV,建议版本>4.7.0,选择下载源码&#xff0c; windows版本由于使用的编译器与我们所使用的m…...

深度思考计算机网络面经之二

HTTP2和1.1的区别 HTTP 2.0 和 HTTP 1.1 相比有哪些优势呢&#xff1f; HTTP1.1的队头阻塞问题 服务器必须按照请求接收的顺序来响应&#xff0c;为什么 是因为传统的1.1中没有特定字段来区分一个请求属于哪个&#xff0c;只能按照请求的物理顺序返回&#xff0c; HTTP2解…...

老年人跌倒智能识别算法 opencv

老年人跌倒智能识别算法通过opencvpython深度学习算法框架模型&#xff0c;老年人跌倒智能识别算法能够及时发现老年人跌倒情况&#xff0c;提供快速的援助和救援措施&#xff0c;保障老年人的安全。Python是一种由Guido van Rossum开发的通用编程语言&#xff0c;它很快就变得…...

ros2官方文档(基于humble版本)学习笔记

ros2官方文档&#xff08;基于humble版本&#xff09;学习笔记&#xff08;一&#xff09; 一、安装ROS2二、按教程学习1.CLI 工具配置环境 由于市面上专门讲ROS2开发的书籍不多&#xff0c;近期看完了《ROS机器人开发实践》其中大部分内容还是基于ROS1写的&#xff0c;涉及top…...

可拖动表格

支持行拖动&#xff0c;列拖动 插件&#xff1a;sortablejs UI: elementUI <template><div><hr style"margin: 30px 0;"><div><!-- 数据里面要有主键id&#xff0c; 否则拖拽异常 --><h2 style"margin-bottom: 30px&qu…...

C++语法基础

这里写目录标题 基础语法第一个程序变量常量的定义关键字标识符命名 &#xff08;变量命名&#xff09;sizeof的使用实型&#xff08;浮点型&#xff09;字符型转义字符字符串的定义 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 基础语法 第一个程序 …...

Windi CSS和Tailwind CSS以及UnoCSS

最近合作在写一个vue3ts的项目&#xff0c;看到其他人用了一种写法&#xff0c;我觉得很奇怪&#xff0c;之前没见过&#xff0c;他是这样写的 <div class"news flex-1 h-40px flex"></div>我不理解的是为什么这样写就会让这个div的高度就是40px,好多代码…...

c++ opencv将彩色图像按连通域区分

要将彩色图像按连通域区分&#xff0c;您可以使用 OpenCV 中的 cv::connectedComponents 函数。 下面是一个简单的示例代码&#xff0c;说明如何使用 cv::connectedComponents 函数来检测并标记图像中的连通域&#xff1a; #include <opencv2/opencv.hpp> #include <…...

〖程序员的自我修养 - 认知剖析篇⑩〗- 学习编程的高效率方法

人之所以会觉得迷茫,本质上是欠缺对自己的一个控制力、识别庞杂信息、去伪存真的独立思考与认知能力。 说明:该文属于 程序员的自我修养 专栏,购买任意白宝书体系化专栏可加入易编程社区,早鸟价订阅模式除外。福利:加入社区的小伙伴们,除了可以获取博主所有付费专栏的阅读…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...