一,定义:
在java中前面有@符号的就是注解,如:@Override。一些特殊的有参数,如:@SuppressWarnings (value="unchecked")。注解给Class,Field,Method等地方加上辅助信息,可以在反射的时候加以利用。
二,常用的注解:
(1)内置注解
@Override @Deprecated @SuppressWarnings()是最常见的。
@Override:进行重写的方法
@Deprecated:不建议使用或已经淘汰的方法
@SuppressWarnings():镇压编译时的警告,如:
@SuppressWarnings("all")
public class Account {
private int bankMoney;
public Account(int bankMoney) {
this.bankMoney = bankMoney;
}
}
如果没有@SuppressWarnings("all"),在IDEA中Account和bankMoney会是灰色,相当于警告,而加了之后就没有了
(2)元注解
元注解(meta-Annotation)用来注解其他注解,java定义了四种类型。如下:
@Target | 描述注解的使用范围 |
@Retention | 描述该注解需要在什么级别保存(SOURCE<CLASS<RUNTIME) |
@Document | 表示该注解生成在javadoc中 |
@Inherited | 表示子类可以继承父类的注解 |
Notations:Source表示源码,RUNTIME表示运行时候,CLASS表示编译生成的.class文件。比如:
@Target(value = {ElementType.METHOD,ElementType.CONSTRUCTOR})
@Retention(value = RetentionPolicy.RUNTIME)
@Documented
@Inherited
@interface MyAnnotation{
}
三,自定义注解:
自定义注解使用@interface,自动继承java.lang.annotation.Annotation
public class Account {
private int bankMoney;
@MyAnnotation(3.14)
// 如果一个注解里面只有value需要赋值,那么可以省略写value
public Account(int bankMoney) {
this.bankMoney = bankMoney;
}
}
@Target(value = {ElementType.METHOD,ElementType.CONSTRUCTOR})
@Retention(value = RetentionPolicy.RUNTIME)
@interface MyAnnotation {
String name() default "ok";
// 定义一个参数,形式:类型+名称+()
int i() default 1;
// 定义一个带默认值的参数,不赋值就是默认值
double value();
}