栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java注解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/827079.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号