文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java注解

2023-10-10 10:54

关注

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


提示:以下是本篇文章正文内容,下面案例可供参考

一、在编译时进行格式检查(JDK内置的三个基本注解)

在这里插入图片描述

二、使用步骤

1.理解Annotation

① jdk 5.0 新增的功能
② Annotation,其实就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相关操作,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。

2.Annocation的使用示例

示例一: 生成文档相关的注解
示例二: 在编译时进行格式检查(JDK内置的三个基本注解)
@Override: 限定重写父类方法,该注解只能用于方法@Deprecated: 用于表示所修饰的元素(类,方法等)已过时。@SuppressWarnings: 抑制编译器警告

示例三: 跟踪代码依赖性,实现替代配置文件功能

3.如何自定义注解

参照@SuppressWarning定义
① 注解声明为: @interface
②内部定义成员,通常使用value表示
③可以指定成员的默认值,使用default 定义
④如果自定义注解没有成员,表明是一个标识作用

如果注解有成员,在使用注解时,需要指明成员的值。
自定义注解必须配上注解的信息处理流程( 使用反射)才有意义。
自定义注解通过都会指明两个元注解: Retention、Target

4.jdk 提供的4种元注解

元注解:对现有的注解进行解释说明的注解
Retention: 指定所修饰的 Annotation 的生命周期: SOURCE\CLASS (默认行为)\RUNTIME
只有声明为RUNTIME生命周期的注解,才能通过反射获得。
Target: 用于指定被修饰的 Annotation 能用于修饰哪些程序元素
Documented:表示所修施的注解在被iavadoc 解析时,保留下来
Inherited:被它修饰的 Annotation 将具有继承性

5.通过反射获得注解信息

6.jdk 8 中注解的新特性: 可重复注解、类型注解

6.1 可重复注解

在MyAnnotation上声明@Repeatable,成员值为MyAnnotations.class
2.MyAnnotation的Target和Retentiond等元注解与MyAnnotations相同.

6.2 类型注解

ElementType.TYPE_PARAMETER 表示该注解能写在类型变量的声明语句中(如:泛型声明)
ELementType.TYPE_USE 表示该注解能写在使用类型的任何语句中。

7.元注解

元注解:对现有的注解进行解释说明的注解。

三、代码案例

1.自定义注解

package com.tyust.edu;import java.lang.annotation.*;import static java.lang.annotation.ElementType.*;@Inherited@Repeatable(MyAnnotations.class)@Retention(RetentionPolicy.RUNTIME)@Target({TYPE, FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE,TYPE_PARAMETER,TYPE_USE})public @interface MyAnnotation {//    String[] value();    String[] value() default "hello";}
package com.tyust.edu;import java.lang.annotation.Inherited;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;import static java.lang.annotation.ElementType.*;import static java.lang.annotation.ElementType.LOCAL_VARIABLE;@Inherited@Retention(RetentionPolicy.RUNTIME)@Target({TYPE, FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE})public @interface MyAnnotations {    MyAnnotation[] value();}

2.JDK内置的三个基本注解

package com.tyust.edu;import org.junit.Test;import java.lang.annotation.Annotation;import java.util.ArrayList;import java.util.Date;public class AnnotationTest {    public static void main(String[] args) {        Person p = new Student();        p.walk();//        @Deprecated//@Contract(pure = true)//public Date(     int year,//        @MagicConstant(intValues = {Calendar.JANUARY,Calendar.FEBRUARY,Calendar.MARCH,Calendar.APRIL,Calendar.MAY,Calendar.JUNE,Calendar.JULY,Calendar.AUGUST,Calendar.SEPTEMBER,Calendar.OCTOBER,Calendar.NOVEMBER,Calendar.DECEMBER})  int month,//        int date )        Date date = new Date(2023,20,9);        System.out.println(date);        @SuppressWarnings("unused")        int num = 10;    }    //通过反射获取注解信息    @Test    public void testGetAnnotation(){        Class clazz = Student.class;        Annotation[] annotations = clazz.getAnnotations();        for (int i = 0; i <annotations.length; i++) {            System.out.println(annotations[i]);        }    }}//@MyAnnotation(value = "hello")//jdk8之前的写法//@MyAnnotations({@MyAnnotation(value = "hello"),@MyAnnotation(value = "hi")})@MyAnnotation(value = "hello")@MyAnnotation(value = "hi")class  Person{    String name;    int age;    public Person(){    }    public Person(String name,int age){        this.name = name;        this.age = age;    }    public void walk(){        System.out.println("人走路");    }    public void eat(){        System.out.println("人吃饭");    }}interface Info1{    void show();}class Student extends Person implements Info1{    @Override    public void walk() {        System.out.println("学生走路");    }    @Override    public void show() {    }}class Generic<@MyAnnotation T>{    public void show()throws @MyAnnotation RuntimeException{        ArrayList<@MyAnnotation String> list = new ArrayList<>();        int num = (@MyAnnotation int)10L;    }}

来源地址:https://blog.csdn.net/lalalalalab/article/details/133710366

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-服务器
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