【第12章】异常处理


一、异常类简介

异常的概念:异常(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 : "栈溢出"
assertisEmpty() : "栈已空"

(3)检查后置条件
在方法计算之后检查结果是否有效。
eg:对计算绝对值的方法可以在方法的结束处使用下面语句进行检查:

assert value >= 0:"结果应该大于等于0:" + value; 

(4)检查程序不变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值