private static voidshow() {
throw new UnsupportedOperationException(“抛出异常”);
}
看下面这段代码有什么问题?
public class SuperClass {
public void start() throws IOException{
throw new IOException("Not able to open file");
}
}
public class SubClass extends SuperClass{
public void start() throws Exception{
throw new Exception("Not able to start");
}
}
针对抛异常是IOException还是Exception,能随便写吗,结合案例说一下?
public static void start(){
System.out.println("Java Exception");
}
public static void main(String args[]) {
try{
start();
}catch(IOException e){
e.printStackTrace();
}
}
- 上面的Java异常例子代码中,编译器将在处理IOException时报错,因为IOException是受检查异常,而start方法并没有抛出IOException,所以编译器将抛出“异常,java.io.IOException不会在try语句体中抛出”,但是如果你将IOException改为Exception,编译器报错将消失,因为Exception可以用来捕捉所有运行时异常,这样就不需要声明抛出语句。我喜欢这样带有迷惑性的Java异常面试题,因为它不会让人轻易的找出是IOException还是Exception。你也可以在JoshuaBloach和NeilGafter的Java谜题中找到一些有关Java错误和异常的具有迷惑性问题。
捕获异常时,为何在catch中要注意异常层级关系?需要注意哪些问题?
public static void start() throws IOException, RuntimeException{
throw new RuntimeException("Not able to Start");
}
public static void main(String args[]) {
try {
start();
} catch (Exception e) {
e.printStackTrace();
} catch (RuntimeException e2) {
e2.printStackTrace();
}
}
- 这段代码会在捕捉异常代码块的RuntimeException类型变量“e2”里抛出编译异常错误。因为Exception是RuntimeException的超类,在start方法中所有的RuntimeException会被第一个捕捉异常块捕捉,这样就无法到达第二个捕捉块,这就是抛出“exception java.lang.RuntimeException has already been caught”的编译错误原因。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。