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

Java的注解(Annotation)

Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。Java 中的类、构造器、方法、成员变量、参数等都可以被注解进行标注。例如JUnit单元测试中的@Test方法,可以使得方法直接运行。

JUnit单元测试@Test

单元测试是针对最小的功能单元编写测试代码,Java程序最小的功能单元是方法。单元测试就是针对Java方法的测试,进而检查方法的正确性。目前测试方法在只有一个main方法,如果一个方法的测试失败了,其他方法测试会受到影响。而且无法得到测试的结果报告,需要程序员自己去观察测试是否成功。也无法实现自动化测试。

JUnit是使用Java语言实现的开源单元测试框架。

使用test需要 1.导入JUnit包

随便写一个类:

2.测试方法必须是公共的无参数无返回值的非静态方法。3.在测试方法上使用@Test注解。4.在测试方法中完成被测试方法的预期正确性测试。5.选中测试方法,运行

Junit常用注解

@Test

测试方法

@Before

用来修饰实例方法,该方法会在每一个测试方法执行之前执行一次。

@After

用来修饰实例方法,该方法会在每一个测试方法执行之后执行一次。

@BeforeClass

用来静态修饰方法,该方法会在所有测试方法之前只执行一次。

@AfterClass

用来静态修饰方法,该方法会在所有测试方法之后只执行一次。

注解-自定义注解

注解就是对Java中类、方法、成员变量做标记,然后进行特殊处理。自定义注解就是自己做一个注解来使用。

格式: public @interface 注解名称 { public 属性类型 属性名() default 默认值 ;}

两个元注解,用于注解 注解 的:

@Target: 约束自定义注解只能在哪些地方使用,

Target中可使用的值定义在ElementType枚举类中,常用值如下 :

TYPE,类,接口

FIELD, 成员变量

METHOD, 成员方法

PARAMETER, 方法参数

CONSTRUCTOR, 构造器

LOCAL_VARIABLE, 局部变量

@Retention:申明注解的生命周期

常用值如下 :

SOURCE: 注解只作用在源码阶段,生成的字节码文件中不存在

CLASS: 注解作用在源码阶段,字节码文件阶段,运行阶段不存在,默认值.

RUNTIME:注解作用在源码阶段,字节码文件阶段,运行阶段(开发常用)

自定义注解-1格式

//注解
public @interface myAnnotation1 {String name();String[] names();
}
//使用
@myAnnotation1(name = "JavaE",names = {"123","456"})
public class AnnotationD1 {@myAnnotation1(name = "hello",names = {"123","456"})public static void main(String[] args) {}
}

注解解析

注解的操作中经常需要进行解析,注解的解析就是判断是否存在注解。

与注解解析相关的接口:

Annotation: 注解的顶级接口,注解都是Annotation类型的对象

AnnotatedElement:该接口定义了与注解解析相关的解析方法

常用方法:

Annotation[] getDeclaredAnnotations()

获得当前对象上使用的所有注解,返回注解数组。

T getDeclaredAnnotation(Class<T> annotationClass)

根据注解类型获得对应注解对象

boolean isAnnotationPresent(Class<Annotation> annotationClass)

判断当前对象是否使用了指定的注解,如果使用了则返回true,否则false

自定义注解-2 模拟JUnit

1.定义一个自定义注解MyTest,只能注解方法,存活范围是一直都在(元注解)。2.定义若干个方法,只要有@MyTest注解的方法就能在启动时被触发执行,没有这个注解的方法不能执行。

@Target({ElementType.METHOD,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyTest {
}
public class Demo1 {@MyTestpublic void test1(){System.out.println("1");}public void test2(){System.out.println("2");}@MyTestpublic void test3(){System.out.println("3");}public static void main(String[] args) throws Exception{Demo1 d1=new Demo1();Class c=Demo1.class;//反射第一步,获取类对象//获取全部方法Method[] methods=c.getDeclaredMethods();for (Method method : methods) {//如果方法存在xx注解if(method.isAnnotationPresent(MyTest.class)){method.invoke(d1);}}}
}

http://www.lryc.cn/news/31984.html

相关文章:

  • 信息系统项目管理师:配置管理
  • web餐饮开源程序
  • 28个案例问题分析---027---单表的11个Update接口--MyBatis
  • 大数据开发治理平台 DataWorks
  • Xshell的下载、使用、配置【ssh、telnet、串口】
  • C++回顾(七)—— 面向对象模型
  • 开源监控服务uptime-kuma
  • JavaScript混淆技术:了解其核心原理和常用手段
  • 大型医院云HIS系统:采用前后端分离架构,前端由Angular语言、JavaScript开发;后端使用Java语言开发 融合B/S版电子病历系统
  • SAP UI5 Upload/Download file through NetWeaver Gateway
  • opencv校正图像
  • JavaScript:函数与箭头函数的区别
  • 八股文(四)
  • XSS挑战赛(xsslabs)1~10关通关解析
  • 什么是以太网供电POE
  • 【JUC2022】第七章 AQS、ReentrantReadWriteLock 和 StampedLock
  • Spark 磁盘作用
  • 三、Spark 内存管理
  • Java 面试常见项目问题回答
  • 文件上传和下载(原生JS + SpringBoot实现)
  • 【C语言学习笔记】:安全性
  • Linux - 磁盘存储管理 磁盘引入
  • 分割std::string成多个string
  • 3月多国更新进出口产品规定
  • nacos相关面试题
  • Linux基础命令-groupmems管理组群的成员
  • css系统化学习
  • AI的简单介绍
  • 【Linux】-- 进程间通讯
  • STM32模拟SPI时序控制双路16位数模转换(16bit DAC)芯片DAC8552电压输出