概述
1.注解是一种引用数据类型
2.语法格式:(修饰符列表) @interface 注解类型名
public @interface MyAnnoction {
}
3.注解怎么使用?用在哪?
注解使用时的语法结构:@注解类型名
注解用在:类上,属性上,方法上等。注解还可以出现在注解类型上。
@MyAnnoction
public @interface otherannocation {
}
@MyAnnoction
public class AnnocationTest {
@MyAnnoction
private int no;
@MyAnnoction
public AnnocationTest() {
}
@MyAnnoction
public static void m1(){
@MyAnnoction
int i = 100;
}
}
@MyAnnoction
interface Myinterface{
}
@MyAnnoction
enum season{
Spring,sunmmer,autumn,winter
}
4.jdk自带注解
Override:注解的方法必须是子类重写的父类方法,否则报错。而且Override只在编译阶段起作用,运行阶段没用。
Deprecated:过时。
SuppressWarnings:
元注解
定义:注解的注解叫做元注解
常见的元注解
Target:这个注解用来标注使用了这个元注解的注解可以出现在哪。
Retention: 这个注解用来标注“被标注的注解”最终保存在哪
@Retention(RetentionPolicy.RUNTIME)//表示该注解被保存在class文件中,而且可以被反射机制读取
@Retention(RetentionPolicy.CLASS)//表示该注解只被保存在class文件中
@Retention(RetentionPolicy.SOURCE)//表示该注解只被保留在java源文件中
在注解中定义属性
自定义注解
public @interface MyAnnoction {
//我们可以在自定义注解中定义属性,虽然看着像一个方法,其实是一个属性
//如果一个注解中有属性,当我们使用注解时那么我们必须要给属性赋值,如果不赋值,则报错
String name();
int no() default 10;//默认属性值
int value();//如果属性名是value时候,在使用属性的时候,不需要指定属性名。但是只能是只有一个属性的时候才能这样使用。
}
使用自定义注解
@MyAnnoction
public class AnnocationTest {
@MyAnnoction(name="zhangsan")//注解有属性,我们必须给注解赋值,如果不赋值就会报错
@MYAnnocation(100)//如果属性名是value时候,在使用属性的时候,不需要指定属性名。但是只能是只有一个属性的时候才能这样使用。
public void dosome(){
}
}
当属性是数组
@Documented
@Retention(RetentionPolicy.RUNTIME)//属性名省略,因为是value
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}
public @interface Target {
/**
* Returns an array of the kinds of elements an annotation type
* can be applied to.
* @return an array of the kinds of elements an annotation type
* can be applied to
*/
ElementType[] value();
}
public enum ElementType {
/** Class, interface (including annotation type), or enum declaration */
TYPE,//出现在类上
/** Field declaration (includes enum constants) */
FIELD,//出现在字段上
/** Method declaration */
METHOD,//出现在方法上
/** Formal parameter declaration */
PARAMETER,//出现在参数上
/** Constructor declaration */
CONSTRUCTOR,//出现在构造方法上
/** Local variable declaration */
LOCAL_VARIABLE,//出现在局部变量上
/** Annotation type declaration */
ANNOTATION_TYPE,//出现在注解类型上
/** Package declaration */
PACKAGE,//出现在包上
/**
* Type parameter declaration
*
* @since 1.8
*/
TYPE_PARAMETER,
/**
* Use of a type
*
* @since 1.8
*/
TYPE_USE
}