注解相当于一种标记,再程序中加了注解就等于为程序打上了某种标记,没有,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种编辑,看你有什么标记,就去干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。
package com.itheima.shipin.zhujie;
public class zhujie {
@SuppressWarnings("deprecation")
// 告诉java编译器不提示语法过时
public static void main(String[] args) {
System.runFinalizersOnExit(true);
}
@Deprecated
// 提示这个方法已经过时
public static void oldConstrutor() {
System.out.println("这个方法已经过时");
}
// @Override 作用:可以保证编译时Override函数的声明正确性。
}
注解的应用结构图
创建一个注解类代码如下
package com.itheima.shipin.zhujie;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME) //元注解 注解的注解
public @interface HeimaAnnotation {
}
调用注解并查看是否存在
代码如下
package com.itheima.shipin.zhujie;
import com.sun.xml.internal.bind.v2.schemagen.xmlschema.Annotation;
@HeimaAnnotation
public class AnnotationTest {
public static void main(String[] args) throws Exception {
if (AnnotationTest.class.isAnnotationPresent(HeimaAnnotation.class)) {
HeimaAnnotation annotation = (HeimaAnnotation) AnnotationTest.class
.getAnnotation(HeimaAnnotation.class);
System.out.println(annotation);
}
}
}
运行结果
@com.itheima.shipin.zhujie.HeimaAnnotation()
为注解增加属性(注解的强大之处)
package com.itheima.shipin.zhujie;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
// 元注解 注解的注解
@Target({ ElementType.TYPE, ElementType.METHOD })
// 注释可放CLASS上也可以用在方法上
public @interface HeimaAnnotation {
String color() default "blue";
String value();
int[] arrayAttr() default { 1, 2, 3 };
MetaAnnotation annotation() default @MetaAnnotation("abcd");
}
第四个属性也是注解,源代码为
package com.itheima.shipin.zhujie;
public @interface MetaAnnotation {
String value();
}
查看注解的属性
package com.itheima.shipin.zhujie;
import com.sun.xml.internal.bind.v2.schemagen.xmlschema.Annotation;
@HeimaAnnotation(color = "red", value = "abc", arrayAttr = 1, annotation = @MetaAnnotation("asdf"))
public class AnnotationTest {
@HeimaAnnotation("heima") //需要给其他注解的属性赋予默认值
public static void main(String[] args) throws Exception {
if (AnnotationTest.class.isAnnotationPresent(HeimaAnnotation.class)) {
HeimaAnnotation annotation = (HeimaAnnotation) AnnotationTest.class
.getAnnotation(HeimaAnnotation.class);
System.out.println(annotation.color());
System.out.println(annotation.value());
System.out.println(annotation.arrayAttr().length);
System.out.println(annotation.annotation().value());
}
}
}
运行结果
red
abc
1
asdf