誰想 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 Stata链式中介效应代码修改
  • ¥15 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错