Java注解--Annotation

本文详细介绍了Java注解的概念,包括其定义、分类以及如何使用。同时深入探讨了JDK自带的注解,如@Override、@Deprecated和@SuppressWarning,以及自定义注解的设计方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

二:分类:
1)按照运行机制分为:源码注解,编译时注解,运行时注解
2)按照来源分为:JDK注解,第三方注解,自定义注解
3)元注解:注释的注释
三:具体注释
1.JDK注解
1)@Override表示当前的方法覆盖父类的方法
这里写图片描述
2)@Deprecated表示方法已经过时,方法上有横线,使用时会有警告
这里写图片描述
3)@SuppressWarning表示关闭一些警告信息
这里写图片描述
2.自定义注解

@Target({ElementType.METHOD, ElementType.TYPE}) //表示注解的作用域(元注解) 
@Retention(RetentionPolicy.RUNTIME) //生命周期(元注解)
@Inherited //标识性元注解,允许子类继承
@Documented //元注解,生成javadoc时会包含注解
public @interface Description {

    String value();
    int age() default 18; //可以使用default为成员指定默认值
}

补充:
(1)成员类型是受限的,合法的类型包括原始类型以及String、Class、Annotation、Enumeration
(2)如果注解只有一个成员,并且把成员取名为value(),则在使用时可以忽略成员名和赋值号“=”
(3)注解类可以没有成员,没有成员的注解称为标识注解
(4)作用域参数:
ElemenetType.CONSTRUCTOR(构造方法声明)
ElemenetType.FIELD(字段生声明)
ElemenetType.LOCAL_VARIABLE(局部变量声明)
ElemenetType.METHOD (方法声明)
ElemenetType.PACKAGE (包声明)
ElemenetType.PARAMETER (参数声明)
ElemenetType.TYPE(类,接口声明)
(5)生命周期参数:
RetentionPolicy.SOURCE(只在源码显示,编译时会丢失)
RetentionPolicy.CLASS(编译时会记录到class中,运行时忽略)
RetentionPolicy.RUNTIME( 运行时存在)
3.使用注解的语法
@<注解名>(成员名=成员值,。。。)
4 .解析注释

public class ParseAnn {

    public static void main(String[] args) {
        try {
            //1使用类加载器加载类
            Class child = Class.forName("com.ann.test.Child");
            //2找到类上面的注解
            boolean isExist = child.isAnnotationPresent(Description.class);
            if(isExist){
                //3拿到注解实例
                Description d = (Description)child.getAnnotation(Description.class);
                System.out.println(d.value());
            }
            //4找到方法上的注解
            Method[] ms = child.getMethods();
            for (Method method : ms) {
                boolean isMExist = method.isAnnotationPresent(Description.class);
                if(isMExist){
                    Description d = (Description)method.getAnnotation(Description.class);
                    System.out.println(d.value());
                }
            }
        } catch (ClassNotFoundException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }

    }

}

要解析的类和运行结果:
这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值