Java-day13(枚举与注解)

news/2024/5/19 1:44:52 标签: java, 枚举, 注解

枚举注解

枚举

1.自定义枚举

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

java">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 final
    public 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新增的
枚举类的主要方法

java">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必须是枚举对象的名字,否则报异常IllegalArgumentException
    String 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.实现接口的枚举

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

例:

java">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("又是这个季节");
    }
}
  • 可以让不同的枚举类的对象调用被重写的抽象方法,执行的效果不同(相当于让每个对象重写自己的抽象方法)

例:

java">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

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

java">public class test{
    public static void main(String[] args) {           
        Person p = new Student();
        p.info();
    }
}
class Student extends Person{
    @Override
     public 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

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

java">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

抑制编译器警告

java">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.自定义注解

例:

java">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保留注解,程序可以通过反射获取该注解))
java">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基础中部


http://www.niftyadmin.cn/n/4982497.html

相关文章

VR全景展示:打造三维、立体化的VR房产参观方式

我们从近期的新闻中可以了解到&#xff0c;房地产行业正在经历挑战和压力&#xff0c;因为房地产销售市场的持续低迷&#xff0c;导致很多公司出现了债务危机。线下销售模式效果不佳&#xff0c;很多房企开始转战线上销售&#xff0c;VR全景展示方案为房地产销售带来了全新的体…

Vue 项目性能优化 — 实践指南

前言 Vue 框架通过数据双向绑定和虚拟 DOM 技术&#xff0c;帮我们处理了前端开发中最脏最累的 DOM 操作部分&#xff0c; 我们不再需要去考虑如何操作 DOM 以及如何最高效地操作 DOM&#xff1b;但 Vue 项目中仍然存在项目首屏优化、Webpack 编译配置优化等问题&#xff0c;所…

vue、elementui控制前一级选择后,后一级才会有数据

<el-form-item label"废物类型&#xff1a;"><el-select clearable v-model"queryForm.hswCateType" placeholder"请选择" change"industryCategoryChange" focus"industryCategoryFocus"><el-option v-for&…

uni-app开发小程序中遇到的map地图的点聚合以及polygon划分区域问题

写一篇文章来记录以下我在开发小程序地图过程中遇到的两个小坑吧&#xff0c;一个是点聚合&#xff0c;用的是joinCluster这个指令&#xff0c;另一个是polygon在地图上划分多边形的问题&#xff1a; 1.首先说一下点聚合问题&#xff0c;由于之前没有做过小程序地图问题&#…

开发工具——IDE安装 / IDEA子module依赖导入失败编译提示xx找不到符号 / IDEA在Git提交时卡顿

近期换了工作电脑&#xff0c;公司的IT团队不够给力&#xff0c;不能复制电脑系统&#xff0c;所以又到了需要重装IDE配置开发环境的时候了&#xff1b;在安装和导入Java编译器IDEA的时候遇到一些"棘手"问题&#xff0c;这里整理下解决方法以备不时之需&#xff1b; …

MongoDB - 构造复杂查询条件执行查询

文章目录 1. 构造 keyword 的查询条件2. 构造 threatSubType 的查询条件3. 相应的实体类 /*** 查询白名单详情** param offset 第几页开始* param limit 每页显示的最大值* param keyword 模糊搜索值* param order 排序方式&#xff08;升序/降序…

模型的保存加载、模型微调、GPU使用及Pytorch常见报错

序列化与反序列化 序列化就是说内存中的某一个对象保存到硬盘当中&#xff0c;以二进制序列的形式存储下来&#xff0c;这就是一个序列化的过程。 而反序列化&#xff0c;就是将硬盘中存储的二进制的数&#xff0c;反序列化到内存当中&#xff0c;得到一个相应的对象&#xff…

RPA技术介绍与应用价值

一、什么是RPA技术? RPA(Robotic Process Automation)机器人流程自动化,是一种能够模拟人类来执行重复性任务的新型技术。RPA可实现统筹安排、自动化业务处理,并提升业务工作流处理效率。用户只需通过图形方式显示的计算机操作界面对RPA软件进行动态设定即可。借助RPA (R…