Java多层的异常捕获

示例程序一:

public class CatchWho {
    public static void main(String[] args) {
        try {
            try {
                throw new ArrayIndexOutOfBoundsException();
            }
            catch(ArrayIndexOutOfBoundsException e) {
               System.out.println(  "ArrayIndexOutOfBoundsException" +  "/内层try-catch");
            }

            throw new ArithmeticException();
        }
        catch(ArithmeticException e) {
            System.out.println("发生ArithmeticException");
        }
        catch(ArrayIndexOutOfBoundsException e) {
           System.out.println(  "ArrayIndexOutOfBoundsException" + "/外层try-catch");
        }
    }
}

结果截图:

原因分析:由于在程序中有两个 throw 抛出了两个不同类型的错误,所以,后面紧跟的catch会捕获相应类型的错误,并执行相应的处理办法。

由于

示例程序2:

public class CatchWho2 {
    public static void main(String[] args) {
        try {
            try {
                throw new ArrayIndexOutOfBoundsException();
            }
            catch(ArithmeticException e) {
                System.out.println( "ArrayIndexOutOfBoundsException" + "/内层try-catch");
            }
            throw new ArithmeticException();
        }
        catch(ArithmeticException e) {
            System.out.println("发生ArithmeticException");
        }
        catch(ArrayIndexOutOfBoundsException e) {
            System.out.println( "ArrayIndexOutOfBoundsException" + "/外层try-catch");
        }
    }
}

结果截图:

结论:

可以有多个catch语句块,每个代码块捕获一种异常。在某个try块后有两个不同的catch 块捕获两个相同类型的异常是语法错误。

使用catch语句,只能捕获Exception类及其子类的对象。因此,一个捕获Exception对象的catch语句块可以捕获所有“可捕获”的异常。

将catch(Exception e)放在别的catch块前面会使这些catch块都不执行,因此Java不会编译这个程序。

时间: 2024-10-12 23:36:17

Java多层的异常捕获的相关文章

Java基础:异常捕获顺序

public voidtestException(){ int a[] = {1,2,3};int q = 0; try{ for(int i=0;i<a.length;i++){a[i] /= q;} }catch(ArithmeticException h){ System.out.print("ArithmeticException\n"); //执行 }catch(Exception e){ System.out.print("Exception\n"

多层的异常捕获

CatchWho.Java 源代码: public class CatchWho { public static void main(String[] args) { try { try { throw new ArrayIndexOutOfBoundsException(); //要处理的问题 } catch(ArrayIndexOutOfBoundsException e) { System.out.println("ArrayIndexOutOfBoundsException"+

动手动脑:多层的异常捕获

示例1 public class CatchWho { public static void main(String[] args) { try { try { throw new ArrayIndexOutOfBoundsException(); } catch(ArrayIndexOutOfBoundsException e) { System.out.println( "ArrayIndexOutOfBoundsException" + "/内层try-catch&qu

scala中异常捕获与处理简单使用

import java.io.IOException /** * 异常捕获与处理 */ object excepitonUse { def main(args: Array[String]): Unit = { try { throw new IOException("throw a user define exception!!!") } catch { case e1: IOException => printf("found io exception...&quo

JAVA并发,线程异常捕获

由于线程的特性,当我们启动了线程是没有办法用try catch捕获异常的,如下例: 1 package com.xt.thinks21_2; 2 3 import java.util.concurrent.ExecutorService; 4 import java.util.concurrent.Executors; 5 6 /** 7 * 线程异常捕获测试 8 * 9 * @author xue 10 * 11 */ 12 public class ThreadUncaughtExcepti

Java异常捕获

1 public class Main { 2 3 /** 4 * 在写异常处理的时候,一定要把异常范围小的放在前面,范围大的放在后面, 5 * Exception这个异常的根类一定要刚在最后一个catch里面, 6 * 如果放在前面或者中间,任何异常都会和Exception匹配的,就会报已捕获到异常的错误. 7 * @param args 8 */ 9 public static void main(String[] args) { 10 int a[] = new int[] {1,2,3,

java异常捕获的一点感悟

class Annoyance extends Exception {} class Sneeze extends Annoyance {} class Human { public static void main(String[] args) throws Exception { try { try { throw new Sneeze(); } catch ( Annoyance a ) { System.out.println("Caught Annoyance"); thro

java 异常捕获小记

java 中异常捕获常用的为: try{ //业务代码 }catch(Exception e){ //异常捕获 }finally{ // 不管有无异常, 最后都会执行到这里 } 在方法体内如果想要把异常抛出到方法外, 在定义方法的时候 需要通过 throws 来声明所要抛出的异常类型, 在调用该方法的方法内,可以捕获该异常 如: public void function(String args) throws Exception{ if(null == args){ throw new Null

java 异常捕获

异常捕获语句: try-catch(多catch块)-finally 代码格式: try-catch以及try-catch-finally try{ //一些会抛出的异常 }catch(Exception e){ //处理该异常的代码块 }finally{ //最终要执行的代码 }  语句示例: 1 try{ 2 double d = 5/0; 3 }catch(Exception e){ 4 System.out.println("算数异常"); 5 }finally{ 6 Syst