注解去判断当前类是否有错误并给予反馈

博客围绕Java展开,涉及错误的类、注解和测试等内容,还提及多态、反射和JVM相关知识,属于Java后端开发领域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.错误的类

package Test3;

public class demo1 {

    @yichang
    public int jia(){
        int b=64232942;
        int c=321121213;
        b=c+b;
        return b;
    }

    @yichang
    public String z(){
        String name=null;
        return name;
    }

    @yichang
    public void ff(){
        System.out.println("1/0"+(1/0));
    }

    @yichang
    public void ffc(){
        System.out.println("1/0"+(3/0));
    }

    @yichang
    public void ffz(){
        System.out.println("1/0"+(2/0));
    }

}

注解

package Test3;

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 yichang {

}

测试

package Test3;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class demo3 {
    public static void main(String[] args) throws IllegalAccessException, InstantiationException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException {
        demo1 demo = new demo1();
//        Class<demo1> demo1Class = demo1.class;
        Class<?>  demo1Class= Class.forName("Test3.demo1");
        //返回此类的对象并返回其全部方法
        System.out.println("class" + demo1Class);
        Method[] methods = demo1Class.getMethods();
        int bug = 0;
        for (Method a : methods) {
            if (a.isAnnotationPresent(yichang.class)) {
            //判断这个方法是否有注解
                try {
                    Object invoke = a.invoke(demo);
                    System.out.println(a.getName() + "方法执行成功,结果为:" + invoke);
                    System.out.println("--------------------");
                } catch (Exception e) {
//                    e.printStackTrace();
                    bug++;
                    System.out.println(a.getName() + "的方法出现了异常");
                    System.out.println("异常出现了" + bug + "次");
                    System.out.println("异常的原因是" + e.getMessage());
                    System.out.println("异常名称是:" + e.getCause().getClass().getSimpleName());
                    System.out.println("--------------------");
                }
            }
        }
//        
//        /**
//         * demo1.class 是解析demo1的字节码,根据newInstance()方法可以
//         *  生成demo1 的对象 也就是解析类的对象  并由对象调用其方法
//         *
//         *  而Class.forName("Test3.demo1");调用其newInstance()方法
//         *  返回的是object的对象
//         *
//         *  Class.forName是反射机制的一种,用于在知道类名及其路径的
//         *  情况下获取这个类,而XXX.class 一般用于获得类型
//         *
//         *  Class.forName("XXXX");
//         *  的作用是要求JVM查找并加载指定的类
//         *  ,zhi如果在类中有静态初始化的话,
//         *  JVM必然会执行该类的静态代码段,这时是不确定该类是否已经在JVM中加载。
//         *  而XXXX.class是在JVM中加载已经加载过的类。
//         *
//         *  Class<demo1>    Class<?>
//         */
//
//        Class<demo1> demo1Class1 = demo1.class;
//        System.out.println(demo1Class1);
//        demo1 demo1 = demo1Class1.newInstance();
        int jia = demo1.jia();
        System.out.println(jia);
//        Method jia2 = demo1Class.getMethod("jia");
//        Object invoke2 = jia2.invoke(demo1);
//        System.out.println(invoke2);
//        System.out.println("---------------");
//
//        Class<?> aClass = Class.forName("Test3.demo1");
//        System.out.println(aClass);
//        Object o = aClass.newInstance();
//        Method jia1 = aClass.getMethod("jia");
//        Object invoke = jia1.invoke(o);
//        System.out.println(invoke);
//
//
        Class<demo1> demo1Class1 = demo1.class;
        System.out.println(demo1Class1);
        Class<? extends Class> aClass = demo1Class1.getClass();
        System.out.println(aClass);
//        /**
//         * .getClass()是一个对象实例的方法,
//         * 只有对象实例才有这个方法,
//         * 具体的类是没有的。类的Class类实例是通过.class获得的,
//         * 显然,类没有.getClass()方法.
//         * class Test3.demo1    System.out.println(demo1Class1);
//         * class java.lang.Class   System.out.println(aClass);
//         * getClass方法,有多态能力,运行时可以返回子类的类型信息,
//         * .class是没有多态的,是静态解析的,编译时可以确定类型信息
//         */
        Class<?> aClass1 = Class.forName(yichang);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值