企业建站有哪些步骤,新手创业开什么店最好,龙井网站建设,注册一个网页多少钱需求 定义若干个方法#xff0c;只要加了MyTest注解#xff0c;就可以在启动时被触发执行 分析 定义一个自定义注解MyTest#xff0c;只能注解方法#xff0c;存活范围是一直都在定义若干个方法#xff0c;只要有MyTest注解的方法就能在启动时被触发执行#xff0c;没有这… 需求 定义若干个方法只要加了MyTest注解就可以在启动时被触发执行 分析 定义一个自定义注解MyTest只能注解方法存活范围是一直都在定义若干个方法只要有MyTest注解的方法就能在启动时被触发执行没有这个注解的方法不能执行 package com.csdn.d8_annotation;
import java.lang.annotation.*;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class AnnotationDemo4 {MyTestpublic void test1() {System.out.println(test1);}public void test2() {System.out.println(test2);}MyTestpublic void test3() {System.out.println(test3);}/*** 启动菜单有注解的才被调用。* param args*/public static void main(String[] args) throws InvocationTargetException, IllegalAccessException {AnnotationDemo4 t new AnnotationDemo4();//a.获取类对象ClassAnnotationDemo4 c AnnotationDemo4.class;//b.提取全部方法Method[] method c.getDeclaredMethods();//c.遍历方法看是否有MyTest注解有就跑它for (Method method1 : method) {if (method1.isAnnotationPresent(MyTest.class)) {method1.invoke(t);}}}
}Target({ElementType.METHOD, ElementType.FIELD})
Retention(RetentionPolicy.RUNTIME)
interface MyTest {}
D:\Java\jdk-17\bin\java.exe
test3
test1 简单的测试框架 当主方法执行后会自动自行被检测的所有方法加了Check注解的方法判断方法是否有异常记录到文件中 package com.csdn.annotation;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Method;
/*** 简单的测试框架*/
public class TestCheck {public static void main(String[] args) throws IOException {/*Calculator calculator new Calculator();ClassCalculator clazz Calculator.class;Method[] m clazz.getDeclaredMethods();for (Method method : m) {if (method.isAnnotationPresent(Check.class)) {method.invoke(calculator);}}
*///1、创建计算器对象Calculator cal new Calculator();//2、获取字节码文件对象ClassCalculator clazz Calculator.class;//3、获取所有方法Method[] me clazz.getDeclaredMethods();int number 0;//出现异常的次数BufferedWriter bw new BufferedWriter(new FileWriter(bug.txt));for (Method method : me) {//4、判断方法上是否有Check注解if (method.isAnnotationPresent(Check.class)) {try {method.invoke(cal);} catch (Exception e) {//6、捕获异常//记录到文件中number;bw.write(method.getName() 方法出异常了);bw.newLine();bw.write(异常的名称 e.getCause().getClass().getSimpleName());bw.newLine();bw.write(异常的原因e.getCause().getMessage());bw.newLine();bw.write(--------------------------);bw.newLine();}}}bw.write(本次测试一共出现 number 次异常);bw.flush();bw.close();}}
/*** 小明定义的计算器类*/
class Calculator {Checkpublic void add() {String str null;str.toString();System.out.println(10 (1 0));}Checkpublic void sub() {System.out.println(1-0 (1 - 0));}Checkpublic void mul() {System.out.println(1*0 (1 * 0));}Checkpublic void div() {System.out.println(1/0 (1 / 0));}public void show() {System.out.println(永无bug...);}
}Target(ElementType.METHOD)
Retention(RetentionPolicy.RUNTIME)
interface Check {}
D:\Java\jdk-17\bin\java.exe
1-01
1*00 小结 以后大多数时候我们会使用注解而不是自定义注解注解的作用第一个给编译器用第二个给解析程序用注解不是程序的一部分可以理解为注解就是一个标签