gpt4 book ai didi

java - java中未报告的异常处理

转载 作者:行者123 更新时间:2023-12-01 06:54:00 24 4
gpt4 key购买 nike

我是一个Java初学者,知道try...catch语句是用来处理异常的;意味着当try block 抛出异常时,catch block 将被执行。所以,我的问题是,当我尝试以下代码(没有 try catch)时,它会在 read() 方法中抛出未报告的 IOException 但当我使用 try catch 它工作正常。

try block 中发生上述异常并打印exception gone时,为什么控制权没有转移到catch语句?这是我的代码:

class Test00 {
public static void main(String args[]) {
char ch;

try {
ch=(char)System.in.read();//here exception is thrown without using try..catch
System.out.println(ch);
} catch(Exception e) {
System.out.print("exception occured");
}
}
}

我认为编译器说要抛出异常,这就是代码使用 try catch 的原因。但是为什么不执行 catch block ?是我出错了。

最佳答案

编译器告诉您可能抛出异常,并且您必须考虑这种可能性。

编译器正在对您的代码进行静态分析。它无法判断代码在实践中将如何实际运行。

这可能会令人沮丧。例如如果我写:

new URL("http://www.stackoverflow.com");

编译器会坚持要求我捕获 MalformedURLException 。很明显,URL 没问题,但编译器警告我,因为我可以使用以下方法构造 URL 对象:

new URL(potentiallyDubiousUserInput);

而且我无法保证该字符串潜在可疑用户输入会是什么。

这些被称为检查异常,您必须处理它们(捕获或声明它们以进一步抛出)。它们可能会很痛苦,而且您会在 Scala 等语言中看到所有异常都是未经检查的。也就是说,您不必明确地处理它们。

参见this question/answer了解更多信息。

关于java - java中未报告的异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17474585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com