誰想 2023-03-27 17:50 采纳率: 91.7%
浏览 21
已结题

java编译异常throws处理方式

将异常throws给jvm后,jvm默认处理:打印异常信息,并中断程序,这我是知道的。
那下面我自定义了一个编译异常,并在main方法中的if条件句抛出,编译器提示有编译异常;说明出现编译异常。
我main方法throws异常后,编译器提示正常了;处理方式是让jvm处理异常。
运行程序,程序正常运行,没有打印异常信息;那jvm也没处理啊。
jvm收没收到异常呢?还是说根本没异常?没有异常那我用的throws方法throws的谁呢?
收到的话应该直接打印呀,很困惑。
编译器判断是否有编译异常是怎样判断的呢?很迷惑这个过程


public class ExceptionTest {
    public static void main(String[] args) throws AgeException {
        int a = 1;
        if (a < 0) {
            //抛出一个编译异常
            throw new AgeException("有异常,打印信息");
        }
        System.out.println("没有异常,打印个g");
    }
}
//自定义AgeException编译异常,继承ioexception这个编译异常
class AgeException extends IOException {
    public AgeException(String s) {
        super(s);
    }
}
  • 写回答

2条回答 默认 最新

  • 关注

    你不满足那个a<0,程序没抛异常
    方法上那个throws AgeException是说你这个方法可能出现这种异常,但并不一定就会出现,你a现在不小于0,就不会触发那个throw new AgeException("有异常,打印信息");

    你可以这么理解,就是你这个方法里在某种情况下抛出异常,在方法声明上throws,是告诉你的调用者,我这可能有异常,你想好怎么处理。
    比如调用登录的方法吗,用户登录的时候,用户名不存在,在程序逻辑上就是一种异常,你就可以扔出去,但是用户名存在的时候它就不报异常。可是调用登录方法的人就得考虑,你出现异常后它怎么办。
    一般我们开发企业项目的时候,会自定义异常,这个异常会有一个code和一个message,code就是状态码,前端会根据不同的状态码做不同的跳转或者提示。

    你在方法上throws,是说我可能出现异常,这个异常我方法内部不处理,你们谁调用谁处理。然后方法里运行到throw new Exception的时候才会真的抛异常出去

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月4日
  • 已采纳回答 3月27日
  • 修改了问题 3月27日
  • 修改了问题 3月27日
  • 展开全部

悬赏问题

  • ¥15 商城生产日期批次库存问题
  • ¥15 esp8266控制共阳极wrgb灯板无法关闭所有led灯
  • ¥100 python读取速度问题
  • ¥15 stm32f407使用DMA问题
  • ¥15 您好 这个API接口该怎么弄 网站搭建好了 API也有 现在就不知道该怎么填写API 不知道怎么用
  • ¥88 用uniapp写一个多端的程序,用到高德地图,用高德的JSAPI吗?
  • ¥20 关于#c++#的问题:水果店管理系统
  • ¥30 dbLinq最新版linq sqlite
  • ¥20 对D盘进行分盘之前没有将visual studio2022卸载掉,现在该如何下载回来
  • ¥15 完成虚拟机环境配置,还有安装kettle