dar*_*rix 0 java exception-handling exception
我是Java初学者,并且知道try...catch语句用于处理异常; 表示当try块抛出异常时,catch执行块.所以,我的问题是,当我尝试下面的代码(没有try catch)它抛出一个未报告IOException的read()方法,但当我使用 try catch 它工作正常.
当try块中出现上述异常并exception occured打印时,为什么控件不会转移到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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我认为编译器会抛出一个异常,这就是代码与try catch一起工作的原因.但是为什么不执行catch块呢?我得错了.
编译器告诉您可能抛出异常,并且您必须满足这种可能性.
编译器正在对您的代码进行静态分析.它无法分辨代码在实践中如何实际运行.
这可能令人沮丧.例如,如果我写:
new URL("http://www.stackoverflow.com");
Run Code Online (Sandbox Code Playgroud)
编译器将坚持我捕获MalformedURLException.很明显URL很好,但编译器警告我,因为我可以URL使用以下方法构造一个对象:
new URL(potentiallyDubiousUserInput);
Run Code Online (Sandbox Code Playgroud)
我无法保证该字符串potentiallyDubiousUserInput是什么.
这些被称为已检查的异常,您必须处理它们(捕获或声明它们被进一步抛出).它们可能很痛苦,您会在Scala等语言中看到所有异常都未经检查.也就是说,您没有明确地处理它们.
有关详细信息,请参阅此问题/答案.
| 归档时间: |
|
| 查看次数: |
773 次 |
| 最近记录: |