相关疑难解决方法(0)

Java:已检查vs未经检查的异常说明

我已经在StackOverFlow上阅读了有关已检查和未经检查的异常的多个帖子.老实说,我还是不太确定如何正确使用它们.

Joshua Bloch在" Effective Java "中说过

对可恢复条件使用已检查的异常,对编程错误使用运行时异常(第2版中的第58项)

让我们看看我是否正确理解这一点.

以下是我对已检查异常的理解:

try{
    String userInput = //read in user input
    Long id = Long.parseLong(userInput);
}catch(NumberFormatException e){
    id = 0; //recover the situation by setting the id to 0
}
Run Code Online (Sandbox Code Playgroud)

1.以上是否考虑了检查异常?

2. RuntimeException是未经检查的异常吗?

以下是我对未经检查的异常的理解:

try{
    File file = new File("my/file/path");
    FileInputStream fis = new FileInputStream(file);   
}catch(FileNotFoundException e){

//3. What should I do here?
    //Should I "throw new FileNotFoundException("File not found");"?
    //Should I log?
    //Or should I System.exit(0);?
}
Run Code Online (Sandbox Code Playgroud)

4.现在,上述代码也不能成为检查异常吗?我可以尝试恢复这样的情况吗?我可以吗?(注意:我的第3个问题在catch上面)

