• 注解学习总结


    1.注解

    1.1什么是注解

    Annotation是JDK1.5后引入的新技术

    1.2注解的作用

    不是程序本身,可以对程序做出解释(这一点跟注释(comment)没什么区别)

    可以被其他程序读取(如编译器)

    2.内置注解

    2.1Override

    定义在java.lang.Override中,此注解只适合于修辞方法,表示一个方法打算重写超类中另一个方法声明

    2.2Deprecated

    当一个类型或者类型成员使用@Deprecated修饰的话,编译器将不鼓励使用这个被标注的程序元素。

    2.3SuppressWarnings

    用来抑制编译时的警告信息

    1. package com.lixi;
    2. //下面三种注解都是内置注解
    3. //镇压警告,不推荐多使用
    4. @SuppressWarnings("all")
    5. public class Test01 {
    6. //重写的注解
    7. @Override
    8. public String toString() {
    9. return super.toString();
    10. }
    11. //不推荐程序员使用,
    12. @Deprecated
    13. public void test() {
    14. System.out.println("Deprecated");
    15. }
    16. public static void main(String[] args) {
    17. Test01 t = new Test01();
    18. t.test();
    19. }
    20. }

    3.元注解

    元注解的作用就是负责注解其他注解


    3.1 Target

    简单来说就是被描述的注解可以用在什么地方

      ● ElementType.CONSTRUCTOR:用于描述构造器
      ● ElementType.FIELD:成员变量、对象、属性(包括enum实例)
      ● ElementType.LOCAL_VARIABLE:用于描述局部变量
      ● ElementType.METHOD:用于描述方法
      ● ElementType.PACKAGE:用于描述包
      ● ElementType.PARAMETER:用于描述参数
      ● ElementType.TYPE:用于描述类、接口(包括注解类型) 或enum声明

    3.2Retention

    用于描述注解的生命周期

       ●  RetentionPolicy.SOURCE : 在编译阶段丢弃。这些注解在编译结束之后就不再有任何意义,所以它们不会写入字节码。@Override, @SuppressWarnings都属于这类注解。
      ●   RetentionPolicy.CLASS : 在类加载的时候丢弃。在字节码文件的处理中有用。注解默认使用这种方式
      ●   RetentionPolicy.RUNTIME : 始终不会丢弃,运行期也保留该注解,因此可以使用反射机制读取该注解的信息。我们自定义的注解通常使用这种方式。

    3.3Documented

    一个简单的Annotations标记注解,表示是否将注解信息添加在java文档中。

    3.4Inherited

    子类可以继承父类的注解

    1. package com.lixi;
    2. import java.lang.annotation.*;
    3. @SuppressWarnings("all")
    4. @MyAnnotation
    5. public class Test02 {
    6. //测试元注解,重点掌握Target,Retention
    7. @MyAnnotation
    8. public void Demo() {
    9. }
    10. }
    11. //定义一个注解
    12. // Target 它表示我们自定义的注解可以用在那些地方
    13. @Target(value = {ElementType.METHOD, ElementType.TYPE})
    14. // Retention 它表示我们注解在什么时候还有效,RUNTIME > CLASS > SOURCE
    15. @Retention(value = RetentionPolicy.RUNTIME)
    16. // Documented 表示是否将我们的注解生成在JAVAdoc中
    17. @Documented
    18. // Inherited 子类可以继承父类的注解
    19. @Inherited
    20. @interface MyAnnotation {
    21. }

    4.自定义注解

    注意

    1.Annotation型定义为@interface, 所有的Annotation会自动继承java.lang.Annotation这一接口,并且不能再去继承别的类或是接口.

    2.参数成员只能用public或默认(default)这两个访问权修饰。

    3.方法的名称就是参数的名称

    4.返回类型就是参数类型(返回类型只能是基本类型String,enum,Class)

    5.可以通过default来声明参数的默认值

    6.如果只有一个参数成员,我们一般默认为value

    1. package com.lixi;
    2. import java.lang.annotation.ElementType;
    3. import java.lang.annotation.Retention;
    4. import java.lang.annotation.RetentionPolicy;
    5. import java.lang.annotation.Target;
    6. @SuppressWarnings("all")
    7. public class Test03 {
    8. @Annotation2(schools = {"大学"},id=-1)
    9. public void Demo(){
    10. }
    11. @Annotation3("jili")
    12. public void Demo1(){
    13. }
    14. }
    15. @SuppressWarnings("all")
    16. @Target({ElementType.TYPE, ElementType.METHOD})
    17. @Retention(RetentionPolicy.RUNTIME)
    18. @interface Annotation2 {
    19. //注解的参数: 参数类型 + 参数名 + ()
    20. //default表示注解默认值,有了默认值,就不用给注解赋值
    21. String value() default "jili";
    22. int count () default 0;
    23. int id () ;
    24. String[] schools() ;
    25. }
    26. @SuppressWarnings("all")
    27. @Target({ElementType.TYPE, ElementType.METHOD})
    28. @Retention(RetentionPolicy.RUNTIME)
    29. @interface Annotation3 {
    30. //单个参数使用value,可以不用写value
    31. String value();
    32. }

    一般的注解是没有那么多的参数的,上面只是演示

  • 相关阅读:
    详解Java Chassis 3与Spring Cloud的互操作
    java101-arraylist的遍历和增加
    leetcode59. 螺旋矩阵 II
    Day662.分析定位Java问题工具② -Java业务开发常见错误
    python面试题——怎么实现时间的加减计算
    解决Dev C++编译或运行报错 Source file not compiled
    [SDR] GNU Radio 系列教程(十五)—— GNU Radio GFSK 模块
    ICloneable和IComparable
    PPT的使用技巧(一):对齐、文字填充、柱状图填充
    BUU 加固题 AWDP Fix 持续更新中
  • 原文地址:https://blog.csdn.net/qq_47499256/article/details/125394552