当前位置: 首页 > news >正文

【Java】注解与单元测试的使用【主线学习笔记】

文章目录

  • 前言
  • 注解
  • 使用场景
  • 常用注释
    • 1. @Override
    • 2. @Deprecated
    • 3. @SuppressWarnings
  • 自定义注解与元注解
      • 1. 定义自定义注解
        • 示例:
      • 2. 使用自定义注解
      • 3. 处理自定义注解
      • 4. 常见元注解
      • 总结


前言

Java是一门功能强大且广泛应用的编程语言,具有跨平台性和高效的执行速度,广受开发者喜爱。在接下来的学习过程中,我将记录学习过程中的基础语法、框架和实践技巧等,分享学习心得,对自己学习过程进行整理和总结,也希望能为其他学习Java的朋友提供一些帮助和参考。


注解

在Java中,注解(Annotation)是一种特殊类型的元数据,用于提供关于程序的结构、行为或其他信息,而不直接影响程序的运行逻辑。注解可以用于类、方法、字段、参数等元素,帮助开发者在代码中嵌入额外的说明或指令。
注解可以在类编译、运行时进行加载,体现不同的功能。

使用场景

  • 生成文档相关的注解
  • 在编译时进行格式检查(JDK内置的三个基本注解)
  • 跟踪代码依赖性,实现替代配置文件功能

常用注释

在Java中,@Override@Deprecated@SuppressWarnings是三个常用的注解,各自的用途如下:

1. @Override

  • 用途:标识一个方法是重写父类中的方法。
  • 作用:编译器会检查方法是否正确重写了超类的方法。如果方法名、参数类型或数量不匹配,编译器会报错,帮助开发者避免错误。
  • 示例
    class Parent {void display() {System.out.println("Parent");}
    }class Child extends Parent {@Overridevoid display() {System.out.println("Child");}
    }
    

2. @Deprecated

  • 用途:标记某个方法、类或字段不再推荐使用,可能在将来的版本中删除。
  • 作用:编译器会发出警告,提示开发者该元素已过时,建议使用替代方案。
  • 示例
    class OldClass {@Deprecatedvoid oldMethod() {System.out.println("This method is deprecated");}
    }
    

3. @SuppressWarnings

  • 用途:用于抑制特定的编译器警告。
  • 作用:可以指定需要抑制的警告类型,例如“unchecked”或“deprecation”,使得代码更清晰且不受不必要的警告影响。
  • 示例
    class SuppressWarningsExample {@SuppressWarnings("unchecked")void exampleMethod() {List list = new ArrayList(); // 无检查警告list.add("String");}
    }
    

自定义注解与元注解

元注解就是对现有的解释进行解释说明的注解。

以下展示创建自定义注释以及元注解的使用:

1. 定义自定义注解

使用 @interface 关键字来定义注解。可以指定一些元注解(如 @Target@Retention)来控制注解的使用范围和生命周期。

示例:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;// 定义自定义注解
@Target(ElementType.METHOD) // 该注解只能用于方法
@Retention(RetentionPolicy.RUNTIME) // 在运行时可用
public @interface MyCustomAnnotation {String value() default "Default Value"; // 注解元素,具有默认值
}

2. 使用自定义注解

可以在类或方法上使用自定义注解。

public class AnnotationExample {@MyCustomAnnotation(value = "Custom Annotation Example")public void annotatedMethod() {System.out.println("This method is annotated.");}
}

3. 处理自定义注解

使用反射可以在运行时访问和处理注解(还没学,暂时按下不表)

4. 常见元注解

  1. @Target:指定注解可以应用于哪些Java元素(类、方法、字段等)。

    • 常量对象

      • TYPE:用于类、接口(包括注解类型)或枚举的声明。
      • FIELD:用于字段的声明,包括枚举常量。
      • METHOD:用于方法的声明。
      • PARAMETER:用于方法参数的声明。
      • CONSTRUCTOR:用于构造方法的声明。
      • LOCAL_VARIABLE:用于局部变量的声明。
      • ANNOTATION_TYPE:用于注解类型的声明。
      • PACKAGE:用于包的声明。
      • TYPE_PARAMETER(自Java 1.8引入):用于类型参数的声明,可以用于泛型类型。
      • TYPE_USE(自Java 1.8引入):用于任何类型的使用位置,例如作为类型的使用。
    • 示例

      import java.lang.annotation.ElementType;
      import java.lang.annotation.Target;@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD}) // 可以应用于类、方法和字段
      public @interface MyCustomAnnotation {String value() default "Default Value";
      }
      
  2. @Retention:指定注解的生命周期,即注解在哪个阶段可用。

    • RetentionPolicy常量

      • RetentionPolicy.SOURCE:注解仅在源代码中可用,编译时会被丢弃。
      • RetentionPolicy.CLASS:注解在编译后的字节码中可用,但运行时不可用。
      • RetentionPolicy.RUNTIME:注解在运行时可用,可以通过反射读取。
    • 示例

      import java.lang.annotation.Retention;
      import java.lang.annotation.RetentionPolicy;@Retention(RetentionPolicy.RUNTIME) // 该注解在运行时可用
      public @interface MyRuntimeAnnotation {
      }
      
  3. @Documented:指示使用该注解的元素在使用javadoc工具生成文档时应包含在内。

    • 示例

      import java.lang.annotation.Documented;@Documented
      public @interface MyDocumentedAnnotation {
      }
      
    • 使用这个注解的元素在生成的文档中会被包含。

  4. @Inherited:允许子类继承父类的注解。仅适用于类注解。

    • 示例
      import java.lang.annotation.Inherited;@Inherited
      @interface MyInheritedAnnotation {
      }@MyInheritedAnnotation
      class Parent {
      }class Child extends Parent {
      }public class Main {public static void main(String[] args) {// 检查子类是否继承了父类的注解if (Child.class.isAnnotationPresent(MyInheritedAnnotation.class)) {System.out.println("Child class inherits MyInheritedAnnotation from Parent.");}}
      }
      

总结

自定义注解提供了灵活性,可以用于各种目的,如配置、标记、文档生成等。通过结合反射,开发者可以在运行时读取并处理这些注解,从而实现更强大的功能。



http://www.mrgr.cn/news/36315.html

相关文章:

  • 给自己的笔记本加一个公网IP
  • YOLOv5白皮书-第Y2周:训练自己的数据集(云jupyter运行版 )
  • 求二叉树的高度(递归和非递归)
  • JDK1.8与JDK17相互切换
  • 市面第一款 C++ 版本的U盘装机软件(即将上线)
  • 自然场景文本定位系统源码分享
  • 影刀RPA实战:网页爬虫之天猫商品数据
  • 大四党必备!推荐6款ai写作免费一键生成器在线网站
  • 掌握信息安全的钥匙:CISSP官方学习指南(OSG)第9版中文版
  • 降准降息一揽子措施点燃 A 股激情,4% 大涨之后趋势深度剖析
  • Codeforces Round 971 (Div. 4)A-G1题解
  • Redis缓存技术 基础第一篇(快速入门与安装部署)
  • 机器学习西瓜书笔记(十一) 第十一章特征选择与稀疏学习+代码
  • mac终端打开报complete 13 command not found compdef异常处理以及命令补全功能实现
  • 领导让部署一个系统服务,我该怎么弄?
  • 计算机视觉算法学习路线
  • 力扣 困难 25.K个一组反转链表
  • 新买的笔记本电脑如何打开和使用显示卡的问题
  • OpenHarmony(鸿蒙南向)——平台驱动指南【DAC】
  • python爬虫bs4库的用法