黑馬程序員——註解

---------------------- 黑马程序员 Android培训、期待与您交流! ----------------------


註解


@Override//覆写

是否覆写父类方法(它是给javac编译器看的)保留在source阶段

@SuppressWarnings("deprecation")过时警告   (反对、不赞成)

//知道过时了,还想用   保留在source阶段

@Deprecated弃用//

标记此方法已过时  

 

注意:一个注解相当于一个类,当在程序中添加了注解,相当于创建了一个类的实例对象。

l      注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。



注解的创建?

项目中右键――Annotation

 

检查类中是否有注解

获取类的字节码 

AnnotationText.class.isAnnotationPresent(ItcastAnnotation.class))

如果存在,那就创建这个类的对象,进行接收注解。因为它返回的是一个注解,但是不知道是哪种类型的注解,所以需要进行(这个类注解的)类型转换

ItcastAnnotation annotation =(ItcastAnnotation)AnnotationText.class.getAnnotation(ItcastAnnotation.class);

一个注解的《生命周期》分为三个阶段:源文件――class文件――内存中的字节码



1. 创建一个注解类

package cn.itcast.day2;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import cn.itcast.day1.EnumTest;

//(注解的注解称为元注解)元注释、元信息、元数据(注意:元注释要导包)

//表示注解的阶段,runtime为运行时
@Retention(RetentionPolicy.RUNTIME)//RetentionPolicy保持政策
@Target({ElementType.METHOD,ElementType.TYPE})//表示可以将元素类型修饰的位置(类/方法)

/*--------------------------------------------------------------------------------
* Target:目标。可以指定注解放在类、方法、成员的哪个位置
* Target()里面接收的是数组结构。所以当我们要将一个注解添加到类和方法或其它位置的时候,
* 需要加上一对{}将注解目标位置添加到里面.{ElementType.METHOD,ElementType.TYPE}
* ElementType.TYPE中TYPE是class的父类。所以可以用TYPE修饰。
* 
* 小总结:Retention是表示注解的生命周期   Target是表示注解可以添加到哪些成员身上
* --------------------------------------------------------------------------------
*/

public @interface ItcastAnnotation {
	String color() default "blue";
	String value();
	int[] arrayAttr() default{2,3,4};
	
	//枚举类型
	EnumTest.TrafficLamp lamp() default EnumTest.TrafficLamp.RED;
	//注解类型
	MetaAnnotation annotation() default @MetaAnnotation("lgq");
}

//2.添加注解类型

package cn.itcast.day2;

 

public @interface MetaAnnotation {

    String value();

}

3.将注解作用到类中

/*
 * main方法的特殊之处:
 * 虽然main方法在我们创建的类中,但是它并不属于这个类的方法,
 * 它只是需要一个类作为容身之处,就是它必须要在类的包装下才能运行
 * -----------------------------------------------------------------
 * 注解就相当于一个你的源程序中要调用的一个"类",要在源程序中应用某个注解,
 * 得先准备好了这个注解类。就像你要调用某个"类",得先有开发好的这个类。
 * 
 */

@ItcastAnnotation(annotation=@MetaAnnotation("ldh"),color="red",value="abc",arrayAttr={2,3,4})
public class AnnotationTest {
	@SuppressWarnings("deprection")
	@ItcastAnnotation("xyz")//个人理解:上面的可以理解为覆写下面的注解属性
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//1.得到本类的字节码,然后再判断检查本类中是否存在ItcastAnnotation的注解
		//2.如果存在,那就创建这个类的对象,进行接收注解。因为它返回的是一个注解,但是不知道是哪种类型的注解,所以需要进行类型转换
		if(AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class)){
			ItcastAnnotation annotation = 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.annotation().value());
		}
	}
}



---------------------- 黑马程序员 Android培训、期待与您交流! ----------------------


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值