try{
    String …
Run Code Online (Sandbox Code Playgroud)

java exception runtimeexception checked-exceptions unchecked-exception

678
推荐指数
11
解决办法
31万
查看次数

何时选择已检查和未检查的例外

在Java(或任何其他具有已检查异常的语言)中,在创建自己的异常类时,如何确定是应该选中还是取消选中它?

我的直觉是,如果调用者能够以某种富有成效的方式恢复,那么将调用一个已检查的异常,其中未经检查的异常对于不可恢复的情况更多,但我会对其他人的想法感兴趣.

java exception checked-exceptions

197
推荐指数
10
解决办法
5万
查看次数

嵌套的Try/Catch阻止了一个坏主意吗?

假设我们有这样的结构:

Try
  ' Outer try code, that can fail with more generic conditions, 
  ' that I know less about and might not be able to handle

  Try
    ' Inner try code, that can fail with more specific conditions,
    ' that I probably know more about, and are likely to handle appropriately
  Catch innerEx as Exception
    ' Handle the inner exception
  End Try

Catch outerEx as Exception
  ' Handle outer exception
End Try
Run Code Online (Sandbox Code Playgroud)

我已经看到一些意见认为这样的嵌套Try块是不鼓励的,但我找不到任何具体的原因.

这是坏代码吗?如果是这样,为什么?

.net vb.net exception-handling

77
推荐指数
2
解决办法
7万
查看次数

抛出RuntimeException的方法是否应该在方法签名中指明它?

例如,框架/ JDK中的许多方法可能会抛出

java.lang.SecurityException 
Run Code Online (Sandbox Code Playgroud)

但是这没有在方法签名中指出(因为这是通常为已检查的异常保留的做法).我想说,在方法sigs中声明RuntimeExceptions有许多好处(例如类似于静态类型检查).我喝醉了还是其他的?

java oop exception-handling exception

74
推荐指数
4
解决办法
3万
查看次数

正确使用RuntimeException?

可能重复:
在Java中,何时应该创建已检查的异常,何时应该是运行时异常?

我什么时候应该从中派生例外RuntimeException而不是Exception

A RuntimeException不必在方法的throws子句中声明,这可能是好的,因为它不必特别列出或坏,因为显式声明方法的异常是一种好习惯.

思考?

java exception runtimeexception

18
推荐指数
2
解决办法
3万
查看次数

抛出什么例外?

我有一个函数来计算作为参数传递的列表的平均值.我想知道当我尝试计算大小为0的列表的平均值时,我应该抛出哪个Java异常.

public double mean (MyLinkedList<? extends Number> list)
{
    if (list.isEmpty())
        throw new ????????; //If I am not mistaken Java has some defined exception for this case

    //code goes here
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

java exception

17
推荐指数
2
解决办法
2万
查看次数

请解释Java中的RuntimeException以及它应该在何处使用

我在SO上进行了这个伟大的讨论,标题为:针对已检查异常的情况,但是我无法遵循应该使用RuntimeException的地方以及它与正常异常及其子类的不同之处.谷歌搜索给了我一个复杂的答案,也就是说,它应该用于处理编程逻辑错误,并且应该在没有正常情况发生时抛出,例如在switch-case结构的默认块中.

你能否在这里详细解释一下RuntimeException.谢谢.

java exception runtimeexception

10
推荐指数
2
解决办法
2万
查看次数

已检查vs未经检查的异常

我研究过:然而,对于未经检查的异常,编译器不会强制客户端程序员捕获异常或在throws子句中声明它.事实上,客户端程序员可能甚至不知道可能抛出异常.例如,StringIndexOutOfBoundsException由String的charAt()方法抛出.

这是什么意思?

根据该代码,不需要在代码中放置try catch块,但我已经看到编译器强制将代码放入try catch块中.

我很困惑他们到底是什么?

java exception-handling runtimeexception checked-exceptions

10
推荐指数
3
解决办法
1万
查看次数

未经检查的异常,如果检查会更好

我意识到已经 充分 讨论了检查异常与Java中未经检查的异常的相对优点,我不打算重新审视整个辩论.

相反,当我阅读Joshua Bloch的Effective Java,第2版时,我想问一个非常具体的问题.在我阅读时,我注意到在第59项("避免不必要地使用已检查的异常")中,Joshua在Java API中给出了一个使用已检查异常的示例.具体来说,在Object:

protected Object clone()
            throws CloneNotSupportedException
Run Code Online (Sandbox Code Playgroud)

...然后争辩说它应该是一个未经检查的例外.

如果使用API​​的程序员不能做得更好,那么未经检查的异常会更合适.未通过此测试的异常的一个示例是CloneNotSupportedException.它由Object.clone引发,只应在实现Cloneable(Item 11)的对象上调用它.实际上,catch块几乎总是具有断言失败的特征.异常的检查性质对程序员没有任何好处,但它需要努力并使程序复杂化.

然后我看着他是否有一个反向的例子,但我找不到一个.

所以我想问一下是否有人可以在Java中提供一个使用未经检查的异常的API示例,但是检查异常是更好的选择,并解释原因.一个现实世界的例子会更可取,但如果能够说明问题的话,我愿意接受一个人为的例子.

编辑: 对于那些投票决定将其视为非建设性的人,我想明确表示我不是在寻找意见,辩论,争论或扩展讨论.我也不参加民意调查.相反,我正在寻找能够清楚地分析收益如何超过成本的例子.(隐含的是承认有成本.)那就是说,我怀疑这个问题的性质是否有可能.我估计Jon Skeet不能这样做,它不可能完成.也许你是对的.如果必须,请关闭.

编辑:虽然我对这个回复不感兴趣,但我只是因为我的接受率而将此奖励给Jon.

java api-design language-design exception effective-java

10
推荐指数
1
解决办法
346
查看次数

异常或RuntimeException?

可能重复:
在Java中,何时应该创建已检查的异常,何时应该是运行时异常?

我在RuntimeException上听到了很多关于异常的事情,但没有给出明确的参数.我也看到很多关于Stack Overflow的主题,但似乎没有人直接提出这个问题(如果是这种情况,感谢关闭它作为重复并显示链接!)

我想明确知道何时使用RuntimeException以及何时使用经典Exception.

对于业务逻辑(即异常可能是用户错误(错误数据)),您是使用异常还是运行时?

当您创建自己的异常(在业务逻辑中)时,您是否有2或3个建议您选择抛出异常或运行时异常?

java exception

6
推荐指数
0
解决办法
149
查看次数