IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 枚举和注解 -> 正文阅读

[Java知识库]枚举和注解

大家好呀!我是小笙!我学习了韩顺平老师的类和对象的知识,收获颇丰!现在来和大家分享笔记!

枚举和注解

概念:枚举是一种特殊的类,里面只包含一组有限的特定的对象

自定义枚举

// 案例:创建春夏秋冬四个季节
public class EnumClass01 {
    public static void main(String[] args) {
        System.out.println(EnumDemo.WINTER);
        System.out.println(EnumDemo.SUMMER);
        System.out.println(EnumDemo.AUTUMN);
        System.out.println(EnumDemo.SPRING.toString());
    }
}
/*
 * 自定义枚举 (枚举对象名通常为大写字母)
 * 1)构造器私有化 => 外部不能创建对象
 * 2)去掉setXxx方法 => 外部不能修改属性
 * 3)直接创建固定的对象 => 枚举的特定用法
 * 4)可以使用 final static 修饰符优化 => 防止类初始化的时候加载对象
 * 5)可以提供get方法,重写toString方法用来输出
 */
class EnumDemo{
    private String seasonName;
    private String seasonFeature;

    public String getSeasonFeature() {
        return seasonFeature;
    }

    public String getSeasonName() {
        return seasonName;
    }

    //构造器
    private EnumDemo(String seasonName,String seasonFeature){
        this.seasonName = seasonName;
        this.seasonFeature = seasonFeature;
    }
    // 创建枚举对象
    final static EnumDemo SPRING = new EnumDemo("春天","温暖");
    final static EnumDemo SUMMER = new EnumDemo("夏天","炎热");
    final static EnumDemo AUTUMN = new EnumDemo("秋天","凉爽");
    final static EnumDemo WINTER = new EnumDemo("冬天","寒冷");

    @Override
    public String toString() {
        return "["+getSeasonName()+"--->"+getSeasonFeature()+"]";
    }
}

enum关键字实现枚举

public class EnumClass02 {
    public static void main(String[] args) {
        System.out.println(Session.AUTUMN);
    }
}
/*
 * 使用enum关键字来实现枚举
 * 1.当我们使用enum关键字开发一个枚举类时,默认会继承Enum类  java.lang.Enum<com.Al_tair.enum_.Session>
 * 反编译javap Session.class:
 * final class com.Al_tair.enum_.Session extends java.lang.Enum<com.Al_tair.enum_.Session> {
 *   public static final com.Al_tair.enum_.Session SPRING;
 *   public static final com.Al_tair.enum_.Session SUMMER;
 *   public static final com.Al_tair.enum_.Session AUTUMN;
 *   public static final com.Al_tair.enum_.Session WINTER;
 *   public static com.Al_tair.enum_.Session[] values();  // 隐藏
 *   public static com.Al_tair.enum_.Session valueOf(java.lang.String); 
 *   public java.lang.String getSeasonFeature();
 *   public java.lang.String getSeasonName();
 *   public java.lang.String toString();
 *   static {};
 * }
 */
enum Session{
    /*
     * Enum枚举类
     * 1.使用关键字enum替代class
     * 2.格式: 形式常量名(实参列表)
     * 3.如果有多个常量对象,使用,号间隔
     * 4.如果使用enum枚举,要求将定义常量对象写在最前面
     * 5.  
     * 6.如果我们是使用无参构造器的时候,创建常量对象可以省略括号
     */
    SPRING("春天","温暖"),
    SUMMER("夏天","炎热"),
    AUTUMN("秋天","凉爽"),
    WINTER("冬天","寒冷");

    private String seasonName;
    private String seasonFeature;

    public String getSeasonFeature() {
        return seasonFeature;
    }

    public String getSeasonName() {
        return seasonName;
    }

    //构造器
    private Session(String seasonName,String seasonFeature){
        this.seasonName = seasonName;
        this.seasonFeature = seasonFeature;
    }

    @Override
    public String toString() {
        return "["+getSeasonName()+"--->"+getSeasonFeature()+"]";
    }
}

枚举常用方法

image-20220221102947758

 // 测试枚举常用方法
enum Week{
    MONDAY("星期一"),TUESDAY("星期二"),WEDNESDAY("星期三"),THURSDAY("星期四"),FRIDAY("星期五"),SATURDAY("星期六"),SUNDAY("星期日");

    private String WeekName;

    private Week(String WeekName) {
        this.WeekName = WeekName;
    }
}

