一、注解
1.注解概述
注解:Annotation
注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记。以后,javac编译器,开发工具和其他程序可以用反射来了解你的类在包、类、字段、方法,方法的参数以及局部变量
2.常见注解
@Override 表示子类重写的父类的方法,并且子类重写的方法名必须保持一致
@Deprecated 表示该方法已过时不建议使用,但是可以使用
@SuppressWarnings(“all”) 用来关闭警告信息,也可以理解为镇压警告
3.Java中的元注解
@Target( )
表示某个注解可以用在哪里
@Target(ElementType.TYPE) //接口、类、枚举、注解
@Target(ElementType.FIELD) //字段、枚举的常量
@Target(ElementType.METHOD) //方法
@Target(ElementType.PARAMETER) //方法参数
@Target(ElementType.CONSTRUCTOR) //构造函数
@Target(ElementType.LOCAL_VARIABLE) //局部变量
@Target(ElementType.ANNOTATION_TYPE) //注解
@Target(ElementType.PACKAGE) //包
@Retention( )
表示注解在什么时候生效,一般都是在运行时
@Retention(RetentionPolicy.SOURCE) //注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS) // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,
@Retention(RetentionPolicy.RUNTIME) // 注解会在class字节码文件中存在,在运行时可以通过反射获取到
@Documented
表示可以在javadoc中生成信息
一般不使用
@Inherited
表示子类可以继承父类的注解
一般不使用
4.自定义注解
格式:
@interface 注解名 {}
大括号中的参数格式
格式一:
参数类型 参数名() ;
格式二:
参数类型 参数名() default 默认值;
单个参数的注解举例:
public class Demo3_Annotation {
private int age;
@MyAnnotation(“all”) //没有默认值,参数需要一个字符串,我们必须给它传一个字符串
public int getAge(){
return age;
}
@Target(value = {ElementType.METHOD}) //说明我这个注解只能用在方法上
@Retention(value = RetentionPolicy.RUNTIME) //说明我这个注解在运行时生效
@interface MyAnnotation { //我自己定义的注解
String[] value(); //参数没有默认值
}
}
多个参数的注解举例
public class Demo3_Annotation {
private int age;
@MyAnnotation1(/*name = "小花",age = 18,id = 3,*/schools = {"西游"})
public int getAge(){
return age;
}
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation1{
//default代表默认值,有了默认值在添加注释时就不用给这个参数赋值
String name() default "";
int age() default 0;
int id() default -1;
String[] schools();
}
}