java输出语句一直出错_调试错误:异常永远不会在相应的try语句的主体中抛出...

问题出在这里 .

private static void EagleLanding () {

EagleLandingException("There is a problem with the Eagle!");

System.exit(9999);

}

EagleLandingException(...) 被解释为对名为 EagleLandingException 的方法的调用 . 但这不是一种方法 . 它是一个构造函数,它的名称(类名)不在Java查找方法名称的命名空间中 . 编译错误(实际上)说“我找不到 method 被叫......” .

另一个问题是您的 EagleLanding 方法未声明为抛出异常 . 因此,当您尝试在调用者中捕获异常时,编译器会说"this is a checked exception, and since the exception is not declared as thrown, it cannot occur here" . 因此编译错误 .

写这个的正确方法是:

private static void eagleLanding () throws EagleLandingException {

throw new EagleLandingException("There is a problem with the Eagle!");

}

笔记:

new 导致创建异常对象

throw 导致抛出异常 .

throws 子句声明该方法抛出已检查的异常 .

throw 之后的语句无法访问 . 如果不删除它们,则会出现编译错误 . (并且,除了在类似的方法中调用 exit 这是一个坏主意......)

我更改了方法名称以符合Java样式规则 . 方法应以小写名称开头 .

在他的回答中,@ javaguy建议不要检查 EagleLandingException ;即声明为 RuntimeException 的子类型 .

这是正确的吗?可能是,可能不是 . 在你给我们的(高度人为的)背景中,不可能确切地知道 .

但是,Java设计人员建议开发人员应遵循以下一些通用准则:

经过检查的异常适用于可能针对异常进行某些操作的预期事件 .

未经检查的异常适用于意外事件(例如错误),其中(通常)程序员可以做的事情并不多 .

人们在决定是否使用已检查或未检查的异常时使用的另一个标准是最小化样板代码的数量;即 throws 条款 . 很多人发现它们很烦人,并会花很多时间来避免它们;例如通过将所有自定义异常声明为未选中,将自定义异常中的标准异常包装起来,等等 .

我认为最佳途径介于两者之间 . 仔细考虑将每个异常声明为已选中或未选中的含义,并使用异常层次结构来管理 throws 声明的大小 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值