zoukankan      html  css  js  c++  java
  • Annotation注解(有源代码)

    注解(annotation)概述:

    ·从JDK5.0 开始,java增加了对元数据(MetaData)的支持,也就是Annotation(注解)

    ·Annotation其实就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过使用Annotation,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。

    ·Annotation可以像修饰符一样被使用,可用于修饰包,类,构造器,方法,成员变量,参数,局部变量的声明,这些信息被保存在Annotation的“name=value”对中。

    ·Annotation能被用来为程序元素(类,方法,成员变量等)设置元数据

    基本的Annotation:

    ·使用Annotation时要在其前面增加@符号,并把该Annotation当成一个修饰符使用。用于修饰它支持的程序元素

    ·三个基本的Annotation:

    1.@ Override:限定重写父类方法,该注释只能用于方法

    2.@ Deprecated:用于表示某个程序元素(类,方法等)已过时

    3.@ SuppressWarnings:抑制编译器警告

    自定义Annotation:

    ·定义新的Annotation类型使用@interface关键字

    ·Annotation的成员变量在Annotation定义中以无参数方法的形式来声明。其方法名和返回值定义了该成员的名字和类型。

    ·可以在定义Annotation的成员变量时为其制定初始值,指定成员变量的初始值可使用default关键字

    例:

    public @interface MyAnnotation{

        String name() default "liang"

    }

    ·没有成员定义的Annotation称为标记;包含成员变量的Annotation称为元数据Annotation

    提取Annotation信息:

    ·JDK5.0 在java.lang.reflect 包下新增了AnnotationElement接口,该接口代表程序中可以接受注解的程序元素

    ·当一个Annotation类型被定义为运行时可见,当class文件被载入时保存在class文件中的Annotation才会被虚拟机读取

    ·程序可以调用AnnotationElement对象的如下方法来访问Annotation信息

    JDK的元Annotation:

    ·JDK的元Annotation用于修饰其他Annotation定义

    ·JDK5.0 提供了专门在注解上的注解类型,分别是:

    1.Retention

    2.Target

    3.Documented

    4.Inherited

    ·@Retention:只用用于修饰一个Annotation定义,用于指定该Annotation可以保留多长时间,@Retention包含一个RetentionPolicy类型的成员变量,使用@Retention时必须为该value成员变量指定值:

    1.RetentionPolicy.SOURCE:编译器直接直接丢弃这种策略的注释

    2.RetentionPolicy.CLASS(默认):编译器会把注释记录在class文件中。当运行java程序时,JVM不会保留注解。这是 默认值

    3.RetentionPolicy.RUNTIME:编译器将把注释记录在class文件中。当运行java程序时,JVM会保留注释。程序可以通过反射获取该注释。

    ·@Target:用于修饰Annotation定义,用于指定被修饰的Annotation能用于哪些程序元素。@Target也包含了一个名为value的成员变量。

    @Documented:用于指定被该元Annotation修饰的Annotation类江北javadoc工具提取成文档。

    1.定义为Documented的注解必须设置Retention值为RUNTIME。

    ·@Inherited:被它修饰的Annotation将具有继承性。如果某个类使用了被@Inherited修饰的Annotation,则其子类将自动具有该注解(实际应用中,使用较少)。

     1 package com.demo;
     2 /*
     3  *
     4  * 如何自定义一个注解
     5  * 元注解
     6  */
     7 public class TestAnnotation {
     8     public static void main(String[] args) {
     9         Person p = new  Student();
    10         p.walk();
    11     }
    12 }
    13 
    14 class Student extends Person{
    15 
    16     @Override
    17     public void walk() {
    18         System.out.println("学生走路");
    19     }
    20     @Override
    21     public void eat() {
    22         super.eat();
    23     }
    24 }
    25 class Person{
    26     @MyAnnotation(value="liang")
    27     String name;
    28     int age;
    29     
    30     public Person() {
    31     }
    32     public Person(String name, int age) {
    33         super();
    34         this.name = name;
    35         this.age = age;
    36     }
    37     public void walk(){
    38         System.out.println("走路");
    39     }
    40     @Deprecated
    41     public void eat(){
    42         System.out.println("吃东西 ");
    43     }
    44     @Override
    45     public String toString() {
    46         return super.toString();
    47     }
    48     
    49 }
     1 package com.demo;
     2 
     3 import java.lang.annotation.Retention;
     4 import java.lang.annotation.RetentionPolicy;
     5 import java.lang.annotation.Target;
     6 import java.lang.reflect.Field;
     7 import java.lang.annotation.ElementType;
     8 //自定义的注解
     9 @Target({ElementType.FIELD})
    10 @Retention(RetentionPolicy.RUNTIME)
    11 public @interface MyAnnotation {
    12         String value() default "Hello";
    13 }
  • 相关阅读:
    getpass模块和random模块
    【转】Monkeyrunner测试1——Monkeyrunner的使用
    adb uninstall卸载apk 命令后跟的是包的名称
    【转】Android应用程序的数据存放目录解说
    【转】adb uninstall卸载apk文件说明
    【转】野兽成长史:张颖搭手傅盛在2008
    傅盛
    【转】傅盛:怎样做一个创业公司CEO?
    【转】搜狗测试经理分享
    性能测试积累
  • 原文地址:https://www.cnblogs.com/liangxiaoyu/p/5119905.html
Copyright © 2011-2022 走看看