异常

xiaoxiao2021-02-27  624

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

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

对于问题的划分(2种)

一种是严重的问题,Java通过Error类进行描述 对于Error一般不编写针对性的代码对其进行处理 一种是非严重的问题,Java通过Exception类进行描述 对于Exception可以使用针对性的处理方式进行处理

无论Error或者Exception都具有一些共性内容,比如:不正常情况的信息,引发原因等 Throwable //所有错误或异常的超类 - Error - Exception

异常的处理 Java提供了特有的语句进行处理

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

有三个结合格式:

第一个格式: try{ }catch(){ } 第二个格式: try{ }catch(){ }finally{ } 第三个格式: try{ }finally{ }finally代码块:定义一定执行的代码,通常用于关闭资源 return也会执行,比如关闭数据库操作

该动作,无论数据操作是否成功,一定要关闭资源

finally只有一种情况不会执行,System.exit(0);//系统退出,JVM结束

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

String getMessage():获取异常信息

class Demo{ int div(int a,int b){ return a/b; } } class ExceptionDemo{ public static void main(String[] args){ Demo d = new Demo(); try{ int x = d.div(4,0); System.out.println(x); }catch(Exception e){ System.out.println("除零了"); System.out.println(e.getMessage());// /by zero; System.out.println(e.toString());// java.lang.ArithmeticException:/by zero e.printStackTrace(); //异常信息更全面 //其实JVM默认的异常处理机制,就是在调用printStackTrace方法,打印异常的堆栈的跟踪信息 } System.out.println("over"); } } 在函数上声明异常 便于提高安全性,让调用者进行处理,不处理编译失败 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; } } class ExceptionDemo{ public static void main(String[] args) //throws Exception{ Demo d = new Demo(); try{ int x = d.div(4,0); System.out.println(x); }catch(ArithmeticException e){ System.out.println(e.toString());// java.lang.ArithmeticException:/by zero }catch(ArrayIndexOutofBoundsException e){ System.out.println(e.toString());// java.lang.ArithmeticException:/by zero }/*catch(Exception e){ System.out.println(e.toString());// java.lang.ArithmeticException:/by zero }*/ System.out.println("over"); } }对多异常的处理 1.声明异常时,建议声明更为具体的异常,这样处理的可以更具体 2.对方声明几个异常,就对应有几个catch块,不要定义多余的catch块 如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面 建议在进行catch处理时,catch中一定要定义具体处理方式, 不要简单定义一句e.printStackTrace();,也不要简单的就书写一条输出语句

转载请注明原文地址: https://www.6miu.com/read-348.html

最新回复(0)