东莞网站的制作,做网站来联盟怎么样,注册查询官方网站,设计网页的一般步骤大家好#xff0c;欢迎来到乐字节小乐的Java技术分享园地在Java中#xff0c;凡是可能抛出异常的语句#xff0c;都可以用try ... catch捕获。把可能发生异常的语句放在try { ... }中#xff0c;然后使用catch捕获对应的Exception及其子类。多catch语句可以使用多个catch语…大家好欢迎来到乐字节小乐的Java技术分享园地在Java中凡是可能抛出异常的语句都可以用try ... catch捕获。把可能发生异常的语句放在try { ... }中然后使用catch捕获对应的Exception及其子类。多catch语句可以使用多个catch语句每个catch分别捕获对应的Exception及其子类。JVM在捕获到异常后会从上到下匹配catch语句匹配到某个catch后执行catch代码块然后不再继续匹配。简单地说就是多个catch语句只有一个能被执行。例如public static void main(String[] args) {try {process1();process2();process3();} catch (IOException e) {System.out.println(e);} catch (NumberFormatException e) {System.out.println(e);}
}存在多个catch的时候catch的顺序非常重要子类必须写在前面。例如public static void main(String[] args) {try {process1();process2();process3();} catch (IOException e) {System.out.println(IO error);} catch (UnsupportedEncodingException e) { // 永远捕获不到System.out.println(Bad encoding);}
}对于上面的代码UnsupportedEncodingException异常是永远捕获不到的因为它是IOException的子类。当抛出UnsupportedEncodingException异常时会被catch (IOException e) { ... }捕获并执行。因此正确的写法是把子类放到前面public static void main(String[] args) {try {process1();process2();process3();} catch (UnsupportedEncodingException e) {System.out.println(Bad encoding);} catch (IOException e) {System.out.println(IO error);}
}finally语句无论是否有异常发生如果我们都希望执行一些语句例如清理工作怎么写可以把执行语句写若干遍正常执行的放到try中每个catch再写一遍。例如public static void main(String[] args) {try {process1();process2();process3();System.out.println(END);} catch (UnsupportedEncodingException e) {System.out.println(Bad encoding);System.out.println(END);} catch (IOException e) {System.out.println(IO error);System.out.println(END);}
}上述代码无论是否发生异常都会执行System.out.println(END);这条语句。那么如何消除这些重复的代码Java的try ... catch机制还提供了finally语句finally语句块保证有无错误都会执行。上述代码可以改写如下public static void main(String[] args) {try {process1();process2();process3();} catch (UnsupportedEncodingException e) {System.out.println(Bad encoding);} catch (IOException e) {System.out.println(IO error);} finally {System.out.println(END);}
}注意finally有几个特点finally语句不是必须的可写可不写finally总是最后执行。如果没有发生异常就正常执行try { ... }语句块然后执行finally。如果发生了异常就中断执行try { ... }语句块然后跳转执行匹配的catch语句块最后执行finally。可见finally是用来保证一些代码必须执行的。某些情况下可以没有catch只使用try ... finally结构。例如void process(String file) throws IOException {try {...} finally {System.out.println(END);}
}因为方法声明了可能抛出的异常所以可以不写catch。捕获多种异常如果某些异常的处理逻辑相同但是异常本身不存在继承关系那么就得编写多条catch子句public static void main(String[] args) {try {process1();process2();process3();} catch (IOException e) {System.out.println(Bad input);} catch (NumberFormatException e) {System.out.println(Bad input);} catch (Exception e) {System.out.println(Unknown error);}
}因为处理IOException和NumberFormatException的代码是相同的所以我们可以把它两用|合并到一起public static void main(String[] args) {try {process1();process2();process3();} catch (IOException | NumberFormatException e) { // IOException或NumberFormatExceptionSystem.out.println(Bad input);} catch (Exception e) {System.out.println(Unknown error);}
}练习用try ... catch捕获异常并处理。下载练习捕获异常练习 推荐使用IDE练习插件快速下载小结使用try ... catch ... finally时多个catch语句的匹配顺序非常重要子类必须放在前面finally语句保证了有无异常都会执行它是可选的一个catch语句也可以匹配多个非继承关系的异常。关注乐字节这里有更多更好的Java干货知识