java注解之初识注解

1.初识注解

定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

元数据:metadata:描述数据的数据.

注解,标签,Annotation.
----------------------------------------------------------------

所有的Annotation都是java.lang.annotation.Annotation 接口的子接口,所以Annotation是一种特殊的接口(枚举也是特殊的类);


@interface Override {} ---> interface Override extends java.lang.annotation.Annotation{}

所有的枚举类,都是java.lang.Enum类的子类.
enum Gender{}------>  class Gender extends java.lang.Enum{}

注解被用来为程序元素(类,方法,成员变量等)设置元数据。
注解,标签,Annotation都是一体.
------------------------------------------------------------------
使用注解需要注意,必须有三方参与才有意义:
 1):得有注解标签本身;
 2):被贴的程序元素(类,字段,构造器,方法,参数上,包上等);

 3):由第三方的程序使用反射的手段来赋予注解特殊的功能(也是Java代码).

2.JDK自带的注解

Java5提供的:
@Override           限定覆写父类方法,只能运用于方法上.
@Deprecated                    标记已过时,标识为不推荐使用的.在Java5之前,我们使用文档注释来表示该功能:
@SuppressWarings           抑制编译器发出的多种警告,自欺欺人的做法.@SuppressWarings(value="all"):可以运用到变量,方法,类上.
Java7提供的:
@SafeVarargs            抑制堆污染警告(Java7开始出现的)当方法使用了可变参数和泛型参数,可能导致堆污染.


3.元注解

使用注解的一点点疑惑:
     1):为什么有的注解可以贴在类上,可以贴在方法上等之上,如:@Deprecated   .
         而有的注解只能贴在方法上,比如:@Override.
     2):为什么有的注解可以设置参数,如:@SuppressWarings(value="all").
          而有的直接却不能设置参数.

因为元注解,描述注解的注解,用来限定注解可以贴在哪些程序元素上,还可以指定注解存在的周期.)


@Retention: 表示注解可以保存在哪一个代码时期. 保存的时期的值,封装在RetentionPolicy枚举类中:
 注意:一般的,自定义的注解,使用RUNTIME.(使用反射赋予注解功能)
       SOUECE
:注解只能存在于源文件中,一旦编译,在字节码中就消失了.
       CLASS:(缺省),注解可以存在于源文件和字节码文件中,一旦加载进JVM,在JVM中就消失了.
       RUNTIME:注解可以存在于源文件,字节码文件,JVM中.

@Target: 表示注解可以贴在哪些位置(类,方法上,构造器上等等).位置的常量封装在ElementType枚举类中:
ElementType.ANNOTATION_TYPE 只能修饰Annotation
ElementType.CONSTRUCTOR 只能修饰构造方法
ElementType.FIELD 只能修饰字段(属性),包括枚举常量
ElementType.LOCAL_VARIABLE 只能修饰局部变量
ElementType.METHOD 只能修饰方法
ElementType.PACKAGE 只能修饰包(极少使用)
ElementType.PARAMETER 只能修饰参数
ElementType.TYPE 只能修饰类,接口,枚举
---------------------------------------------------------------------------------------------------
@Documented:  使用@Documented标注的标签会保存到API文档中.
 比如:@Deprecated注解使用了@Documented元注解,所以被@Deprecated所标注的成员,都会保持到API文档中.


@Inherited:   @Inherited标注的标签可以被子类所继承.
举例: A注解使用@Inherited标注.
@A
class Animal{}
class Cat extends Animal{}
通过反射机制,可以从Cat类上获取注解A.

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值