注解
定义:
可以对java中的某一段程序进行说明和标注,并且这个注解的信息可以被其他程序使用特定的方式读取到,从而完成相应的操作。
格式:
- 没有属性的注解:
public @interface 注解名称{
}
- 有属性,但没默认值的注解
public @interface 注解名称{
public 类型 属性名();
}
- 有属性有默认值的注解
public @interface 注解名称{
属性类型 属性名称() default 默认值;
}
类型默认为public 可以省略不写
范围:
- TYPE 使用在类、接口、注解、枚举等类型上
@Test
public class A{
}
- 使用在属性上面
// FIELD 全局变量使用注解
public class A{
@Test
private String a;
}
// LOCAL_VARIABLE 局部变量使用注解
public class A{
public void say(){
@Test
int num = -2;ss
}
}
- 方法上面
// METHOD 在方法上面
public class A{
@Test
public void say(){
}
}
// CONSTRUCTOR 在构造方法上面
public class A{
@Test
public A(){
}
}
// PARAMETER 方法参数上面使用
public class A{
public void say(@Test String name){
}
}
- ANNOTATION_TYPE 在注解类型上面
@Test
public @interface A{
}
- PACKAGE 使用在包上面
@Test
package com.learnjava.demo;
保持
- SOURCE:注解只保留在源文件,当java文件编译成class文件的时候,注解被遗弃
- CLASS:注解被保留到Class文件,但jvm加载class文件时候被遗弃
- RUNTIME:注解不仅保留到class文件中,jvm加载class文件之后,仍然存在。
元注解
自定义注解时候,一般会使用到元注解。
- @Target,用于描述注解的使用范围,例如用在类上面还是方法上面
- @Retention,用于描述注解的保存策略,是保留到源代码中、Class文件中、还是加载到内存中
- @Documented,用于描述该注解将会被javadoc生产到API文档中
- @Inherited,用于表示某个被标注的类型是被继承的,如果一个使用了@Inherited修饰的annotation 类型被用于一个class,则这个annotation将被用于该class的子类。