注解的使用与解析

1.注解的概念和作用

注解的概念:

注解是JDK1.5之后的新特性用来说明程序的

注解的使用:@注解名称

作用分类:

    1. 编写文档:通过代码里标识的注解生成文档【生成文档doc文档】,在路径下使用cmd中输入 javadoc -encoding UTF-8 User;生成文档
    2. 代码分析:通过代码里标识的注解对代码进行分析【使用反射】
    3. 编译检查:通过代码标识的注解让编译器能够实现基本的编译检查【Override】
/**
 * 注解三个作用
 * 1、编译检查
 * 2、生成文档
 * 3、代码分析
 */
public class User {

   @FiledAnno
    private int id;
    @FiledAnno
    private String name;

    @Override
    public String toString() {
        return "NxUser{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
    /**
     *
     * @param a 加数1
     * @param b 加数2
     * @return 两数求和
     */
    public int  add(int a,int b){
        return  a+b;
    }

    public static void main(String[] args) {

    }
}

2.预定义注解

Java提供了一些预定义的注解:

@Override:检测被该注解标注的方法是否是继承自父类(接口)的

@Deprecated:被该注解标注的内容,表示已过时

@SuppressWarnings:压制警告,一般传递参数all如@SuppressWarnings(“all”)

public class AnnoDemo01 {

    @Deprecated
    public void shownx01(){
        System.out.println("----1111-----");
    }

    @MyAnno(showStr = "ni",showStrArr = {"hello","world"},showAnno = @MyAnno2("user"))
    public void shownx02(){
        System.out.println("---2222----");
    }
}

//@SuppressWarnings("all") // 使用压制警告注解,一些警告会不显示,比如@Deprecated
class Demo{
    public static void main(String[] args) {
        AnnoDemo01 annoDemo01 = new AnnoDemo01();
        // 在工具中,shown01()方法已被废弃,会在方法名上加一横杠
        annoDemo01.shownx01();
        new Date().getHours();
    }
}

@FunctionalInterface  // 标记函数式接口 , 函数式接口(有且只有一个抽象方法,非抽象方法没关系)
interface   FunctionalInterFaceTest{
    void sayHello();
    default void  sayHello2() {};
}

3.自定义注解

/**
 * 本质 是一个继承 java.lang.annotation.Annotation接口的接口
 * 注解中定义的方法 就是注解的属性
 * String、基本数据类型、Enum、Class、注解类型以及以上类型的数组类型
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MyAnno {
    String showStr();
    int showInt() default 10;
    MyAnno2 showAnno();
    String[] showStrArr();
}

4.元注解

@Inherited :注解是否能被继承

@Documented:注解是否可能被生成文档

@Retention:注解的作用时间,有RUNTIME(运行)、CLASS(编译)、SOURCE(源码)三种参数

@Target:注解可以被用在哪里,有CONSTRUCTOR(构造方法)、FIELD(属性)、LOCAL_VARIABLE(本地变量)、METHOD(方法)、PACKAGE(包)、PARAMETER(参数)、TYPE(类)

5.注解解析器

注解处理器(Annotation Processor)是javac的一个工具,它用来在编译时扫描和处理注解(Annotation)。你可以对自定义注解,并注册相应的注解处理器。到这里,我假设你已经知道什么是注解,并且知道怎么申明的一个注解。如果你不熟悉注解,你可以在这官方文档中得到更多信息。注解处理器在Java 5开始就有了,但是从Java 6(2006年12月发布)开始才有可用的API。过了一些时间,Java世界才意识到注解处理器的强大作用,所以它到最近几年才流行起来。

一个注解的注解处理器,以Java代码(或者编译过的字节码)作为输入,生成文件(通常是.java文件)作为输出。这具体的含义什么呢?你可以生成Java代码!这些生成的Java代码是在生成的.java文件中,所以你不能修改已经存在的Java类,例如向已有的类中添加方法。这些生成的Java文件,会同其他普通的手动编写的Java源代码一样被javac编译。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Building-ui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值