zoukankan      html  css  js  c++  java
  • Java基础加强-注解

    /*注解(Annotation)*/(注解相当于一个特殊的类,注解类@interface A)

    了解注解及java提供的几个基本注解
    1. @SuppressWarnings
      指示应该在注释元素(以及包含该注释元素中的所有程序元素)中取消指定的编译器警告
      如:@SuppressWarnings("deprecation");
    2. @Deprecated(如:告诉程序该方法是已过时的方法)
      用@Deprecated注释的程序元素,不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择。
    3. @Override
      表示一个方法声明打算重写超类中的另一个方法声明



    注解类        应用了注解类的类        对 "应用了注解类的类"进行反射操作的类
    @interface A      @A                class C {
    {           class B {                 B.class.isAnnotationPresent(A.class);
                                 A a = B.class.getAnnotation(A.class);
    }           }                             }

    一个注解的生命周期有三个阶段(Resource->Class->RUNTIME)

      java源文件 ---> class 文件 ---> 内存中的字节码     /*javac命令    Java文件变成class文件 ,class文件并不是字节码文件,要通过java命令运行到内存中才是字节码文件*/

      javac把源文件编译成class文件的时候可能去掉那个注解 ,java 把文件调到内存里面来也可能去掉那个注解
      /*所以在设计注解类的时候,加上元注解@Retention,声明这个注解的生命周期在哪个阶段*/ SOURCE CLASS RUNTIME (默认CLASS阶段)

    @Override @SuppressWarnings 给编译器用的 SOURCE阶段
    @Deprecated RUNTIME阶段(在一个程序调用某个过时的方法,需要将该方法加载到内存中才能去使用)

    /*元注解@Target*/ @Target({ElementType.METHOD,ElementType.Type}) //Type 类、接口(包括注释类型)或枚举声明
    所以如果某个注解想 用到注解 接口 枚举上,需要用@Target(ElementType.Type)去指定

    Class 只是java中的一种类型,Class 这个类 实现了Type接口,Type比Class更精准
    注解 接口 枚举 这些都不能算作Class,用Type描述这一类事物

    如:注解类型:Overrid @Target(value=METHOD) //只能应用于注解方法
    @Retention(value=SOURCE)

    /*为注解增加基本属性*/
    什么是注解的属性
      一个注解相当于一个胸牌,如果你胸前贴了胸牌,就是一名学生,否则,就不是。如果还想区分是哪个学校的学生
      这时候可以为胸牌再增加一个属性来进行区分。加了属性的标记效果为 : @MyAnnotation(color = "red")

      1.在注解类中属性的定义(跟写一个方法类似) String color();
      2.注解属性的赋值和应用 (类似于调用一个方法) @MyAnnotation(color = "red");
        MyAnnotation a = AnnotationTest.class.getAnnotation(MyAnnotation.class);
        System.out.println(a.color());
      3.可以为属性指定缺省值 String color() default "yellow";
      4.如果注解中有一个名称为value的属性,且只需要设置value属性(即其他属性采用默认值,或只有value属性)
        String value() default "xzk"; //定义
        @MyAnnotation("xzk1"); //赋值
      5.数组类型的属性
        int[] arrayAttr() default{1,2,3};
        @MyAnnotation(arrayAttr={1,2,3,4}); //如果数组类型只有一个元素,则可以省略花括号
       6.枚举类型的属性 注解类型的属性
        //MetaAnnotation annoAttr() default @MetaAnnotation("***"); (MetaAnnotation 也是自己设计的,有一个唯一的String属性value)
        @MyAnnotation(annoAttr = "@MetaAnnotation("****")");
       7.注解属性的类型(1.  8种基本数据类型   2.String   3.Class   4.枚举   5.注解   6.前面几种类型的数组类型) (注解的属性可以是注解)

  • 相关阅读:
    2017 湖南省赛 K Football Training Camp
    一些相似单词的区别之处
    LeetCode301. Remove Invalid Parentheses
    算法刷题细节点总结
    LeetCode765. Couples Holding Hands
    LeetCode741. Cherry Pickup
    LeetCode312. Burst Balloons
    LeetCode679. 24 Game
    LeetCode862. Shortest Subarray with Sum at Least K
    LeetCode818. Race Car
  • 原文地址:https://www.cnblogs.com/xuzekun/p/7354752.html
Copyright © 2011-2022 走看看