java-注解
794 words
2 minutes
views
什么是注解
- 可以被其他程序读取
- 可以附加在package,class,method,field上都可以添加注解
- 可通过反射实现对注解中信息的访问
- 注解是jdk1.5后的新特性
注解作用
- 编写文档:通过代码里标识的注解生成doc文档
- 代码分析:通过代码里标识的注解堆代码进行分析(结合反射)
- 编译检查:通过代码里标识的注解让编译器能实现基本的编译检查(@Override)
内置注解
- @Override:必须重写父类的方法
- @Deprecated:已过时的,不推荐使用,存在更好的方式
- @SuppressWarning:镇压警告
元注解
- 负责解释其他注解的注解:Java定义了4个标准的meta-annotation类型,以供其他的annotation类型做说明
- @target:描述注解使用范围
- @Retention:描述什么级别保存该注释信息,用于描述注解的生命周期(SOURCE<CLASS<RUNTIME)
- @Documented:说明该注解将被包含在javadoc中
- @Inherited:说明子类可以继承父类中的该注解
1
2
3
4
5
6
7
|
@Target(value={ElementType.METHOD,ElementType.TYPE})
@Retention(value=RetentionPolicy=RUNTIME)
@Documented
@Inherited
@interface MyAnnotation(){
}
|
自定义注解
- @interface用来声明一个注解
- 注解体中的每一个方法实际就是一个配置参数,方法名就是参数名,返回值类型就是参数的类型(返回值只能是Class,String,enum)
- 可以通过default来声明参数的默认值
- 只有一个参数,参数名是value,赋值时可省略参数名
- 注解元素必须要有值,我们定义注解元素时,经常使用空字符串0作为默认值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public class Test{
//注解可以显式赋值,如果没有默认值必须给注解赋值
@MyAnnotation(name = "JackYang",school={"西部开源","清华大学"})
public void test(){}
}
@Target(value={ElementType.METHOD,ElementType.TYPE})
@Retention(value=RetentionPolicy=RUNTIME)
@interface MyAnnotation(){
//注解的参数:参数类型+参数名
String name() default "";
int age() default 0;
int id() default -1;//默认值是-1代表不存在
String[] school();
}
|