标签: checked-exceptions

处理构造函数中捕获的Java异常,以及最终成员

我有一些丑陋的代码,想要重构它:

public class UdpTransport extends AbstractLayer<byte[]> {
    private final DatagramSocket socket;
    private final InetAddress address;
    private final int port;
    /* boolean dead is provided by superclass */

    public UdpTransport(String host, int port) {
        this.port = port;
        InetAddress tmp_address = null;
        try {
            tmp_address = InetAddress.getByName(host);
        } catch (UnknownHostException e) {
            e.printStackTrace();
            dead = true;
            socket = null;
            address = null;
            return;
        }
        address = tmp_address;
        DatagramSocket tmp_socket = null;
        try {
            tmp_socket = new DatagramSocket();
        } catch (SocketException e) { …
Run Code Online (Sandbox Code Playgroud)

java constructor checked-exceptions

13
推荐指数
2
解决办法
1503
查看次数

已检查vs未经检查的异常

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

这是什么意思?

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

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

java exception-handling runtimeexception checked-exceptions

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

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

我已经阅读了关于此的所有内容,但我仍然不明白如何使用已检查和未检查的异常.我想我还是不能理解这个概念.我已经阅读了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
查看次数

如何在Iterable.forEach中处理IOException?

我正在玩弄将一组对象写入文件的方法.为什么使用Iterable.forEach()的下面的实现不能编译?在Eclipse中,我收到的消息是没有处理IOException.这特别令人困惑,因为我似乎正在处理IOExceptions.

  public void write(Iterable<?> objects) {
    try (BufferedWriter bw = new BufferedWriter(
        new OutputStreamWriter(
            new FileOutputStream("out.txt"), "UTF-8"));) {

      objects.forEach((o) -> bw.write(o.toString())); //Unhandled exception type IOException

  } catch (IOException e) {
    //handle exception
  }
}
Run Code Online (Sandbox Code Playgroud)

显然,下面的工作.我很感兴趣为什么以上不起作用以及如何解决它.

for (Object o : objects) { bw.write(o.toString()); }
Run Code Online (Sandbox Code Playgroud)

我已经检查了ConsumerIterable文档,他们似乎都没有建议如何解决这个问题.

java foreach lambda checked-exceptions java-8

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

是不是在try块中捕获的未经检查的异常在Java中检查了异常?

有人告诉我,在Java中,未经检查的异常可以在try块中捕获,但如果它被捕获,是不是称为已检查异常?

java exception checked-exceptions

8
推荐指数
1
解决办法
4528
查看次数

列出方法可能抛出的所有异常

我知道Java强制程序员列出该方法将抛出的所有异常,从而创建一种简单的方法来列出代码用户可能抛出的所有异常.

另一方面,.NET没有这样的功能,我们剩下的就是API文档或XML文档,其中有时会列出异常.

是否有VS的插件显示任何给定调用可能抛出的异常?鉴于反射的强大功能,不应该通过调用查看,并查看可能的所有分支通过调用并检查是否抛出任何.NET异常?

.net static-analysis exception-handling visual-studio checked-exceptions

8
推荐指数
1
解决办法
314
查看次数

子类catch块是否会捕获已检查的父异常?

我有一个带有父类的已检查异常的方法,它可以抛出父类和子类的异常

public void method() throws ParentException {
    if( false ) throw new ParentException();
    else if( true ) throw new ChildException(); // this one is thrown
}
Run Code Online (Sandbox Code Playgroud)

我有一个级联catch块,它首先有子例外

try {
    method();
} catch (ChildException e) {
    // I get here?
} catch (ParentException e) {
    // or here?

}
Run Code Online (Sandbox Code Playgroud)

哪个块会捕获抛出的异常?由于该方法仅显式声明了ParentException,因此ChildException是否会显示为ParentException的实例?

java checked-exceptions

8
推荐指数
1
解决办法
3517
查看次数

如果我没有处理我的.NET代码可能抛出的一些未经检查的异常,我怎么知道呢?

在.NET中,方法签名不会告诉我是否错过了处理我的代码可能抛出的一些异常.是否有一些工具可以警告我,如果说我正在使用HashTable删除但是没有处理ArgumentNullException?我不想在运行时感到惊讶.

这是否意味着您需要非常了解您的代码,否则未经检查的异常可能更难以使用?

.net exception checked-exceptions

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

包含多个异常的自定义异常:鼓励与否?

我正在编写将用于访问数据库的Java库.我向最终程序员抛出异常,他们使用JAR库以他/她想要的方式处理它.

我编写了一个自定义异常(下面提供)来将特定于连接的异常包装在一起,这样最终程序员就不必在代码中捕获所有这些异常.(为了方便他)

在编写Java库时,这是一个很好的做法吗?通过使用它,用户只需要在他的代码中捕获NConnectionException.

public class NConnectionException extends Exception {
private static final Logger logger = LoggerFactory.getLogger(NConnectionException.class);
public NConnectionException(Exception e) {

    if (e instanceof NullPointerException) {
        logger.error("ERROR IN READING DF");
        e.printStackTrace();
    }

    else if (e instanceof FileNotFoundException) {
        logger.error("FILE NOT FOUND");
        e.printStackTrace();

    } else if (e instanceof ParserConfigurationException)
    {
        logger.error("PARSE CONF ERR");
        e.printStackTrace();

    }
    else if (e instanceof org.xml.sax.SAXException)
    {
        logger.error("SAX ERR");
        e.printStackTrace();

    }
    else if (e instanceof IOException)
    {
        logger.error("IO ERR");
        e.printStackTrace();

    }

}
Run Code Online (Sandbox Code Playgroud)

}

java exception-handling jar checked-exceptions

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

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

我被告知我应该考虑在我的代码中对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
查看次数