class testMethod{
    public static void main(String[] args) {
        Week f = Week.FRIDAY;
        // name() 获得枚举常量对象名;优先使用toString()
        System.out.println(f.toString()); // FRIDAY
        System.out.println(f.toString() == f.name()); // true

        // ordinal() 得到当前枚举常量对象的次序 索引 0~
        System.out.println(f.ordinal()); // 4

        // values();  // 隐藏,Enum类中无法查看 本质: 包含所有常量对象的数组
        // 实现效果: MONDAY  TUESDAY  WEDNESDAY  THURSDAY  FRIDAY  SATURDAY  SUNDAY
        for (int i = 0; i < Week.values().length; i++) {
            System.out.print(Week.values()[i]+"  ");
        }
        System.out.println();

        /* valueOf()方法 将字符串转换成枚举对象,要求字符串必须为已有的常量对象名,否则博报错
         * 源码如下
         *     public static <T extends Enum<T>> T valueOf(Class<T> enumType,String name) {
         *         T result = enumType.enumConstantDirectory().get(name);
         *         if (result != null) return result;
         *         if (name == null) throw new NullPointerException("Name is null");
         *         throw new IllegalArgumentException("No enum constant " +
         *                      enumType.getCanonicalName() + "." + name);
         *     }
         */
        Week m = Week.valueOf("MONDAY");
        System.out.println(m.toString()); // MONDAY

        /*
         * compareTo()方法:比较两个枚举常量对象 == 比较编号
         *     public final int compareTo(E o) {
         *         Enum<?> other = (Enum<?>)o;
         *         Enum<E> self = this;
         *         if (self.getClass() != other.getClass() && // optimization
         *             self.getDeclaringClass() != other.getDeclaringClass())
         *             throw new ClassCastException();
         *         return self.ordinal - other.ordinal; // 比较编号
         *     }
         */
        System.out.println(m.compareTo(f)); // -4
    }
}

注解与元注解

注解

概念:注解是绑定到程序源代码元素的元数据,对运行代码的操作没有影响。

三个基本注解: @Deprecated @Override @SuppressWarnings

public class Deprecated_ {
    public static void  main(String[]args){
        A a = new A();
    }
}
/*
 * @Deprecated
 * 特征:有划线
 * 1.该注解修饰某个元素,表示该元素已经过时
 * 2.即不推荐使用,但可以用
 *
 * @Override
 * 限定于某个方法,是重写父类的方法
 *
 * @SuppressWarnings
 * 抑制编译器警告 
 * 格式:@SuppressWarning({"","",""...});
 * 例子:@SuppressWarning({"all"}); 抑制所有警告
 * 通常放在方法和类上
 * @SuppressWarning 中的属性介绍以及属性说明
 * all,抑制所有警告
 * boxing,抑制与封装/拆装作业相关的警告
 * cast,抑制与强制转型作业相关的警告
 * dep-ann,抑制与淘汰注释相关的警告
 * deprecation,抑制与淘汰的相关警告
 * fallthrough,抑制与switch陈述式中遗漏break相关的警告
 * finally,抑制与未传回finally区块相关的警告
 * hiding,抑制与隐藏变数的区域变数相关的警告
 * incomplete-switch,抑制与switch陈述式(enum case)中遗漏项目相关的警告
 * javadoc,抑制与javadoc相关的警告
 * nls,抑制与非nls字串文字相关的警告
 * null,抑制与空值分析相关的警告
 * rawtypes,抑制与使用raw类型相关的警告
 * resource,抑制与使用Closeable类型的资源相关的警告
 * restriction,抑制与使用不建议或禁止参照相关的警告
 * serial,抑制与可序列化的类别遗漏serialVersionUID栏位相关的警告
 * static-access,抑制与静态存取不正确相关的警告
 * static-method,抑制与可能宣告为static的方法相关的警告
 * super,抑制与置换方法相关但不含super呼叫的警告
 * synthetic-access,抑制与内部类别的存取未最佳化相关的警告
 * sync-override,抑制因为置换同步方法而遗漏同步化的警告
 * unchecked,抑制与未检查的作业相关的警告
 * unqualified-field-access,抑制与栏位存取不合格相关的警告
 * unused,抑制与未用的程式码及停用的程式码相关的警告
 */
@Deprecated
class A{
    public void fly(){}
}
class B extends A{
    @Override
    public void fly(){}
}

元注解(了解)

概念: 用来修饰注解(如@Override)

Retention 指定注解的作用范围,三种SOURCE,CLASS,RUNTIME

  • RetentionPolicy.SOURCE 该注解经过编译后被丢弃
  • RetentionPolicy.CLASS 该注解在解释之后被丢弃
  • RetentionPolicy.RUNTIME 该注解会被保存到JVM虚拟机中

Target 指定注解可以在哪些地方使用

Documented 指定该注解是否会在javadoc体现

Inherited 子类会继承父类的注解

// @Override的源码案例分析
@Target(ElementType.METHOD) // 方法中使用
@Retention(RetentionPolicy.SOURCE)  // 该注解主要是用于编译,所以在编译之后丢弃
public @interface Override { // @interface 不是接口,代表注解类(jdk5.0之后添加)
}
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-02-22 20:26:08  更:2022-02-22 20:28:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:37:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码