基本特性
1、jdk 1.5之后才引入的。
2、用来说明程序的。(注释是给程序员看的,注解就是给电脑看的)
java注解的作用分类
1、编写文档:通过代码标识的注解生成文档。【生成doc文档】
2、代码分析:通过代码标识的注解对代码进行分析。【使用反射】
3、编译检查:通过代码标识的注解让编译器能够实现基本的编译检查。【override】
测试类:
/**
* 我的javadoc测试
*/
public class TestCode {
/**
* 计算两个数的和
* @param a 整数a
* @param b 整数b
* @return 返回两个数的和
*/
public int add(int a, int b){
return a+b;
}
}
对于2、3两点我们应该是知道的。尽管可能不知道里面的原理。但是是平时都在用的。但是对于1点还可以生成doc文档?
测试操作如下:
D:softjdkbinjavadoc.exe .TestCode.java -encoding utf-8 -docEncoding utf-8 -charset utf-8
生成了一大堆的东西:
打开TestCode.html可以发现,我们的java api手册就是这样生产的。
注解来源分类
1、jdk自带的注解,如常见的override(重写校验),deprecated(表示弃用)
2、自定义的注解
1)格式, 以override为例:
2)注解的本质
我们编写一个简单的注解
MyAnnotation.java
public @interface MyAnnotation {}
我们通过编译和反编译看下最终是什么样的结果:
D:softjdkbinjavac.exe MyAnnotation.java
D:softjdkbinjavap.exe MyAnnotation.class
结果如下:
public interface MyAnnotation extends java.lang.annotation.Annotation {
}
可以发现注解的本质就是接口,这个接口继承了jdk里面的Annotation接口。
3)注解的属性
由于注解本质为接口,那么里面可以定义未实现的方法。这些称为注解的“属性”。
属性的返回类型有(返回值不能为void):
基本数据类型
String
枚举
注解
以及以上四种类型的数组
例子:
public enum Person {
PS;
}
public @interface Annotation2 {
}
public @interface MyAnnotation {
String stringValue();
int integerValue();
Person personValue();
Annotation2 myAnnotationValue();
String[] stringArrayValue();
}
属性的使用,需要注意几点:
定义了属性在使用的时候就要给属性赋值,除非设置default值。如:String stringValue() default "aaa";
如果属性为value且属性只有这一个,那么value可以省略,直接填写属性值。
如果是数组,需要用{}包含起来。
public @interface MyAnnotation {
String stringValue() default "xxx";
int integerValue();
String[] stringArrayValue();
}
public @interface Annotation2 {
String value();
}
@MyAnnotation(integerValue = 1, stringArrayValue = {"aaa", "bbb"})
@Annotation2("default")
public class TestCode {
/**
* 计算两个数的和
* @param a 整数a
* @param b 整数b
* @return 返回两个数的和
*/
public int add(int a, int b){
return a+b;
}
@Override
public String toString() {
return super.toString();
}
}