FileNotFoundException io异常
ArithmeticException 算术异常
NullPointerException试图访问 null 对象引用
ArrayIndexOutOfBoundsException 数组下标越界异常
异常处理机制
try…catch语句
catch块,是用来捕获并处理try块抛出的异常的代码块。没有try块,catch块不能单独存在。我们可以有多个catch块,以捕获不同类型的异常
try{…}和catch( ){…}之间不可以添加任何代码
例
try {
int[] arr=new int[4];
System.out.println(arr[4]);
//int[] arr=null;
//System.out.println(arr[4]);
// int 10/0;
}catch(ArithmeticException e) { //try catch 可以捕获多个异常
System.out.println("出现了数学异常, ");
}catch(ArrayIndexOutOfBoundsException e) {
System.out.println("数组下标越界了,请注意修改查询的下标");
}catch(Exception e) { //父类异常 要写在下面 子类在上 如果没有继承关系 则无上下之分
System.out.println("其他异常");
}
System.out.println("*************");
catch表达式调整
JDK 7中,单个catch块可以处理多个异常类型
finally异常处理机制
finally 语句
finally语句放在try …catch语句后
fianlly语句中的代码块不管异常是否被捕获总是要执行
通常在finally语句中可以进行资源的清除操作,如:关闭打开文件、删除临时文件
对应finally代码中的语句,
即使try代码块和catch代码块中使用了return语句退出当前方法或般若break跳出某个循环,相关的finally代码块都有执行。
当try或catch代码块中执行了System.exit(0)时,finally代码块中的内容不被执行
throws (声明)关键字
如果一个方法中的语句执行时可能生成某种异常,但是并不能确定如何处理,则可以在程序所在的函数声明后,使用throws关键字抛出异常
throws关键字
如果一个方法中的语句执行时可能生成某种异常,但是并不能确定如何处理,则可以在程序所在的函数声明后,使用throws关键字抛出异常
位置:函数参数列表的后面
throws关键字后面,可以跟多个异常,中间用逗号分割
throws关键字抛出的异常,由调用该函数的函数处理。
throws关键字
方法中如果用throws关键字抛出:
非检查性异常:上一级去除异常,直到不抛出异常;
检查性异常
在调用该函数内try-catch,把异常处理掉。那么不往上一级抛出异常,程序正常执行,上一级方法并不知道曾经产生异常。
用throws声明方法抛出异常,不进行处理。谁调用谁负责处理
覆盖方法抛出异常时,可以抛出与被覆盖方法相同的异常或者被覆盖方法异常的子类异常。
throw语句
异常是通过关键字throw抛出,程序可以用throw语句引发明确的异常。
例如:
例:
//throws声明异常 FileNotFoundException
public static void method2() throws FileNotFoundException {
FileInputStream fi=new FileInputStream(new File("d:/adsf"));
}
//throws 与 throw
//throw 手动抛出异常
//throws 声明可能出现的异常
public static void method3() {
//throw new FileNotFoundException();// io
//throw new ArrayIndexOutOfBoundsException();
}
向上抛 错误信息
自定义异常类
自定义异常类
如果Java提供的异常类型不能满足程序设计的需要,我们可以定义自己的异常类型。
用户自定义的异常类应为 Exception 类(或者Exception 类的子类)的子类
子类
package com.neusoft.test4;
public class Myexception extends Exception{
public Myexception(String message) {
super(message);
}
}
测试类
package com.neusoft.test4;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class Test1 {
public static void main(String[] args) throws FileNotFoundException, Myexception {
method4();
}
public static void method4() throws Myexception {
int a=11; //1~10
if(a>10 || a<0) {
// 抛出越界异常
throw new Myexception("输入范围应为1~10,目前越界");
}
}