黑马程序员--基础加强--第七篇--注解

ASP.Net+Android+IOS开发.Net培训期待与您交流!

注解的定义

注解相当于一种标记,实质上是一种类,在程序中调用某个注解,相当于调用某个类。写代码时只需在interface前加上@符号即定义了一个注解类,在程序中加了注解就等于为程序加了某种标记,没加则没有这种标记。以后,javac编译器,开发工具和应用程序,可以用反射来了解你的类及各种元素上是否有无何种标记,看你有什么标记,就去干相应的事儿,当然注解可以加在包,类,字段,方法,方法的参数以及局部变量上。

注解并不直接影响代码的语义,但是他可以被看做是程序的工具或者类库。它会反过来对正在运行的程序语义有所影响,比如程序错了,注解提醒你,何乐而不为呢?

几种常见的注解

@SuppressWarnings("Deprecated")//取消编译器对main中过时方法的警告
	public static void main(String[] args) {
		char[] arrChar = new char[]{'h','e','l','l','o'};
		byte[] arrByte = new byte[1024];
		new String(arrChar).getBytes(0, arrChar.length, arrByte, 0);}


@Deprecated//把下面方法写成过时的
	public static void sayHello(){
		System.out.println("Hi");
	}

@Override//这个还可以提示所写的类是不是重写
	public boolean equals(Object obj){
		System.out.println(obj);
		return false;
	}


注解的生命周期

注解是有生命周期的,默认在为ClASS阶段

CLASS 
          编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释。
RUNTIME 
          编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。
SOURCE 
          编译器要丢弃的注释。

RetentionPolicy.SOUTCE,RetentionPolicy.ClASS,RetentionPolicy.Runtime分别对应java源文件-->java.class-->在内存中的字节码,在Override,SuppressWarnings,是SOURCE阶段DeprecatedRUNTIME阶段

注解

@Retention(RetentionPolicy.RUNTIME)//注解的生命周期 

@Target({ElementType.METHOD,ElementType.TYPE})
public @interface ItcastAnnotation {
}


应用注解的类
@ItcastAnnotation(annotationAttr=@MetaAnnotation("fix"), arrayAttr = {1,2,3})
public class AnnotationTest {
}


使用自定义的注解并添加各种属性

可为原始类型(八种基本数据类型和void类型),Class类型,枚举类型,注解类型,或者以上类型的数组类

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.METHOD,ElementType.TYPE})
public @interface ItcastAnnotation {
	String color() default "blue";//color() 的默认值为blue
	int[] arrayAttr();//如果数组只有一个数据,可以省略大括
	TafficLamp TafficLamp() default TafficLamp.red;//注解的属性枚举
	MetaAnnotation annotationAttr() default @MetaAnnotation("ltm");//注解的属性还是注解
}



限定注解的使用

指示注释类型所适用的程序元素的种类。如果注释类型声明中不存在 Target 元注释,则声明的类型可以用在任一程序元素上。如果存在这样的元注释,则编译器强制实施指定的使用限制。

ANNOTATION_TYPE 
          注释类型声明
CONSTRUCTOR 
          构造方法声明
FIELD 
          字段声明(包括枚举常量)
LOCAL_VARIABLE 
          局部变量声明
METHOD 
          方法声明
PACKAGE 
          包声明
PARAMETER 
          参数声明
TYPE 
          类、接口(包括注释类型)或枚举声明

@Target({ElementType.METHOD)//如果没有添加ElementType.TYPE则下面会报错,因为ItcastAnnotation也是TYPE类型
public @interface ItcastAnnotation {
}


@ItcastAnnotation(annotationAttr=@MetaAnnotation("fix"), arrayAttr = 1)//如数组只有一个类型,则可省略大括号
public class AnnotationTest {
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值