Java - 枚举, 注解和反射 (详解)

本文详细讲解了Java中的枚举类型,包括枚举的定义、常用方法及注意事项;接着介绍了注解,包括内置注解、元注解和自定义注解的定义、用途类型和作用域策略;此外,深入探讨了反射机制,涵盖类加载器、获取Constructor、Method、Field以及注解信息的方法。最后提到了内省的概念及其在BeanInfo中的应用。
摘要由CSDN通过智能技术生成

枚举

定义 =>

枚举类型: 定义有限数量的一组同类常量

eg: 春夏秋冬

发展 =>

从很多常量(public static final…) => 难管理

到enum类型 将同类常量分至一组管理

这就是枚举类型出现的原因

使用 =>

最简单的枚举类:

public enum demo(){
    
	SPRING,SUMMER,FALL,WINTER;
}

(然后可以去构建构造方法, 并对其进行初始化操作)

其实 enum 就相当于是将 public static final 给简化了


常用方法

sdflekj


枚举类实现接口

直接看例子:

public Demo implements Test{
   
	SPRING{
   
        @Overrride
        public void show(){
   
            System.out.println("春天来了");
        }
    }, SUMMER{
   
        @Overrride
        public void show(){
   
        	System.out.println("夏天来了");
        }
    }, FALL{
   
        @Overrride
        public void show(){
   
            System.out.println("秋天来了");
        }
    }, WINTER{
   
        @Overrride
        public void show(){
   
        	System.out.println("冬天来了");
        }
    };
}

//枚举类中, 不同常量可重写不同的方法

枚举注意事项

  • 一旦定义了枚举,不要修改里面的值,除非修改是必要的
    (因为大部分开发中常量都是定义好的)
  • 枚举类默认继承的是java.lang.Enum类而不是Object类
  • 枚举类不能有子类
    (因为其枚举类默认被final修饰)
  • 只能有private构造方法
    (私有的防止被访问修改)
  • switch中使用枚举时,直接使用常量名,不用携带类名
    正确示范 => switch(Spring); => √
    反例 => switch(Demo.Spring); => ×
  • 不能定义name属性,因为自带name属性
  • 不要为枚举类中的属性提供set方法,不符合枚举最初设计初衷
    (初衷 => 本来就是final不可修改的常量要什么 set() 方法 )

注解

定义 =>

Java 注解 (Annotation) (Java标注)

特点 =>

  • 和注释不同,Java 标注可以通过反射获取标注内容

  • 在编译器生成类文件时, 标注可以被嵌入到字节码中

  • Java 虚拟机可以保留标注内容, 在运行时可以获取到标注内容

  • 支持自定义标注


1. 内置注解

@Override (重写)

@Deprecated (废弃) => 被标注则意味着废弃的注解现在被废弃了 (啊哈哈哈哈)

@SafeVarargs (忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告)

@FunctionallInterface (函数式接口) | 编程格式检查

@Repeatable (标识某注解可以在同一个声明上使用多次)

@SuppressWarnings (抑制编译时的警告信息) => 变灰暗的类啥的标识这个注解后会不提示警告

2. 元注解

定义 =>

给其他注解注解的注解 (hhh)


常见元注解 =>

  • @Retention - 标识这个注解怎么保存,是只在代码中,还是编入class文件中,或者是在运行时可以通过反射访问
  • @Documented - 标记这些注解是否包含在用户文档 javadoc中
  • @Target - 标记这个注解应该是哪种 Java 成员
  • @Inherited - 标记这个注解是自动继承的

3. 自定义注解

注解架构

image-20201025194210899

ElementType(注解的用途类型)
package java.lang.annotation;
public enum ElementType {
   
   TYPE,               /* 类、接口(包括注释类型)或枚举声明*/
   FIELD,              /* 字段声明(包括枚举常量)*/
   METHOD,             /* 方法声明*/
   PARAMETER,          /* 参数声明*/
   CONSTRUCTOR,        /* 构造方法声明*/
   LOCAL_VARIABLE,     /* 局部变量声明*/
   ANNOTAT
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值