• Java注解学习


    Java Annotation 是在JDK1.5之后增添的新特性.

    他是用来标识类,构造方法,方法,字段上的一个标记.

    根据该标记,来进行特定的处理.

    JDK中自带的有三个注解.

      @Override:只能用在方法之上的,用来告诉别人这一个方法是改写父类的。

      @Deprecated:建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上。

      @SuppressWarnings:表示关闭一些不当的编译器警告信息。

    其他的一些都是自定义注解,所有的注解都是隐身的继承于 java.lang.annotation.Annotation.

    自定义注解:

      自定义注解都是以@interface标注.

      在其定义上面有四个注解标注:

      @Target
      @Retention

      @Documented
      @Inherited  代码中介绍各个属性的意义

    定义:

     1 package com.yemaozi.annotation.demo01;
     2 
     3 import java.lang.annotation.Documented;
     4 import java.lang.annotation.ElementType;
     5 import java.lang.annotation.Retention;
     6 import java.lang.annotation.RetentionPolicy;
     7 import java.lang.annotation.Target;
     8 /**
     9  *      //@interface
    10  *             自定义注解的关节字,java中所有的注解默认.
    11  *   //@Retention
    12  *           RetentionPolicy.SOURCE: 停留在java源文件,编译器被丢掉
    13  *           RetentionPolicy.CLASS:停留在class文件中,但会被VM丢弃(默认)
    14  *           RetentionPolicy.RUNTIME:内存中的字节码,VM将在运行时也保留注解,因此可以通过反射机制读取注解的信息
    15  *   //@Target
    16  *            ElemenetType.CONSTRUCTOR 构造器声明。       
    17  *            ElemenetType.FIELD 域声明(包括 enum 实例)。   
    18  *            ElemenetType.LOCAL_VARIABLE 局部变量声明。   
    19  *            ElemenetType.METHOD 方法声明。             
    20  *            ElemenetType.PACKAGE 包声明。             
    21  *            ElemenetType.PARAMETER 参数声明。          
    22  *            ElemenetType.TYPE 类,接口(包括注解类型)或enum声明。                                      
    23  *            ElemenetType.CONSTRUCTOR 构造器声明。       
    24  *            ElemenetType.FIELD 域声明(包括 enum 实例)。   
    25  *            ElemenetType.LOCAL_VARIABLE 局部变量声明。   
    26  *            ElemenetType.METHOD 方法声明。             
    27  *            ElemenetType.PACKAGE 包声明。             
    28  *            ElemenetType.PARAMETER 参数声明。          
    29  *            ElemenetType.TYPE 类,接口(包括注解类型)或enum声明。
    30  *   //@Documented
    31  *           目的就是将这一Annotation的信息显示在JAVA API文档上,如果没有增加@Documented的话,JAVA API文档上不会显示相关annotation信息
    32  *   //@Inherited
    33  *           允许子类继承父类中的注解
    34  * @author yemaozi
    35  *
    36  */
    37 @Retention(RetentionPolicy.RUNTIME)
    38 @Target({ElementType.METHOD, ElementType.TYPE})
    39 @Documented
    40 public @interface MyAnnotation {
    41     //定义注解属性
    42     String value() default "默认值!";
    43     //其他类型都可在此定义....
    44     //...
    45 }

    使用该注解

    import java.lang.reflect.Method;
    
    /**
     * 使用该注解
     * @author yemaozi
     *
     */
    @MyAnnotation(value="在类上使用!")
    public class MyAnnotationTest {
        
        @MyAnnotation(value="在方法上使用!")
        public void test(){
            
        }
        
        public static void main(String[] args) throws Exception {
            //判断MyAnnotationTest类上是否有@MyAnnotation注解
            if(MyAnnotationTest.class.isAnnotationPresent(MyAnnotation.class)){
                //获取@MyAnnotaion注解
                MyAnnotation anno = MyAnnotationTest.class.getAnnotation(MyAnnotation.class);
                //获取类注解上的属性值
                String value = anno.value();
                System.out.println("类上的注解属性值:"+value);
            }
            //获取test方法上的注解
            //获取test方法
            Method method = MyAnnotationTest.class.getMethod("test");
            if(method.isAnnotationPresent(MyAnnotation.class)){
                MyAnnotation anno = method.getAnnotation(MyAnnotation.class);
                //获取方法注解上的属性值
                String value = anno.value();
                System.out.println("方法注解上的属性值:" + value);
            }
        }
        
        
    }

     输出结果为:

    类上的注解属性值:在类上使用!
    方法注解上的属性值:在方法上使用!
  • 相关阅读:
    (打表+优化)简单的求和 -- zzuli -- 1783
    (动态规划)matrix -- hdu -- 5569
    (贪心)School Marks -- codefor -- 540B
    (简单广搜) Ice Cave -- codeforces -- 540C
    (单调队列) Bad Hair Day -- POJ -- 3250
    链接的伪类选择器
    css定位的三种选择器
    选择器分组
    css和html的三种结合方式 页内和页外
    html的Meta标签
  • 原文地址:https://www.cnblogs.com/yemaozistar/p/4157694.html
Copyright © 2020-2023  润新知