zoukankan      html  css  js  c++  java
  • 对于java注解的理解

    java注解是学习java过程中一项非常实用的技能,很简单易懂,却不容忽视。
    关于注解,我们知道,它是从JDK5及其以后JDK版本开始支持Java注解; Java注解(Annotation)也叫作元数据,以‘@注解名’在代码中存在,它是一种在源代码中标注的特殊标记,可以标注源代码中的类、属性、方法、参数等代码,主要用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。

    Java注解按照是否含有参数分为三种:
    1、不带参数,语法结构为:@Annotation

    2、带一个参数的注解,语法结构为:@Annotation(参数)

    3、带多个参数的注解,语法结构为:@Annotiation(参数1, 参数2, 参数3...)

    java内置注解
    1、@Override注解

    @Override被用于标注方法,用于说明所标注的方法是重写父类的方法:

    (为了支持@Override,需要将项目工程升级为1.6或其以上版本;如果升级后Java代码没问题,但是工程报错,可以通过如下操作解决:右键项目“Properties”——>“Project Facets”——>右边java项选择相应的版本就OK了。)

    2、@Deprecated

    @Deprecated 用于说明所标注元素(成员变量或方法)因存在安全问题或有更好选择而不鼓励程序员使用,如果强行使用,则编译器会发出警告。

    @SuppressWarnings注解

    @SuppressWarnings用于取消编译器所显示的警告,该注解常用属性值如下:

    ---deprecation:使用已被@Deprecated标注的程序元素;

    ---unused:程序含有未被使用的元素;

    ---serial:在可序列化的类上缺少serialVersionUID定义;

    java自定义注解
    注解语法结构如下:

    [public] @interface 注解名 {

        [属性1;]

        [属性2;]

        ...   

         [属性n;]

    }

    为了更好理解,可以将定义注解属性理解为定义无参方法:返回值类型即为注解属性的数据类型,方法名即为注解属性名。

    属性语法结构:

    数据类型 属性名() [default 默认属性值];

    注意: 注解属性默认没有默认值,如果注解中定义了无默认值的注解属性,则使用该注解时必须指定值:

    如果注解属性名为value,使用该注解时可以直接赋值:

    ~如果注解属性的数据类型为数组类型,赋多个值时必须使用{}括起来;但若只赋一个值,则无需使用{}:

    重头戏之一——元注解
    Java提供了四个用于修饰自定义注解的元注解:@Target、@Retention 、@Documented和@Inherited

    @Target:

    用于指定被修饰的自定义注解只能用于修饰程序中哪些元素,该元注解有如下属性值:

    ElementType.ANNOTATION_TYPE:应用于其他注解的元注解

    ElementType.CONSTRUCTOR:应用于构造函数

    ElementType.FIELD:应用于全局属性

    ElementType.LOCAL_VARIABLE:应用于方法中的本地变量

    ElementType.METHOD:应用于方法 ElementType.PACKAGE:应用于包

    ElementType.PARAMETER:应用于方法的参数

    ElementType.TYPE:应用于类、接口或者枚举声明

    如下:

    限制自定义注解@Override只能用来标注方法。注意:由前面知识可知大括号可以去掉。

    @Retention:

    用于指定被修饰的自定义注解可以保留多久,该元注解有如下属性值:

    RetentionPolicy.SOURCE:编译器将直接丢弃被修饰的注解。

    RetentionPolicy.CLASS:默认值,编译器将把注解记录在class文件中,当运行Java程序时,虚拟机不再保留注解;

    RetentionPolicy.RUNTIME:编译器将把注解记录在class文件中,当运行java程序时,虚拟机保留注解,程序可以通过反射获取该注解;

    @Documented:执行javadoc命令时,被该元注解修饰的自定义注解也会生成在文档中,如下例:

    @Inherited:

    如果父类所使用的注解有@Inherited修饰,则子类可以继承该注解,否则不能继承。

    那么那么那么,注解的工作原理到底是什么呢?
    前面讲解了如何自定义注解,但是所定义的注解并没有起到应有的作用,比如@SuppressWarnings自定义注解并不会取消警告,那么注解究竟如何工作的呢?

    ————————————————————————————————————————————————————————

    注解工作原理的实质是反射知识的应用。

    自定义注解其实可以看成一个接口,如果单纯定义肯定起不到作用的,必须得通过反射对其添加属性和方法,使其丰富,该注解才有了实际作用。同样叫比尔盖茨,为啥只有那一个说怎样就怎样?同样叫@override,为什么系统自带的就能起作用,而我自定义的就不行呢?就是这个道理。

  • 相关阅读:
    解题报告 校门外的树
    解题报告 最长上升子序列
    解题报告 poj 2528 (罕见的浮水法解这个题的。。。。。。)
    解题报告 整数划分
    悲剧的程序员
    解题报告 sgu 102
    NOI 2007 社交网络
    解题报告 poj 1087
    知识点梳理 离散化
    解题报告 noi 2002 robot
  • 原文地址:https://www.cnblogs.com/anyiz/p/10605598.html
Copyright © 2011-2022 走看看