Java 异常基本结构

异常的定义:阻止当前方法或作用域继续执行的情况,即程序无法正常执行下去称之为异常。

异常的基本结构:

所有不正常的类都继承与Throwable类,包括Error类和Exception类

Error一般是JVM抛出的错误,比如StackOverFlowError,OutOfMemoryError,这些错误是无法挽回的,只能结束当前Java进程的执行;

Exception异常是Java应用抛出的,分为编译时期可检测的异常(如IOException)运行时期的异常(NullPointerException)

编译时期可检测的异常必须要处理,否则编译器会报错误,

运行时期的异常RuntimeException不需要强制处理,Exception异常一般可以通过捕获处理以后,程序可以继续正常执行。

java异常常用的解决语句:

栗子一:

try  catch  finally 语句:

public static void main(String[] args) {
        int []arr=new int[5];
        try {
            arr[5]=0;
            System.out.println(5);
        }catch (ArrayIndexOutOfBoundsException e){
            System.out.println("下标越界啦!");
            System.out.println("e.getMessage()"+e.getMessage());
            System.out.println("e.getCause()"+e.getCause());
            System.out.println("e.toString()"+e.toString());
        }finally {
           System.out.println("finally执行了");
}
}

运行结果:

下标越界啦!
e.getMessage()5
e.getCause()null
e.toString()java.lang.ArrayIndexOutOfBoundsException: 5
finally执行了

try语句块通常包括可能发生异常的代码,try语句块发生异常时,不再继续执行,try语句不能单独使用

catch用来捕获异常并且发出警告:提示、检查配置、网络连接,记录错误等。

每一个catch块用于处理一个异常。异常匹配是按照catch块的顺序从上往下寻找的,只有第一个匹配的catch会得到执行。匹配时,不仅运行精确匹配,也支持父类匹配,因此,如果同一个try块下的多个catch异常类型有父子关系,应该将子类异常放在前面,父类异常放在后面,这样保证每个catch块都有存在的意义。

finally最终执行的代码,用于关闭和释放资源。

异常的常用方法

e.toString()获取的信息包括异常类型和异常详细消息,

e.getCause()获取产生异常的原因

e.getMessage()只是获取了异常的详细消息字符串。

栗子二:

throw是用于抛出异常。

public static void main(String[] args) {
        int[] arr = new int[5];
        int i = 5;
        if (i > arr.length - 1) throw new ArrayIndexOutOfBoundsException("数组下标越界");
        System.out.println(arr[i]);
    }
}

throws用在方法签名中,用于声明该方法可能抛出的异常,方法的调用者来处理异常

   public static void main(String[] args) {
        try {
            test();
        }catch (Exception e){
            System.out.println("捕获异常");
        }
    }
    private static void test() throws ArrayIndexOutOfBoundsException{
        int[] arr = new int[5];
        int i = 5;
        if (i > arr.length - 1) throw new ArrayIndexOutOfBoundsException("数组下标越界");
        System.out.println(arr[i]);
    }

 注意的点:    1、不管有木有出现异常或者try和catch中有返回值return,finally块中代码都会执行;

                     2、finally中最好不要包含return,否则程序会提前退出,返回会覆盖try或catch中保存的返回值。

                     3.  如果方法中try,catch,finally中没有返回语句,则会调用这三个语句块之外的return结果

           4. 在try语句块或catch语句块中执行到System.exit(0)直接退出程序

                 

原文地址:https://www.cnblogs.com/jiezai/p/11078877.html