栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

注解案例--简单的测试框架

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

注解案例--简单的测试框架

目录

一、自定义注解

1.自定义注解源代码

2.元注解

二、定义实用类

1.实用类源代码

三、解析注解

1.解析步骤

2.解析注解源代码

3.测试结果:

四、注解小结


一、自定义注解

1.自定义注解源代码
package cn.test;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Check {

}

2.元注解

自定义注解@Check

在自定义中用到了

@Retention(RetentionPolicy.RUNTIME)  该注解是表示用到该注解的注解的作用阶段    
样例注解是:   是保存到字节码文件且被JVM读取到。
@Target({ElementType.METHOD})      该注解是表示用到该注解的注解的作用类型
样例注解是:    是表面该注解的注解是作用在方法上的。

二、定义实用类

1.实用类源代码
package cn;

import cn.test.Check;

public class Calculator {
    @Check
    public void add()
    {
        System.out.println("1+0="+(1+0));
    }
    @Check
    public void sub()
    {
        System.out.println("1-0="+(1-0));
    }
    @Check
public void mul(){
    System.out.println("1*0="+(0*1));
}
@Check
public void div()
{
    System.out.println("1/0="+(1/0));
}

public void show()
{
    System.out.println("无bug.........");
}
}

给加减乘除四个方法加上了@Check注解(进行编译检查)

三、解析注解

1.解析步骤

        (1)

        创建对象
Calculator c=new Calculator();

        (2)

        获取字节码文件对象
Class aClass = c.getClass();

        (3)

        获取所有方法
Method[] methods = aClass.getMethods();

        (4)

                判断方法上是否有Check注解

                要判断  肯定要遍历

                        定义变量  --出现次数

                        定义IO流   把异常写入文档

2.解析注解源代码
package cn.test;


import cn.Calculator;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Method;


public class TestCheck {

    public static void main(String[] args) throws IOException {
//1.创建对象
        Calculator c=new Calculator();

        //2.获取字节码文件对象
        Class aClass = c.getClass();
        //3.获取所有方法
        Method[] methods = aClass.getMethods();
        //4.判断方法上是否有Check注解
        //要判断  肯定要遍历
        int  number=0;  //出现异常的次数
        BufferedWriter bw=new BufferedWriter(new FileWriter("bug.txt"));

        for (Method method:methods)
        {
            //isAnnotationPresent   方法 判断当前方法  method 对象  有没有指定的注解被加上了  被作用了

            if (method.isAnnotationPresent(Check.class))
            {
//5.有,执行
// 6.捕获异常

                try {
                    method.invoke(c);
                } catch(Exception e){
                    number++;
                    bw.write(method.getName()+"方法异常");
                bw.newLine();
                bw.write("异常名称:"+e.getCause().getClass().getSimpleName());
                bw.newLine();
                bw.write("异常原因:"+e.getCause().getMessage());
                bw.newLine();
                }

            }
            }
        bw.write("本次一个出现"+number+"次异常");
        bw.flush();
        bw.close();
        }








    }


3.测试结果:

四、注解小结

1.以后大多数时候,我们会使用注解,而不是自定义注解

2.注解给谁看:

(1)编译器

(2)给解析程序使用

3.注解不是程序的一部分,可以理解为注解就是一个标签

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1007018.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号