import java.io.*;
class a {
public static void main(String [] args) {
try {
new a().go();
}
catch(Exception e) {
System.out.println("catch");
}
}
void go() {}
}
Already visited this link but didn't got my answer
如果考虑Exception类对象Checked:即使从go方法永远不会抛出异常对象,此代码编译也很好。确切地说,可以处理从try块抛出的已检查异常,而不处理其他异常。所以无法检查。
如果将Exception类对象视为UnChecked:Exception类不是Error或RuntimeException的子类,因此无法取消选中它。
请帮助我理解......这是一个类型的对象。
答案 0 :(得分:2)
RuntimeException是Exception的子类,因此catch块会选择已检查和未检查的异常。
答案 1 :(得分:1)
点击此链接http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html
类Exception和任何不属于RuntimeException子类的子类都是已检查的异常
所以要回答你的问题,这是一个经过检查的例外。
答案 2 :(得分:1)
Exception
is a checked exception.这更像是一种排斥;它既不是Error
也不是RuntimeException
,它们都被认为是未经检查的。
未经检查的异常类是运行时异常类和错误类。
已检查的异常类是除未经检查的异常类之外的所有异常类。也就是说,已检查的异常类是除
Throwable
以外的RuntimeException
及其子类和Error
及其子类的所有子类。
也就是说,你的设计示例仍然会编译,因为Exception
是所有运行时异常的超类,这些(由于某种原因)预计将被捕获到您的代码块中。由于您没有声明Exception
被go
声明,因此您不是必需来捕获它,因为它不是经过检查的例外。
不要在生产中使用这样的代码,因为任何已检查的异常或运行时异常将被该块捕获。
答案 3 :(得分:1)
- 如果将Exception类对象视为已检查
是。
即使Ex方法对象永远不会从go方法抛出,此代码编译也很好。
你无法知道。可能有RuntimeException.
确实可以处理从try块抛出的已检查异常,而不处理其他异常。
这不正确。已捕获的异常和将捕获运行时异常。
因此无法检查。
虚假前提下的无效扣除。
- 如果Exception类对象被视为UnChecked
检查。无需考虑其余部分。
异常类不是Error或RuntimeException的子类,因此无法取消选中它。
正确。
答案 4 :(得分:0)
异常类本身不是一个已检查过的Exception ..Checked Exceptions是异常类的子异常类e-g IOException等
有两件事。
1-你在扔它吗?
2-你是在谈论在catch条款中声明它。??
让我们通过示例演示
1-如果你要抛出任何Exception类Except(RuntimeException或其子类),那么你必须通过catch子句处理它或者通过throws声明它。无论它是Exception类还是Throwable或其他Checked Exceptions。例如
void go() throws Exception
{
throw new Exception();
} //you have to handle or declare it
现在调用方法应该处理或声明它
2-你的观点在这里你是在谈论在catch子句中声明它。 (例外与其他检查例外情况)
如果在catch中声明,则不需要抛出异常但是如果被捕获则需要抛出异常..(简单的答案就是这样)
void callingMethod()
{
try{ } // NO NEED TO THROW Exception OR Thowable
catch(Exception e){
e.printStakeTrace();
}
}
//如果出现异常的孩子,如果你正在抓住它,那么你就必须通过它>>否则编译器会告诉你通过它e-g
void callingMethod()
{
try{ } // here is compiler error..it says you have to through it
catch(IOException e){
e.printStakeTrace();
}
}