12 异常处理
12.1异常概述
- 算术异常(ArithmeticException)、空指针、数组溢出等等。
- 当某一方法发生错误,这个方法创建一个对象并且把它传递给运行时系统,这个对象是异常对象。
- 异常处理机制,将非正常情况下的处理代码与程序的主逻辑分离,在编写代码主流程的同时在其他地方处理异常。
12.2处理程序异常错误
- 在当前方法中捕捉处理异常
- 将异常向上抛出由方法调用者处理
12.2.1错误
- NumberFormatException异常
12.2.2捕捉异常
-
try-catch语句
-
package com; public class Take { public static void main(String[] args) { try {//try语句包含可能出现异常的程序代码 String str = "lili"; System.out.println(str+"年龄是:"); int age = Integer.parseInt("20L"); System.out.println(age); } catch (Exception e) {//catch语句块用来获取异常信息//Exception是try代码块传递给catch代码块的变量性质,e为变量名。 //e.getMessage:输出错误性质 //e.toString:给出异常的类型与性质 //e.printStackTrace():指出异常的类型性质栈蹭此及出现在程序中的位置 e.getMessage();//输出异常性质 } System.out.println("program over"); } }
- 当try代码块语句发生异常,程序转到catch代码块执行,执行完catch代码块后继续执行后续代码。
- java异常处理是结构化的,不会因为一个异常影响整个程序运行。
- catch语句要有处理异常的代码
-
-
finally语句
-
完整的异常处理语句一定要包含finally语句,不管程序中有无异常发生,并且不管之间的try-catch是否顺利执行完毕,都会执行finally语句
-
finally块不会被执行的四种情况:
- finally语句块中发生异常
- System.exit
- 线程死亡
- 关闭CPU
-
12.3java常见异常
《从入门到精通》P203
12.4自定义异常
-
用户创建自定义异常类步骤
-
创建自定义异常类
-
在方法中throw异常对象
-
在当前抛出异常的方法中处理异常用try-catch;在方法声明处通过throws抛出异常
-
在出现异常方法的调用者中捕获并处理异常。
-
package com; class MyException extends Exception{ public MyException(String ErrorMessage){ super(ErrorMessage); } } public class Tran { static int avg(int number1,int number2) throws MyException{ if(number1<0||number2<0){ throw new MyException("不可以使用负数"); } if(number1>100||number2>100){ throw new MyException("数值太大了"); } return (number1+number2)/2; } public static void main(String[] args){ try{ int result=avg(102,150); System.out.println(result); } catch(MyException e){ System.out.println(e); } } }
-
12.5在方法中抛出异常
12.5.1使用throws关键字抛出异常
-
static int avg(int number1,int number2) throws MyException{
12.5.2使用throw关键字抛出异常
-
throw new MyException("不可以使用负数");
12.6运行时异常
- RuntimeException是程序运行过程中产生的异常
- Throwable
- Error:描述java运行系统的内部错误以及资源耗尽的错误,较严重
- LinkageError
- IOError
- 其他子类
- Exception:非致命类,可以通过捕捉处理使程序继续执行
- RuntimeException
- ClassCastException
- ArraySizeException
- 其他子类
- 其他子类
- RuntimeException
- Error:描述java运行系统的内部错误以及资源耗尽的错误,较严重
12.7异常的使用原则
- 在当前方法声明中使用try-catch语句捕获异常
- 一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或异常的子类
- 如果父类抛出多个异常,那么覆盖方法必须抛出那些异常的一个子集,不能抛出新异常。