黑马程序员__注解的学习心得

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

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

Jdk提供的注解有三个:@SuppressWarnings   @Deprecated @Override

例子:

publicclass AnnotationTest {

    @SuppressWarnings("deprecation")//告诉jvm忽略过时方法的注解

    publicstaticvoid main(String[] asgs){

      

       System.runFinalizersOnExit(true);

       }

    @Deprecated//使过时的注解

    publicstaticvoid sayHello(){

       System.out.println("hello");

    }

    @Override//覆写的注解

    publicboolean equals(Object arg0) {

       // TODO Auto-generatedmethod stub

       returnsuper.equals(arg0);

    }

      

}

自定义注解:

格式

像定义接口一样,只是标识符前加@即可

例:public@interfaceItcastAnnotation {//

    }

=

基础知识:

认识两注释类型: Retention和target

Retention:

指示注释类型的注释要保留多久。如果注释类型声明中不存在 Retention 注释,则保留策略默认为 RetentionPolicy.CLASS

只有元注释类型直接用于注释时,Target 元注释才有效。如果元注释类型用作另一种注释类型的成员,则无效。

Target:

指示注释类型所适用的程序元素的种类。如果注释类型声明中不存在 Target 元注释,则声明的类型可以用在任一程序元素上。如果存在这样的元注释,则编译器强制实施指定的使用限制。 例如,此元注释指示该声明类型是其自身,即元注释类型。它只能用在注释类型声明上:

   @Target(ElementType.ANNOTATION_TYPE)

    public@interface MetaAnnotationType {

        ...

    }

 

此元注释指示该声明类型只可作为复杂注释类型声明中的成员类型使用。它不能直接用于注释:

    @Target({})

    public@interface MemberType {

        ...

    }

 

这是一个编译时错误,它表明一个 ElementType 常量在Target 注释中出现了不只一次。例如,以下元注释是非法的:

    @Target({ElementType.FIELD,ElementType.METHOD, ElementType.FIELD})

    public@interface Bogus {

        ...

    }

认识两个枚举:RetentionPolicy和ElementType

RetentionPolicy

注释保留策略。此枚举类型的常量描述保留注释的不同策略。它们与 Retention 元注释类型一起使用,以指定保留多长的注释。

 

 

枚举常量摘要

CLASS 
          编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释。

 

RUNTIME 
          编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。

 

SOURCE 
          编译器要丢弃的注释。

 

 

ElementType

程序元素类型。此枚举类型的常量提供了 Java 程序中声明的元素的简单分类。

这些常量与 Target 元注释类型一起使用,以指定在什么情况下使用注释类型是合法的。

枚举常量摘要

ANNOTATION_TYPE 
          注释类型声明

 

CONSTRUCTOR 
          构造方法声明

 

FIELD 
          字段声明(包括枚举常量)

 

LOCAL_VARIABLE 
          局部变量声明

 

METHOD 
          方法声明

 

PACKAGE 
          包声明

 

PARAMETER 
          参数声明

 

TYPE 
          类、接口(包括注释类型)或枚举声明

 

例子:

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

import java.lang.annotation.ElementType;

@Retention(RetentionPolicy.RUNTIME)//元注解,为注解ItcastAnnotation作解释。表示该注解保留的的阶段是运行期

@Target({ElementType.METHOD,ElementType.TYPE})//元注解,表示ItcastAnnotation作用的目标可以是方法上,也可以是TYPE上。

public@interfaceItcastAnnotation {//

   

}

自定义注解中增加各种属性实例:

自定义一个注解ItcastAnnotaton

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

import java.lang.annotation.ElementType;

 

@Retention(RetentionPolicy.RUNTIME)//元注解,为注解ItcastAnnotation作解释。表示该注解保留的的阶段是运行期

@Target({ElementType.METHOD,ElementType.TYPE})//元注解,表示ItcastAnnotation作用的目标可以是方法上,也可以是TYPE上。

 

public@interfaceItcastAnnotaton {

    String color();//Stringcolor();default "blue";

    String value();//特殊,当仅是此需设置值时(原value=“abc),可省略为(abc

    int[] arrrayAttr()default{3,4,4};//数组成员

}

应用在类中

@ItcastAnnotaton(color= "red",value="abc",arrrayAttr=1)

publicclass AnnotationTest1

{       publicstaticvoid main(String[] args)throws Exception

{

if(AnnotationTest1.class.isAnnotationPresent(ItcastAnnotaton.class))

       {   ItcastAnnotaton annotation=

(ItcastAnnotaton)AnnotationTest1.class.getAnnotation(ItcastAnnotaton.class);

 

           System.out.println(annotation.color());//打印结果为red

        }

    }

}

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

详细请查看:http://edu.csdn.net/heima

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值