------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
注解是什么?
注解相当于标记,加了注解就等于为程序打上标记,以后,javac编译器,开发工具及其他程序可以用反射来了解你的类及各种元素以上的有无何种标记,根据你的标记,执行相应操作。
注解在哪用?
注解可以加在包,类,字段,方法,方法的参数以及局部变量上。
注解举例:
@SuppressWarning("deprecation");//告诉编译器,我知道过时了,你不要拦截我。
@Deprecated;///过时了,别人在调用时,就不能调用。
@Override;//覆盖
自己怎么定义注解?
注解是一个特殊的类,使用@Interface A{}就是一个注解
注解的结构图:
什么是元注解?
在注解类中加入注解,该注解称为元注解。
注解的生命周期
注解声明生命周期---->源文件--->class文件---->内存中的字节码
默认是在class阶段
@Override 在src阶段
@SuppressWarning 在src阶段
@Deprecated在RUNTIME
编译器扫描源代码
编译器扫描二进制
简单的注解实例:
package com.wj.two;
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)//保留在运行期间
public @interface ItcastAnnotation {
}
package com.wj.two;
@ItcastAnnotation
public class AnnotationTest {
public static void main(String[] args)
{
//如果这个类是否使用了某个注解
if(AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class)){
//得到该注解
ItcastAnnotation annotation=
(ItcastAnnotation)AnnotationTest.class.getAnnotation(ItcastAnnotation.class);
}
}
}
为注解增加属性:
属性在注解类中是以方法的形式存在。
在得到该属性时,也是以调用方法的形式得到。
如果只有value属性需要设置(其他属性都采用缺省属性),那么就不需要“value=”
数组类型的属性:
当数组元素就只有一个时,就不用打大括号。
注解类型的属性:
MeteAnnotation annotationAttr() default @MetaAnnotation("xxxx");
@MyAnnotation(annotationAttr=@MetaAnnotation("yyy"))
可以认为@MyAnnotation是MyAnnotation类的一个实例对象,同理,@MeteAnnotation 是MeteAnnotation 类的一个实例对象。调用代码如下:
MeteAnnotation ma=MyAnnotation.annotationAttr();
system.out.println(ma.value());
注解示例:
package com.wj.two;
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)//保留在运行期间
//修饰注解的注解,指定注解作用在哪个区域
@Target({ElementType.METHOD,ElementType.TYPE})
public @interface ItcastAnnotation {
String color() default "blue" ;
String value();
//数组类型的注解属性
int[] arrayAttr() default {3,4,5};
}
package com.wj.two;
@ItcastAnnotation(color="red",value="abc",arrayAttr={1,2,3})
public class AnnotationTest {
public static void main(String[] args)
{
//如果这个类是否使用了某个注解
if(AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class)){
//得到该注解
ItcastAnnotation annotation=
(ItcastAnnotation)AnnotationTest.class.getAnnotation(ItcastAnnotation.class);
System.out.println(annotation.color());//仍然用调用方法的形式得到注解属性
System.out.println(annotation.value());
System.out.println(annotation.arrayAttr().length);
}
}
}
运行结果: