标签: unchecked-exception

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中,抛出已检查异常的方法(异常或其子类型 - IOException,InterruptedException等)必须声明throws语句:

public abstract int read() throws IOException;
Run Code Online (Sandbox Code Playgroud)

不声明throws语句的方法不能抛出已检查的异常.

public int read() { // does not compile
    throw new IOException();
}
// Error: unreported exception java.io.IOException; must be caught or declared to be thrown
Run Code Online (Sandbox Code Playgroud)

但是在安全方法中捕获已检查的异常在java中仍然是合法的:

public void safeMethod() { System.out.println("I'm safe"); }

public void test() { // method guarantees not to throw checked exceptions
    try {
        safeMethod();
    } catch (Exception e) { // catching checked exception java.lang.Exception
        throw e; …
Run Code Online (Sandbox Code Playgroud)

java exception try-catch checked-exceptions unchecked-exception

34
推荐指数
3
解决办法
5247
查看次数

未经检查的异常或运行时异常之间的区别

这是一个面试问题.未检查的异常和错误之间的主要区别是什么,因为两者都没有被捕获?他们将终止该计划.

java exception unchecked-exception

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

如何在java中识别已检查和未检查的异常?

在阅读关于异常的同时,我总会遇到检查异常和未经检查的异常,所以想知道如何区分哪个是什么?

编辑:我想知道我是否创建了任何异常类,那么我如何创建一个已选中或未选中?

每个人的意义是什么?

java exception-handling checked-exceptions unchecked-exception

14
推荐指数
2
解决办法
9491
查看次数

有没有简单的方法来查看Kotlin函数抛出的异常?

我主要了解检查异常的潜在问题以及为什么Kotlin省略它们.但是,我遇到的问题是我找不到任何简单的方法来向调用者明确指出函数可能抛出的异常.

我已经在Python中遇到过无数次问题,我的程序在运行了几个月之后会崩溃,因为我没有意识到我正在使用的某个库中的函数会引发一个特殊的异常.虽然被迫捕获异常可能会有很大问题,但很清楚地看到函数可以抛出的所有潜在异常.

回到这个问题,是否有任何简单的方法可以查看函数在Kotlin中抛出的异常?对于用Kotlin调用的Java编写的方法怎么样?即使只是在工具(intelliJ).我不打算用javadoc或kdoc编写它,因为你正在使用的函数的编写者可能已经省略了它.

exception-handling exception intellij-idea kotlin unchecked-exception

13
推荐指数
1
解决办法
2437
查看次数

声明方法是否会抛出未经检查的异常是否有优势?

如果我有一个抛出未经检查的异常的方法,例如:

void doSomething(int i) {
  if (i < 0) throw new IllegalArgumentException("Too small");
  // ...
}
Run Code Online (Sandbox Code Playgroud)

明确声明该方法抛出异常是否有任何好处,即

void doSomething(int i) throws IllegalArgumentException {
  if (i < 0) throw new IllegalArgumentException("Too small");
  // ...
}
Run Code Online (Sandbox Code Playgroud)

与(或除了)描述javadoc中的行为相反:

/**
 * This method does something useful.
 * @param i some input value
 * @throws IllegalArgumentException if {@code i < 0}
 */
void doSomething(int i) {
  if (i < 0) throw new IllegalArgumentException("Too small");
  // ...
}
Run Code Online (Sandbox Code Playgroud)

我声称它的原因是没有用的throws是:

  • throws没有提供关于抛出异常的情况的信息,只提供可能抛出的异常;
  • 因为它是一个未经检查的异常,我不会被迫在调用代码时处理异常.我只会真的知道如果我去看看它的执行情况可能会被抛出 …

java exception unchecked-exception

12
推荐指数
2
解决办法
1160
查看次数

很难理解已检查和未检查的异常

我已经阅读了关于此的所有内容,但我仍然不明白如何使用已检查和未检查的异常.我想我还是不能理解这个概念.我已经阅读了StackOverflow,最好使用未经检查而不是检查异常,但Eclipse 强制我使用已检查的异常,如FileNotFoundException(AFAIK,如果Eclipse强制我插入try/catch块,它是一个已检查的异常).我想知道,有没有办法检查转换为未检查?到底该处理什么?我不明白处理异常是什么.

我在这里有这个例子,我真的想知道如何处理(?)这个.这是一个经过检查的例外,对吧?

public void readFile() {
    File foo = new File("./foo.bar");
    try {
        BufferedReader bufferedReader = new BufferedReader(new FileReader(foo));
    } catch (FileNotFoundException e) {
        // What should I do here?
    }
    getDataFromFile(bufferedReader);
}
Run Code Online (Sandbox Code Playgroud)

我见过人们在这里做的各种事情.有些人会打印堆栈跟踪,这就是我通常所做的,而且我没有看到它的问题.它为我提供了调试所需的信息.有些人会忽略它们,我认为不应该这样做(我看到JNode OS引导程序忽略了异常).有些人只是throws在签名中添加声明.有些人会在这件事中抛出更多例外!(我想也许这是使用unchecked而不是checked方法?)

此外,如果你添加throws声明,你将被迫进一步放置一个try/catch块,如果你有一个非常大的应用程序,这是不方便的.对不起,我只是一无所知.完全.我正在努力学习优雅而优雅的设计,这让我感到折磨.

java exception-handling exception checked-exceptions unchecked-exception

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

为什么应该尝试在已检查的异常上抛出未经检查的异常?

我被告知我应该考虑在我的代码中对Checked异常抛出Unchecked异常,而不仅仅是这样,而是用我自己的扩展RuntimeException.现在,我确实理解了两者之间的区别,但仍然不明白我为什么要这样做?

如果我有这个方法标题,抛出2种异常:

public static Optional<String> getFileMd5(String filePath) throws NoSuchAlgorithmException, IOException {}
Run Code Online (Sandbox Code Playgroud)

为什么我要用一个(不太详细的)例外替换它们?

java exception-handling checked-exceptions unchecked-exception

7
推荐指数
1
解决办法
1701
查看次数

Java - checked vs unchecked异常 - 仅从代码中说出来?

是否可以通过查看代码来判断异常类是经过检查还是未经检查?我一直认为,如果它扩展了Exception,则会进行检查,但是RuntimeException会扩展Exception并且取消选中.RuntimeException可能是弯曲该经验法则的唯一类,其他未经检查的异常如果不扩展RuntimeException则必须扩展Throwable.但是,我没有看到RuntimeException与Exception的区别.我想知道是否在解释器本身内部定义了差异?

java unchecked-exception

6
推荐指数
1
解决办法
424
查看次数

是否可以在Java中禁用Checked Exception?

我正在阅读有关Java中已检查和未检查的异常的文章,并找到此文章/链接:https : //projectlombok.org/disableCheckedExceptions.html

根据这篇文章,这只是为javac开发的一种hack。

考虑下面的代码片段:

import java.io.*;
class Example
{  
    public static void main(String args[]) throws IOException
    {
        FileInputStream fis = null;
        fis = new FileInputStream("myfile.txt"); 
        int k; 

        while(( k = fis.read() ) != -1) 
        { 
            System.out.print((char)k); 
        } 
        fis.close();    
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里我必须写, public static void main(String args[]) throws IOException 因为我正在尝试打开文件。在这里,“ throws”子句是必须的。没有它,我会得到一个错误。如果我确定要打开的文件的存在怎么办。提到的位置中的iemyfile.txt。在某些时候,您可能会觉得代码不需要检查异常。

Java是否提供了根据需要禁用检查异常的功能?

即使做了很多研究,我也找不到合适的答案。

java exception checked-exceptions unchecked-exception

5
推荐指数
1
解决办法
2353
查看次数