15-枚举,注解和反射(核心类库)

本文详细介绍了Java中的枚举、注解和反射三大核心概念。枚举用于定义有限的同类常量集合,可以实现接口并包含特定方法。注解是一种元数据,用于提供程序信息,分为内置注解和自定义注解,可以用于文档生成、代码分析和编译检查。反射则是动态获取和操作类、方法、字段的能力,包括通过Class对象获取构造器、方法和字段,以及调用方法和设置属性值。此外,还介绍了类加载器、注解的保留策略和目标类型,以及内省机制。
摘要由CSDN通过智能技术生成

感谢你的路过,希望学生的笔记能给你一点微不足道的参考(2/100)
Java基础思维导图,完整Java体系的链接
在这里插入图片描述
在这里插入图片描述

一,枚举

可以给自己的每一个对象添加专门的对应方法。

1.1概况:

   枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。
   用于定义有限数量的一组同类常量,例如: 错误级别: 低、中、高、急 一年的四季: 春、夏、秋、冬 商品的类型: 美妆、手机、电脑、男装、女装… 在枚举类型中定义的常量是该枚举类型的实例。

1.2定义格式

      权限修饰符 enum 枚举名称 {
      实例1,实例2,实例3,实例4;
      }

1.3枚举实现原理

   实际上在使用关键字enum创建枚举类型并编译后,编译器会为我们生成一个相关的类,这个类继承了Java API中的java.lang.Enum类,也就是说通过关键字enum创建枚举类型在编译后事实上也是一个类类型而且该类继承自java.lang.Enum类。
代码:

package com.wyh.meiJu;

/**
 * @Deacription Level类
 * Level表示1.5之前使用枚举的方式
 * Level1使用枚举表示Level意思的方式
 * Level2正常使用枚举
 * @Author 王宇辉
 * @Date 2021/9/12 22:44
 * @Version 1.0
 **/
public class Level {
   

    public static final Level LOW = new Level(1);
    public static final Level MEDIUM = new Level(50);
    public static final Level HIGH = new Level(100);

    private int LevelValue;

    private Level(int levelValue) {
   
        LevelValue = levelValue;
    }

    public int getLevelValue() {
   
        return LevelValue;
    }

    public void setLevelValue(int levelValue) {
   
        LevelValue = levelValue;
    }
}
package com.wyh.meiJu;

/**
 * Level类
 * 1.5之后的用法
 */
public enum Level1 {
   

    LOW(1),MEDIUM(50),HIGH(100);

    private int LevelValue;
    private Level1(int levelValue) {
   
        LevelValue = levelValue;
    }

    public int getLevelValue() {
   
        return LevelValue;
    }

    public void setLevelValue(int levelValue) {
   
        LevelValue = levelValue;
    }

}
package com.wyh.meiJu;

public enum Level2 {
   
    LOW,MEDIUM,HIGH;
}

1.4枚举的常见方法

在这里插入图片描述
代码:

package com.wyh.meiJu;

/**
 * @Deacription 枚举的常见用法
 * @Author 王宇辉
 * @Date 2021/9/12 23:10
 * @Version 1.0
 **/
public class Demo01_YongFa {
   

    public static void main(String[] args) {
   
        System.out.println(Level.LOW.getLevelValue());
        System.out.println(Level2.LOW.compareTo(Level2.HIGH)); // 比较此枚举与指定对象的顺序
        System.out.println(Level2.LOW.compareTo(Level2.MEDIUM));
        System.out.println(Level2.HIGH.compareTo(Level2.LOW));

        System.out.println(Level1.LOW.name()); // 返回此枚举常量的名称,在其枚举声明中对其进行声明
        System.out.println(Level1.LOW.toString()); // 返回枚举常量的名称,它包含在声明中
        System.out.println(Level1.LOW.ordinal()); // 返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)

        Level1 x = Enum.valueOf(Level1.class,"HIGH"); // 返回带指定名称的指定枚举类型的枚举常量。
        System.out.println(x.name());

        Level3.LOW.show();
        Level3.MEDIUM.show();
    }

    // 最常见的枚举用法
    public static void haha(Level1 l){
   
        switch (l){
   
            case LOW:break;
            case HIGH:break;
        }
    }

}

1.5实现接口的枚举类

代码:

package com.wyh.meiJu;

/**
 * 枚举接口
 *可以给自己的每一个对象添加专门的对应方法。
 */
public enum Level3 implements LShow{
   
    LOW{
   
        @Override
        public void show() {
   
            System.out.println("低级别");
        }
    },MEDIUM{
   
        @Override
        public void show() {
   
            System.out.println("中级别");
        }
    },HIGH{
   
        @Override
        public void show() {
   
            System.out.println("高级别");
        }
    };


    @Override
    public void show() {
   
        System.out.println("什么级别");
    }
}

interface LShow{
   
    void show();
}

1.6注意事项 :

   一旦定义了枚举,最好不要妄图修改里面的值,除非修改是必要的。
   枚举类默认继承的是java.lang.Enum类而不是Object类
   枚举类不能有子类,因为其枚举类默认被final修饰
   只能有private构造方法
   switch中使用枚举时,直接使用常量名,不用携带类名
   不能定义name属性,因为自带name属性
   不要为枚举类中的属性提供set方法,不符合枚举最初设计初衷。

二,注解

2.1概况:

   2.1.1概念:说明程序的。给计算机看的。特别方便描述依赖关系
   2.1.2注释:用文字描述程序的。给程序员看的
   2.1.3定义:
      注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
   2.1.4概念描述:
      JDK1.5之后的新特性
      说明程序的
      使用注解:@注解名称
   2.1.5作用分类:
      ①编写文档:通过代码里标识的注解生成文档【生成文档doc文档】我们自己不能改的,比如@since
      ②代码分析:通过代码里标识的注解对代码进行分析【使用反射】
      ③编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查【Override】我们自己不能改的,比如@override

2.2学习的重点

   理解 Annotation 的关键,是理解 Annotation 的语法和用法.
   学习步骤:
      2. 怎么使用内置注解
      3. 怎么自定义注解
      4. 反射中怎么获取注解内容

2.3内置注解

   @Override : 重写 * 定义在java.lang.Override
   @Deprecated:废弃 * 定义在java.lang.Deprecated
   @SafeVarargs Java 7 开始支持,忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告。
   @FunctionalInterface: 函数式接口 * Java 8 开始支持,标识一个匿名函数或函数式接口。
   @Repeatable:标识某注解可以在同一个声明上使用多次 Java 8 开始支持,标识某注解可以在同一个声明上使用多次。
   @SuppressWarnings:抑制编译时的警告信息。 * 定义在java.lang.SuppressWarnings 三种使用方式
      1. @SuppressWarnings(“unchecked”) [^ 抑制单类型的警告]
      2. @SuppressWarnings(“unchecked”,“rawtypes”) [^ 抑制多类型的警告]
      3. @SuppressWarnings(“all”) [^ 抑制所有类型的警告
参数列表:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值