zoukankan      html  css  js  c++  java
  • 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)直接退出程序

                     

  • 相关阅读:
    关于Vim的问题s
    突然想来说几句
    直接下载Google Play市场的APK
    编译 ijg JPEG V8 库 GIF 库
    linux下 GUI 数码相册项目 持续更新中
    nes 红白机模拟器 第8篇 USB 手柄支持
    nes 红白机模拟器 第7篇 编译使用方法
    nes 红白机模拟器 第6篇 声音支持
    使用 ALSAlib 播放 wav
    ALSA 声卡 驱动 linux 4.1.36 中变化
  • 原文地址:https://www.cnblogs.com/jiezai/p/11078877.html
Copyright © 2011-2022 走看看