zoukankan      html  css  js  c++  java
  • java 编程基础:注解的功能和作用,自定义注解

    1,什么是注解:

    从JDK5开始,Java增加了对元数据 (MetaData)的支持,也就是Annotation注解,这种注解与注释不一样,注解其实是代码里的特殊标记,这些标记可以在编译、类加载 运行时被读取并执行相应的处理。通过使用注解,程序开发人员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充的信息。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。
    注解提供了一种为程序元素设置元数据的方法,从某些方面来看,注解就像修饰符,可用于修饰包、类、构造器、方法、成员变量、参数、局部变量的声明,这些信息被存储在注解 "name=value"对中。
    注解能被用来为程序元素(类、方法、成员变量等)设置元数据。值得指出的是,注解不影响程序代码的执行,无论增加、删除注解,代码都始终如一地执,如果希望让程序中的注解在运行时起一定的作用,只有通过某种配套的工具对注解中的信息进行访问和处理,访问和处理注解的工具统称APT,也就是Annotation Processing Tool的缩写。

    2,Java5的常用的基本注解:

    (1),重写父类方法注解@Override:

    该注解作用在一个方法上,告诉编译器检查该该方法是不是一个重写父类的方法。这个注解的作用主要是为了帮助程序员屏蔽一些低级错误,比如,我们有一个方法叫做info,有的程序员可能就直接写成了inf或者inf0,到时候排查的时候,也不太方便,如果在编译的时候就能把这个错误报出来就是最好的。
    子类重写父类方法,请必须加@Override注解

    (2),标记过时@Deprecated:

    该注解也是作用在一个类或者方法上,表示一个类或者方法是不是已过时的,如果在其他程序里使用了已过时的类或者方法,编译器会给出警告。
    java9开始为Deprecated提供了两个新的属性:
    • forRemoval: boolean 类型的属性指定该API在将来是否会被删除
    • since: String 类型的属性指定该API从哪个版本被标记为过时

    (3),取消告警@SuppressWanings:

    @SuppressWanings指示被该注解修饰的程序元素(以及该程序元素中的所有子元素)取消显示指定的编译器警告,@SuppressWanings一直作用于该程序元的所有子元素。
    比如我们的集合框架如果没有使用泛型就会造成编译告警。不过V哥觉得,我们应该尽量不适用这个注解。我们应该解决掉程序开发中所有的告警。

    (4),函数式接口@FunctionalInterface

    自定义注解

    元注解

    元注解就是修饰注解的注解。java中定义了6个元注解。本节课我们先介绍常用的元注解。

    1,@Retention

    只能用于修饰注解定义,用于指定被修饰的注解的生命周期,
    @Retention包含一个@RetentionPolicy类型的value成员变量,所以使用@Retention时必须为该value成员变量指定值。
    value 成员变 的值只能是如下
    • RetentionPolicy.CLASS: 编译器将把注解记录在class文件中,当运行Java程序时JVM不可获取注解信息。这是默认值
    • RetentionPolicy.RUNTIM: 编译器将把注解记录在class文件中,当运行 Java程序时JVM可获取注解信息,程序可以通过反射获取该注解信息
    • RetentionPolicy.SOURCE: 注解只保留在源代码中,编译器直接丢弃这种注解
     

    2,@Target

    @Target 也只能修饰注解定义,它用于指定被修饰的注解能用于修饰哪些程序单元@Target 元注解也包含一个名为 value 的成员变,该成员变量的值只能是如下几个:
    • ElementType.ANNOTATION_TYPE: 指定该策略的注解只能修饰注解。
    • ElementType.CONSTRUCTOR: 定该策略的注解只能修饰构造器。
    • ElementType.FIELD: 指定该策略的注解只能修饰成员变量。
    • ElementType.LOCAL_VARIABLE: 定该策略的注解只能修饰局部变量
    • ElementType.METHOD: 指定该策略的注解只能修饰方法定义。
    • ElementType.PACKAGE: 指定该策略的注解只能修饰包定义。
    • ElementType.PARAMETER: 指定该策略注解可修饰参数
    • ElementType.TYPE: 定该策略的注解可以修饰类、接口(包括注解类型)或枚举定义

    3,@Documented

    @Documented 用于指定被该元注解修饰的注解类将被javadoc工具提取成文档,如果定义注解类时使用了@Documented修饰,则所有使用该注解修饰的程序元素的 API 文档中将会包含该注解说明
     

    4,@Inherited

    @Inherited元注解指定被它修饰的注解将具有继承性,如果某个类使用了@Xxx注解(定义该注解时使用了@Inherited修饰)修饰,则其子类将自动被@Xxx修饰。
     
     
    创建注解
    1,创建一个最简单的注解
    public @interface MyAnnotation { }
     
    2,使用刚刚创建的注解:
    @MyAnnotation public class MyClass { }
    在默认情况下,注解可以修饰任何的程序元素,包括我们的类,接口,方法等等。所以我们定义的MyAnnotation注解,它可以修饰任何的程序元素。
     
    3,带成员变量的注解,成员变量在注解中的定义以无参方法的形式来声明
    我们的注解的成员变量的类型,只能是基本数据类型和String,元数据类型,注解类型以及其对应的数组。
    package com.zmd.myAnnotation;
    
    public @interface MyAnnotation {
        String name();
        int age() ;
    }
    如果添加了成员变量,那么使用的时候可以是如下格式:
    package com.zmd.myAnnotation;
    
    @MyAnnotation(name = "hehe",age = 1)
    public class MyClass {
    }
    4、还可以给注解的属性加上默认值:
    package com.zmd.myAnnotation;
    
    public @interface MyAnnotation {
        String name() default "zmd";
        int age() default 22;
    }
    如果加上了默认值之后,我们可以不对name和age赋值了。如果不复制,那么使用的就是默认值。
     
     
  • 相关阅读:
    Java 的JDBC 数据库连接池实现方法
    在tomcat下context.xml中配置各种数据库连接池
    Eclipse大括号换行显示
    编写.reg文件 导入注册表
    servlet中使用session
    IIS7整合Tomcat6
    TOMCAT数据库连接池的配置方法总结(待续)
    windows2003下iis6.0+tomcat6.0的整合配置
    TransactSQL处理小数
    专案同时使用两种数据库
  • 原文地址:https://www.cnblogs.com/zhangmingda/p/14781795.html
Copyright © 2011-2022 走看看