誰想 2023-03-27 17:50 采纳率: 95.1%
浏览 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 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事: