Java注解

一,前言

了解什么是注解,掌握三种内置注解,掌握元注解,掌握自定义注解

二,注解的概述

注解(Annotation)其实就是一种标记,但是它本身并不起任何作用,注解处理程序通过捕获被注解标记的代码然后进行一些处理,这就是注解工作的方式。

三,内置注解

JavaSE内置了三种注解。

  • @Override

定义在java.lang.Override中,表示声明是一个重写父类的方法,并监视验证方法名称是否为父类所有。

  • @Deprecated

定义在java.lang.Deprecated中,表示此方法已废弃、暂时可用,建议不要调用此方法。

  • @SuppressWarnings

定义在java.lang.SuppressWarnings中,用来抑制编译时的警告信息。

四,元注解

对注解进行注解,也就是对注解进行标记,对注解的行为做出一些限制,例如生命周期,作用范围等等。(定义在java.lang.annotation中)

1.@Target

用于描述注解的使用范围。

实例化:

 @Target(ElementType.ANNOTATION_TYPE)  
 public @interface Target {  
     ElementType[] value();  
 }

ElementType类:

 public enum ElementType {  
     TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR,  
     LOCAL_VARIABLE, ANNOTATION_TYPE,PACKAGE  
 }
类型作用的对象类型
TYPE类、接口、枚举
FIELD类属性
METHOD方法
PARAMETER参数类型
CONSTRUCTOR构造方法
LOCAL_VARIABLE局部变量
ANNOTATION_TYPE注解
PACKAGE
TYPE_PARAMETER1.8之后,泛型
TYPE_USE1.8之后,除了PACKAGE之外任意类型

2.@Retention

描述注解的生命周期,表示什么级别时注释存在。

实例化:

 @Retention(RetentionPolicy.RUNTIME)
 public @interface Retention {  
     RetentionPolicy value();  
 }

RetentionPolicy类:

 public enum RetentionPolicy {  
     SOURCE,  
     CLASS,  
     RUNTIME  
 }
类型作用
SOURCE注解只在源码阶段保留,在编译器进行编译的时候这类注解被抹除,常见的@Override就属于这种注解
CLASS注解在编译期保留,但是当Java虚拟机加载class文件时会被丢弃,这个也是@Retention的「默认值」。@Deprecated和@NonNull就属于这样的注解
RUNTIME注解在运行期间仍然保留,在程序中可以通过反射获取,Spring中常见的@Controller、@Service等都属于这一类

3.@Documented

将注解的元素加入Javadoc中。

4.@Inherited

说明子类可继承父类中的该注解。

5.@Repeatable

表示该注解可以重复标记。

五,自定义注解

使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口。

  • @interface用来声明一个注解

  • 方法名称就是配置参数

  • 通过default声明参数的默认值

  • 如果只有一个参数,通常参数名为value

例:

 @Retention(RetentionPolicy.RUNTIME)
 public @interface PrintMsg {
     int count() default 1;
     String name() default "my name is PrintMsg";
 }
 ​
 @PrintMsg(count = 2020)
 public class AnnotationTest {
     public static void main(String[] args) {
         //通过反射获取该注解
         PrintMsg annotation = AnnotationTest.class.getAnnotation(PrintMsg.class);
         System.out.println(annotation.count());
         System.out.println(annotation.name());
     }
 }

输出如下:

 2020
 my name is PrintMsg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值