java 强制走catch_关于java:IDE强制使用try / catch包围并且不引发异常

我了解已检查和未检查的异常之间的区别。 Java编译器迫使程序员要么用try / catch块包围检查的异常,要么在方法签名中添加throw声明。

但是有时候我看到在Eclipse中,编译器只给我一个选择,用try / catch块包围语句,而不抛出它。为什么会这样呢?这是因为在继承层次结构中,类(其中包含可能产生异常的代码)位于顶部?

例如,我正在为Hadopp映射器编写映射函数:

public void map(BytesWritable key, Text value, Context context) {

String[] fields = value.toString().split("\t");

String referrer = fields[10];

context.write(new LongWritable(referrer.length()), new Text(

referrer));

}

这是一个非常简单的地图函数,我从一行中提取一个字段,并将其长度作为键,并将其本身作为值。现在,我得到一个错误Unhandled exception type InterruptedException,该错误Context.write()抛出了,Eclipse仅给了我一个选择,用try / catch块将其包围,而不是将其向上抛出层次结构。为什么会这样呢?

作为参考,您可以在此处阅读Context.write的功能签名。

谢谢。

您可以显示一些代码示例吗? 我现在想到的唯一原因是,最终您需要捕获异常并进行处理。 引发异常用于让客户端类处理异常,您可以继续引发异常,但最终需要捕获它。

您可能还会解释"仅给我包围...的选项"的意思-您如何提出此选项?

@rcook eclipse会在您编写有错误的代码时显示快速修复,并且如果您将鼠标悬停在突出显示的区域上,则会建议一些操作

@ MoayadAl-sowayegh:我已经编辑了问题以添加示例代码。

throws是方法签名的一部分。如果要定义抽象方法,则必须遵守其签名。实现时不能添加throws。

不,您可以将其删除。 您无法添加。

你是对的。 感谢您指出。

如果一个人重写了一个未声明为抛出特定检查异常的方法,而一个人正在调用一个声明为抛出一个期望处理的异常的方法,则应捕获该异常,对其进行处理,而不是将其重新抛出。 。如果不希望被调用的方法实际上会抛出所指示的已检查异常,那么应该捕获该异常,将其包装在从RuntimeException派生的某种类型中,然后抛出该异常。有些人主张使用空捕获语句,但我认为这是一种反模式。如果期望某个方法永远不会抛出某个异常,但是无论如何都会抛出该异常,这几乎意味着存在某种条件,程序员没有考虑过并且也没有准备好处理。如果该异常被默默地吞下,程序可能会盲目地去做正确的事情,但是没有理由期望在意外的异常发生后,行为会正确。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值