文章目录
一、异常类简介
异常的概念:异常(exception)是在程序运行过程中产生的使程序终止正常运行的错误对象。常见异常:数组下标越界、整数除法中零作除数、文件找不到等
异常类:
IOException 需要导入:import java.io.IOException;
还有一个InputMismatchException异常类,表示输入不匹配异常,需要导入:import java.util.InputMismatchException
二、异常处理
1、try-catch-finally语句
try{
// 需要处理的代码
} catch (要捕获的异常的类名称 变量名){
// 异常处理代码
}[catch (要捕获的异常的类名称 变量名){
// 异常处理代码
}
finally{
// 注意finally块中的代码不管有无异常都会执行。
//在try块中使用System.exit(0);就可以不执行finally
} ]
多个catch块注意:捕获的子类异常写在前面,父类异常写在后面
如果在多个catch块捕获的异常使用相同的代码处理,则可以仅用一个catch块处理。
使用 ‘|’ 分隔
catch(ArithmeticException | ArrayIndexOutOfBoundsException me){
System.out.println("捕获到异常:" + me);
}
2、throws 声明方法抛出异常
简介:下面这个例子中,method()方法用throws子句声明抛出异常,但不在method()中处理异常,而是在调用method()的main()中用try-catch-finally语句进行异常捕获
注意:method()用throws子句声明抛出异常之后,调用它的main()不进行异常捕获会报错。或者可以在mian()方法也进行throws抛出异常,该异常交于调用main()的java虚拟机处理。
public class ThrowExceptionDemo{
static void method (int value) throws ArithmeticException,
ArrayIndexOutOfBoundsException{
方法体...
}
public static void main(String[] args){
try{
...
}catch(ArithmeticException | ArrayIndexOutOfBoundsException e){
System.out.println("捕获到:" + e);
}
}
3、throw语句抛出异常
简介:创建一个异常对象,用throw语句抛出;或者将捕获的异常对象用throw语句再次抛出
//基本形式
throw 异常类对象
//eg:
public static void method() throws IOException{
try{
throw new IOException("文件未找到"); //创建一个IOException异常对象并抛出
}catch(IOException e){
System.out.println("捕获到异常");
throw e; // 将捕获到的异常对象再次抛出,接着就是到main()中处理
}
}
4、try-with-resources语句
简介:创建I/O流对象等在使用之后需要关闭,忘记关闭文件可能导致内存泄露等问题。try-with-resources的主要优点可以自动关闭资源
注意:只有实现了java.lang.AutoCloseable接口的那些资源才可自动关闭。
基本结构:
try(
声明和创建某种资源 )
{
// 使用资源
}
[catch(Exception e){}]
[finally{}]
try-with-resources语句在处理I/O流中用的很多,具体的例子看下一章。
三、自定义异常类
简介:通常编写自定义异常类实际上是继承继承Exception类(extends Exception)
//最简单的格式:
class 自定义异常类名 extends Exception {
public 自定义异常类名(){} //无参构造方法
public 自定义异常类名(String message) { //有参构造方法
super(message);
}
}
//自定义异常类的使用:
try{
...
throw new 自定义异常类名("提示语句");
}catch(自定义异常类名 别名e){
System.out.println(e.getMessage());
}
四、断言
1、简介:断言是一个布尔表达式,可以用来检查一些关键的值或判断某种情况。程序执行断言,若结果为false程序会报告一个错误,结果为true,程序什么也不做,正常运行。通过验证断言是true,能够使程序员确信程序的正确性。
2、关键字:assert
格式:
//第一种格式
assert 布尔表达式; //如果该表达式值为false,抛出AssertionError异常
//第二种格式
assert 布尔表达式 : 详细信息 ;
3、断言的使用
默认情况下断言在运行时是关闭的,需要开启断言
//开启断言
D:\study>java –ea AssertionDemo
//关闭断言
D:\study>java –da AssertionDemo
//在类的级别或包的级别开启、关闭断言
D:\study>java –ea:package1 -da:Class1 AssertionDemo
在Eclipse中要开启断言:Run→ Run Configurations → 选择Arguments选项卡 → Arguments文本框中输入 -ea 然后执行程序
关闭断言就是删除 -ea
(1)检查控制流
在if-else和switch-case结构中,可以在不应该发生的控制支流上加上assert false语句。如果这种情况发生了,断言就能够检查出来。
switch (x) {
case 1: …;
case 2: …;
default: assert false : “x 值非法:" + x;
}
(2)检查前置条件
eg:某方法可能要求输入的参数param不能为null,就可以在方法的开头加上下面语句:
assert param != null:"参数不能为null";
eg:栈的操作,判断栈是否空、是否溢出
assert top<size : "栈溢出"
assert !isEmpty() : "栈已空"
(3)检查后置条件
在方法计算之后检查结果是否有效。
eg:对计算绝对值的方法可以在方法的结束处使用下面语句进行检查:
assert value >= 0:"结果应该大于等于0:" + value;
(4)检查程序不变量