1.注解的概念和作用
注解的概念:
注解是JDK1.5之后的新特性用来说明程序的
注解的使用:@注解名称
作用分类:
-
- 编写文档:通过代码里标识的注解生成文档【生成文档doc文档】,在路径下使用cmd中输入 javadoc -encoding UTF-8 User;生成文档
- 代码分析:通过代码里标识的注解对代码进行分析【使用反射】
- 编译检查:通过代码标识的注解让编译器能够实现基本的编译检查【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编译。