注解相当于是一种标记,加了注解就等于打上了某种标记。注解可以加在包、类、字段、方法、方法的参数、局部变量上。开发工具和其它程序可以用反射来了解你的类及各种元素上有无何种标记,有什么标记就去干相应的事。
(1)Java 中的注解
@SuppressWarning 忽略警告
public class AnotationTest {
@SuppressWarnings("deprecation")
public static void main(String[] args) {
System.runFinalizersOnExit(true);
}
}
@Deprecated 表示某个元素已经过时
public class AnotationTest {
@SuppressWarnings("deprecation")
public static void main(String[] args) {
System.runFinalizersOnExit(true);
sayHello();
}
@Deprecated
public static void sayHello(){
System.out.println("DriverKing_斌");
}
}
@override 重写父类中的一个方法
public class AnotationTest {
@SuppressWarnings("deprecation")
public static void main(String[] args) {
System.runFinalizersOnExit(true);
sayHello();
}
@Deprecated
public static void sayHello(){
System.out.println("DriverKing_斌");
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
return super.equals(obj);
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
return super.hashCode();
}
}
(2)注解的自定义与反射调用
注解的应用结构图:
编写自定义注解:
@Retention(RetentionPolicy.RUNTIME) //元注解,这个参数表示该注解的生命周期保持到运行时
public @interface MyAnotation {
}
应用注解:
@MyAnotation //添加了自定义注解
public class AnotationTest {
public static void main(String[] args) {
if(AnotationTest.class.isAnnotationPresent(MyAnotation.class)){ //判断是否为注解类型
MyAnotation anotation = AnotationTest.class.getAnnotation(MyAnotation.class);
System.out.println(anotation);
}
}
}
注解的生命周期:注解的生命周期有三个种: java源文件 -----> class文件 ----->内存中字节码
元注解:
@Retention ,表示该注解的生命周期。默认值为在 class 文件阶段。
@Target,表示该注解能被应用的范围。
@Retention(RetentionPolicy.RUNTIME) //元注解,这个属性表示该注解的生命周期保持到运行时
@Target({ElementType.METHOD,ElementType.TYPE}) //元注解,这个属性表示该注解应用在方法或各种类型身上,如果有多个属性,则用数组表示
public @interface MyAnotation {
}
为注解添加属性:
@MyAnotation(Color="red",value="abc",array={1,2,3},annotation=@MetaAnnotation("调用注解的注解")) //如果有属性且没有默认值,则必须指定属性值 public class AnotationTest { public static void main(String[] args) { if(AnotationTest.class.isAnnotationPresent(MyAnotation.class)){ MyAnotation anotation = AnotationTest.class.getAnnotation(MyAnotation.class); System.out.println(anotation.Color()); } } }
@Retention(RetentionPolicy.RUNTIME) //元注解,这个参数表示该注解的生命周期保持到运行时
@Target({ElementType.METHOD,ElementType.TYPE}) //元注解,这个参数表示该注解应用在方法或各种类型身上,如果有多个参数,则用数组表示
public @interface MyAnotation {
String Color(); //定义了一个属性,表示这个注解有一个颜色属性
String value(); //特殊的属性,如果只有一个 vlaue 属性,则在调用注解的时候可以直接写属性值,例如 @Retention("abc")
String name() default "DriverKing_斌"; //指定默认值
int[] array() default {2,1};
MetaAnnotation annotation() default @MetaAnnotation("注解的注解");
}
public @interface MetaAnnotation {
String value();
}