java注解

一、可以生成文档

/**
 * @author meng
 * @version 1.2
 */
public class Student {

    /**
     *
     * @param a 参数1
     * @param b 参数2
     * @return 两数之和
     */
    public int add(int a, int b){
        return  a+b;
    }
}

生成文档

javadoc Student.java

生成一堆html文件,打开index.html

 

二、编译检查

例如

如果父类里没有改方法名,则报错

    @Override
    public  String toString1(){
        return name+age;
    }

 

三、代码分析

1. 基本注解

(1)@override

(2)@Deprecated

标注已过时

    @Deprecated
    public int add(int a, int b) {
        return a + b;
    }

(3)@SuppressWarning

关闭警告

@SuppressWarnings("all")
public class Student {
}

 2.注解的本质

Student.java文件

public @interface Student {

}

使用javac编译

javac Stuent.java

反编译

javap Student.class

命令行得到代码

public interface Student extends java.lang.annotation.Annotation {
}

本质是继承了Annotation接口

3.注解的属性

//可以返回的类型
public @interface Student {
    //基本数据类型
    int a();
    //String类型
    String b();
    //枚举类型
    //注解类型
    //以及以上四种类型的数组。
    
    //剩下其他的返回类型都不可以

}

 

4.元注解

(1)@Target

控制注释能修饰的位置(类、变量、方法等)

例如

ElementType.TYPE表示只能作用于类

@Target(value = {ElementType.TYPE})
public @interface Student {

}

(2)@Retention

注解被保留到哪一个阶段

例如

被保留到runtime 运行时阶段

@Target(value = {ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Student {

}

(3)@Documented

注解能够被保留到文档

@Target(value = {ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Student {

}

(4)@Inherited

如果父类添加了Inherited,则子类会自动继承父类的注解

@Target(value = {ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface Student {

}

 

5.自定义注解的使用

编写注解类

import java.lang.annotation.*;

@Target(value = {ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface ZhuJie {
    String m();
}

使用注解

@ZhuJie(m="hello1")
public class Student {
}

框架等方式解析注解

public class Test {
    public Test() {
    }

    public static void main(String[] args) {
        //反射Student类
        Class<Student> studentClass = Student.class;
        //获取类中的指定注解
        ZhuJie zj = studentClass.getAnnotation(ZhuJie.class);
        //调用注释里的方法,获取到hello
        var a= zj.m();
        System.out.println(a);
    }
}

 

posted @ 2020-07-27 20:35  富坚老贼  阅读(87)  评论(0编辑  收藏  举报