1. /*
  2. * 注解类
  3. * */
  4. @Retention(RetentionPolicy.RUNTIME)
  5. @Target(ElementType.METHOD)
  6. public @interface Demo04Check {
  7. }

  

  1. /**要执行的小明定义的计算器类
  2. * @author :cza
  3. * @date :2020/3/10 16:56
  4. * @description :
  5. * @modyified By:
  6. */
  7. public class Demo04Calculator {
  8. //加法
  9. @Demo04Check
  10. public void add(){
  11. System.out.println("1 + 0 = "+(1+0));
  12. }
  13. //减法
  14. @Demo04Check
  15. public void sub(){
  16. System.out.println("1 - 0 = "+(1 - 0));
  17. }
  18. //乘法
  19. @Demo04Check
  20. public void mul(){
  21. System.out.println("1 * 0 = "+(1 * 0));
  22. }
  23. //除法
  24. @Demo04Check
  25. public void div(){
  26. System.out.println("1 /0 = "+(1/ 0));
  27. }
  28. @Demo04Check
  29. public void show(){
  30. System.out.println("永无bug...");
  31. }
  32. }

  

  1. /**
  2. * 简单的测试框架
  3. * 当主方法执行后,会自动自行被检测的所有方法(加上Demo04Check注解的方法),判断方法是否有异常,记录到文件中
  4. * @author :cza
  5. * @date :2020/3/10 17:00
  6. * @description :
  7. * @modyified By:
  8. */
  9. public class Demo4TestCheck {
  10. public static void main(String[] args) throws IOException {
  11. //1、创建计算器对象
  12. Demo04Calculator c=new Demo04Calculator();
  13. //2.获取字节码文件对象
  14. Class cls = c.getClass();
  15. //3.获取所有方法
  16. Method[] methods=cls.getMethods();
  17. int number=0; //出现异常的次数
  18. BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("check04bug.txt"));
  19. for (Method method: methods
  20. ) {
  21. //4.判断方法上是否有Check注解
  22. if(method.isAnnotationPresent(Demo04Check.class)){
  23. //5、有执行
  24. try {
  25. method.invoke(c);
  26. } catch (Exception e) {
  27. //6.捕获异常
  28. number++;
  29. bufferedWriter.write(method.getName()+"方法出现异常了");
  30. bufferedWriter.newLine();
  31. bufferedWriter.write("异常的名称:"+e.getCause().getClass().getSimpleName());
  32. bufferedWriter.newLine();
  33. bufferedWriter.write("异常的原因:"+e.getCause().getMessage());
  34. bufferedWriter.newLine();
  35. bufferedWriter.write("------------------------------");
  36. bufferedWriter.newLine();
  37. }
  38. }
  39. }
  40.  
  41. bufferedWriter.write("本次测试一共出现"+number+"次异常");
  42. bufferedWriter.flush();
  43. bufferedWriter.close();
  44.  
  45. }
  46. }

  

java自定义注解实现执行所有要测试的接口的更多相关文章

  1. java自定义注解知识实例及SSH框架下,拦截器中无法获得java注解属性值的问题

    一.java自定义注解相关知识 注解这东西是java语言本身就带有的功能特点,于struts,hibernate,spring这三个框架无关.使用得当特别方便.基于注解的xml文件配置方式也受到人们的 ...

  2. Java自定义注解和运行时靠反射获取注解

    转载:http://blog.csdn.net/bao19901210/article/details/17201173/ java自定义注解 Java注解是附加在代码中的一些元信息,用于一些工具在编 ...

  3. java自定义注解类

    一.前言 今天阅读帆哥代码的时候,看到了之前没有见过的新东西, 比如java自定义注解类,如何获取注解,如何反射内部类,this$0是什么意思? 于是乎,学习并整理了一下. 二.代码示例 import ...

  4. java自定义注解实现前后台参数校验

    2016.07.26 qq:992591601,欢迎交流 首先介绍些基本概念: Annotations(also known as metadata)provide a formalized way ...

  5. java自定义注解注解方法、类、属性等等【转】

    http://anole1982.iteye.com/blog/1450421 http://www.open-open.com/doc/view/51fe76de67214563b20b385320 ...

  6. Java自定义注解的实现

    Java自定义注解的实现,总共三步(eg.@RandomlyThrowsException): 1.首先编写一个自定义注解@RandomlyThrowsException package com.gi ...

  7. Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性)

    Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性) 前言:由于前段时间忙于写接口,在接口中需要做很多的参数校验,本着简洁.高效的原则,便写了这个小工具供自己使用(内容 ...

  8. JAVA自定义注解 ------ Annotation

    日常开发工作中,合理的使用注解,可以简化代码编写以及使代码结构更加简单,下面记录下,JAVA自定义注解的开发过程. 定义注解声明类. 编写注解处理器(主要起作用部分). 使用注解. 相关知识点介绍, ...

  9. Java 自定义注解

    在spring的应用中,经常使用注解进行开发,这样有利于加快开发的速度. 介绍一下自定义注解: 首先,自定义注解要新建一个@interface,这个是一个注解的接口,在此接口上有这样几个注解: @Do ...

随机推荐

  1. 基于casbin的RBAC权限实践

    五一假期疫情封在家也没事做,就想来优化一下一个前端容器小项目 之前的TODOlist里面有一项是权限这块时隔2年了还一直没有动手 迟迟没搞主要还是我太懒了,哈哈 其实我一直想要找一个轻量级的权限通用方 ...

  2. Go 语言快速开发入门

    目录 需求 开发的步骤 linux下如何开发Go程序 MAC下如何开发Go程序 Golang执行流程分析 编译和运行说明 Go程序开发的注意事项 Go语言的转义字符(escapechar) Golan ...

  3. gol处理命令行参数 flag

    os.Args获取命令行参数 os.Args是一个srting的切片,用来存储所有的命令行参数 package main import ( "fmt" "os" ...

  4. Blazor和Vue对比学习(基础1.2):模板语法和Razor语法

    Vue使用模板语法,Blazor使用祖传的Razor语法,从逻辑和方向上看,两者极为相似,比如: 都基于HTML 都通过声明式地将组件实例的状态(数据/方法)绑定到呈现的DOM上 都通过指令实现更加丰 ...

  5. 基于.NetCore开发博客项目 StarBlog - (6) 页面开发之博客文章列表

    系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...

  6. 企业应用架构研究系列二十六:信号量SemaphoreSlim与Semaphore

    在进行多线程程序的开发和设计的过程中,不可避免的需要引入semaphore信号量这个组件,这是.net框架提供的一个对多线程计数互斥的方案,就是允许指定的线程个数访问特定的资源而增加的 一个" ...

  7. B - A Simple Task

    https://vjudge.net/contest/446582#problem/B 这道题是一道不错的线段树练代码能力的题. #include<bits/stdc++.h> using ...

  8. 《C Primer Plus》第六版笔记--7~10章

    目录 第七章 C控制语句:分支和跳转 第八章 字符输入/输出和输入验证 第九章 函数 第十章 数组和指针 第七章 C控制语句:分支和跳转 if else 用法 if (expression) //ex ...

  9. 面试常问的dubbo的spi机制到底是什么?

    前言 dubbo是一款微服务开发框架,它提供了 RPC通信 与 微服务治理 两大关键能力.作为spring cloud alibaba体系中重要的一部分,随着spring cloud alibaba在 ...

  10. FlinkSQL源码阅读-schema管理

    在Flink SQL中, 元数据的管理分为三层: catalog-> database-> table, 我们知道Flink SQL是依托calcite框架来进行SQL执行树生产,校验,优 ...