重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
private static voidshow() {
throw new UnsupportedOperationException(“抛出异常”);
}
看下面这段代码有什么问题?
10年积累的网站设计制作、网站设计经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计制作后付款的网站建设流程,更有兴安免费网站建设让你可以放心的选择与我们合作。
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”的编译错误原因。