基础加强_注解Annotation

  ------- android培训、java培训、期待与您交流! ----------

注解Annotation

一个注解就是一个类,使用注解就在使用这个注解的对象。
注解相当于一种标记,javac编译器,开发工具和其他程序可以用反射来获取注解。
注解可以加在包,类,字段,方法,方法的参数以及局部变量上。

java.lang包的3个基本注解:

@SupressWarnings("deprecation")//注解,压缩警告 RetentionPolicy.SOURCE
@Deprecated//过时 RetentionPolicy.RUNTIME
@Override//重写  RetentionPolicy.SOURCE  使用范围METHOD

java.lang.annotation 注解包

@Retention(value)指示注释类型的注释要保留多久。默认为 RetentionPolicy.CLASS。(CLASS RUNTIME SOURCE 3种)
@Target(value)  包,注解,类,构造方法,字段,方法,方法的参数以及局部变量。默认为任何元素

从代码学习注解的应用:

1、自定义注解  ItcastAnnotation

@Retention(RetentionPolicy.RUNTIME)  //运行时有效
@Target({ElementType.METHOD,ElementType.TYPE})  //使用范围为方法和类,采用数组的方式设置属性
public @interface ItcastAnnotation {	
	String color() default "blue";
	String value();//每个注解都有Vlaue()属性
	int[] arrayAttr() default {3,4,4};
	EnumTest.TrafficLamp lamp() default EnumTest.TrafficLamp.RED;
	MetaAnnotation annotationAttr() default @MetaAnnotation("lhm");
}

注解类型的属性:

MetaAnnotation annotationAttr() default @MetaAnnotation("xxxx");
@MyAnnotation(annotationAttr=@MetaAnnotation(“yyy”) )
可以认为上面这个@MyAnnotation是MyAnnotaion类的一个实例对象,同样的道理,
可以认为上面这个@MetaAnnotation是MetaAnnotation类的一个实例对象,调用代码如下:
MetaAnnotation ma =  myAnnotation.annotationAttr();
System.out.println(ma.value());
@MetaAnnotation("xxxx")创建注解的实例

定义注解  MetaAnnotation

public @interface MetaAnnotation {
	String value();
}

测试注解  AnnotationTest类

@ItcastAnnotation(annotationAttr=@MetaAnnotation("flx"),color="red",value="abc",arrayAttr=1) //多个参数,需要分别指定参数值
public class AnnotationTest {


	@SuppressWarnings("deprecation")
	@ItcastAnnotation("xyz")	//如果注解中有一个名称为value的属性,且你只想设置value属性
	//(即其他属性都采用默认值或者你只有一个value属性),那么可以省略value=部分,例如:@MyAnnotation("lhm")。
	public static void main(String[] args) throws Exception{
	
		System.runFinalizersOnExit(true);
		//通过反射获取注解属性
		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);
			System.out.println(annotation.lamp().nextLamp().name());
			System.out.println(annotation.annotationAttr().value());
		}
		
		Method mainMethod = AnnotationTest.class.getMethod("main", String[].class);
		ItcastAnnotation annotation2 = (ItcastAnnotation)mainMethod.getAnnotation(ItcastAnnotation.class);
		System.out.println(annotation2.value());
	}


	@Deprecated
	public static void sayHello(){
		System.out.println("hi,传智播客");
	}
}

  ------- android培训、java培训、期待与您交流! ----------

你可能感兴趣的:(注解,java基础,黑马程序员)