面向对象之异常

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象之异常相关的知识,希望对你有一定的参考价值。

   异常

   异常:就是程序在运行时出现的不正常情况。

   异常的由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述,并封装成对象。其实就是java对不正常情况进行描述后的对象体现。

   对于问题的划分:两种:一种是严重的问题,一种是非严重的问题。

  1. 对于严重的,java通过Error类进行描述。对于Error一般不编写针对性的代码对其进行处理
  2. 对于非严重的,java通过Exception类进行描述。对于Exception可以使用针对性的处理方式进行处理

   无论Error或者Exception都具有一些共性内容,比如:不正常情况的信息,引发原因等。

   Throwable

         |-----Error

             ------XXXX

         |-----Exception

            ------XXXX

   异常的处理

   java提供了特有的语句进行处理

   格式:

try {
    需要被检测的代码;
 } catch(异常类   变量) {
    处理异常的代码;(处理方式)
 } finally {
    一定会执行的语句;
 }

   对捕获到的异常对象进行常见方法操作:

  1. String getMessage();获取异常信息。
  2. String toString();获取异常名称:异常信息
  3. void printStackTrace();获取异常名称,异常信息,异常出现的位置,其实JVM默认的异常处理机制,就是在调用printStackTrace(),打印异常在堆栈中的跟踪信息

   示例代码如下:

class Demo {
    int div(int a, int b) {
        return a/b;  //new ArithmeticException();
    }
}
public class ExceptionDemo {

    public static void main(String[] args) {
        Demo d = new Demo();
        try {
            int x = d.div(4, 0); //new ArithmeticException();
            System.out.println("x="+x);
        } catch(Exception e) { //Exception e = new ArithmeticException();
            System.out.println("除零啦");
            System.out.println(e.getMessage()); // / by zero
            System.out.println(e);//异常名称:异常信息
            e.printStackTrace();//异常名称,异常信息,异常出现的位置
                                //其实JVM默认的异常处理机制,就是在调用printStackTrace(),打印异常在堆栈中的跟踪信息
        }
        
        System.out.println("over");
    }

}

   在函数上声明异常(throws)。便于提高安全性,让调用者进行处理,不处理编译失败。

   如下:

class Demo {
    int div(int a, int b) throws Exception {//在功能上通过throws的关键字声明了该功能有可能会出现问题
        return a/b;  //new ArithmeticException();
    }
}
public class ExceptionDemo {

    public static void main(String[] args) {
        Demo d = new Demo();
        try {
            int x = d.div(4, 0);//new ArithmeticException();
            System.out.println("x="+x);
        } catch (Exception e) {
//            e.printStackTrace();
            System.out.println(e.toString());
        } 
        
        System.out.println("over");
    }

}

    对多异常的处理

  1. 声明异常时,建议声明更为具体的异常,这样处理的可以更具体
  2. 对方声明几个异常,就对应有几个catch块,不要定义多余的catch块。如果多个catch块中的异常出现继承关系,父类异常catch块放在最后

   建议在进行catch处理时,catch中一定要定义具体处理方式。不要简单定义一句:e.printStackTrace();也不要简单的就书写一条输出语句。

   示例如下:

class Demo {
    int div(int a, int b) throws ArithmeticException, ArrayIndexOutOfBoundsException {//在功能上通过throws的关键字声明了该功能有可能会出现问题
        
        int[] arr = new int[a];
        System.out.println(arr[4]);
        return a/b;  //new ArithmeticException();
    }
}
public class ExceptionDemo {

    public static void main(String[] args) {
        Demo d = new Demo();
        try {
            int x = d.div(5, 0);//new ArithmeticException();
            System.out.println("x="+x);
        } catch (ArithmeticException e) {
//            e.printStackTrace();
            System.out.println(e.toString());
            System.out.println("除零了");
        } catch (ArrayIndexOutOfBoundsException e) {
//            e.printStackTrace();
            System.out.println(e.toString());
            System.out.println("角标越界了");
        } catch(Exception e) {
            System.out.println("haha:"+e.toString());
        } 
        
        System.out.println("over");
    }

}

 

以上是关于面向对象之异常的主要内容,如果未能解决你的问题,请参考以下文章

面向对象之异常

Java面向对象之异常(异常处理方式)

Python学习第15篇:面向对象之异常处理

Python之面向对象异常处理

Java面向对象编程之异常处理机制

PHP面向对象程序设计之异常处理