Java异常处理机制
软件程序在运行过程中,非常可能遇到刚刚提到的这些问题,我们称之为异常,英文是:Exception。在Java的异常处理机制中,引进了很多用来描述和处理异常的类,称为异常类。异常类定义中包含了该类异常的信息和对异常进行处理的方法。 所谓异常处理,就是指程序在出现问题时依然可以正确的执行完。
Java是采用面向对象的方式来处理异常的。处理过程:
1. 抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象提交给JRE。
2. 捕获异常:JRE得到该异常后,寻找相应的代码来处理该异常。JRE在方法的调用栈中查找,从生成异常的方法开始回溯,直到找到相应的异常处理代码为止。
常见的异常:
1:ArithmeticException 数学异常,被0除
2:InputMismatchException 输入类型不匹配异常
3:java.lang.ArrayIndexOutOfBoundsException:数组下标越界异常。
4:java.io.IOException : javaIO 异常。
5:java.lang.NullPointerException:空指针异常,使用了尚未初始化的对象。
异常的分类:
Error
Error是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。
Exception
Exception是程序本身能够处理的异常,如:空指针异常(NullPointerException)、数组下标越界异常(ArrayIndexOutOfBoundsException)、类型转换异常(ClassCastException)、算术异常(ArithmeticException)等。
Exception类是所有异常类的父类,其子类对应了各种各样可能出现的异常事件:Java异常可分为:
1. RuntimeException 运行时异常
2. CheckedException 已检查异常
RuntimeException运行时异常
这类异常通常是由编程错误导致的,所以在编写程序时,并不要求必须使用异常处理机制来处理这类异常,经常需要通过增加“逻辑处理来避免这些异常”。
空指针异常:
解决空指针异常:
数组角标越界异常:
CheckedException已检查异常
所有不是RuntimeException的异常,统称为Checked Exception,又被称为“已检查异常”,如IOException、SQLException等以及用户自定义的Exception异常。 这类异常在编译时就必须做出处理,否则无法通过编译.
异常处理方式:常的处理方式有两种:使用“try/catch”捕获异常、使用“throws”声明异常。
异常的处理方式之一:捕获异常
捕获异常是通过3个关键词来实现的:try-catch-finally。用try来执行一段程序,如果出现异常,系统抛出一个异常,可以通过它的类型来捕捉(catch)并处理它,最后一步是通过finally语句为异常处理提供一个统一的出口,finally所指定的代码都要被执行(catch语句可有多条;finally语句最多只能有一条,根据自己的需要可有可无)。
注意点:
1、一个try语句必须带有至少一个catch语句块或一个finally语句块,当异常处理的代码执行结束以后,不会回到try语句去执行尚未执行的代码。
2、每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。
3、不管是否发生了异常,即使try和catch块中存在return语句,finally都必须要执行
4、finally语句块只有一种情况是不会执行的,那就是在执行finally之前遇到了System.exit(0)结束程序运行。
异常的处理方式之二:声明异常(throws子句)
当CheckedException产生时,不一定立刻处理它,可以再把异常throws出去。如果一个方法抛出多个已检查异常,就必须在方法的首部列出所有的异常,之间以逗号隔开。
throw:
1:只能用于方法体内。
2:后面跟异常对象。
3:只能跟一个异常对象
throws:
1:用在方法的声明处。参数列表的后面方法体的前面。
2:后面跟异常的类型。
3:可以跟多个异常类型。使用 逗号 分隔。