异常处理
异常的定义:在程序中,错误可能产生于程序员没有预料到的各种情况,或者是超出了程序员可控范围的环境因素,如试图打开一个根本不存在的文件等,在Java中,这种在程序运行时可能出现的一些错误称为异常
例子:
public class Baulk {
public static void main(String[] args) {
// TODO Auto-generated method stub
int result=3/0;
System.out.println(result);
}
}
//运行结果报错
//Exception in thread "main" java.lang.ArithmeticException: / by zero
// at Baulk.main(Baulk.java:6)
捕捉处理异常
try{
//程序代码块
}catch(Exceptiontype e){
//对Exceptiontype的处理
}
finally{
}
注:finally代码块,无论程序是否发生异常都会执行。
Exception对象中最常用的三个方法:
(1)getMessage()方法:获取有关异常事件的信息。
(2)toString()方法:获取异常的类型与性质。
(3)printStackTrace()方法:获取异常事件发生时执行堆栈的内容。
遇到需要处理多种异常信息的情况时,可以在一个try代码块后面跟多个catch代码块,注意:如果使用了多个catch代码块,则catch代码块中的异常类顺序是先子类后父类,因为父类的引用可以引用子类的对象。Exception是所有异常的父类。
有三种特殊情况,finally块不会被执行
(1)在finally代码块中发生了异常
(2)在前面的代码中使用了System.exit()退出程序
(3)程序所在的线程死亡
在方法中抛出异常
使用throws关键字
//返回值类型名 方法名(参数表)throws 异常类型名{
// 方法体
//}
public class Shoot {
static void pop() throws NegativeArraySizeException{
//定义方法并且抛出NegativeArraySizeException异常
int[] arr=new int[-3];
}
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
pop();
} catch (NegativeArraySizeException e) {
// TODO: handle exception
System.out.println("pop()方法抛出的异常");
}
}
}
使用throw关键字
throw关键字通常用于在方法体中“制造”一个异常,程序在执行到throw语句时立即终止,它后面的语句都不执行。
//throw new 异常类型名(异常信息)
public class ThrowTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
int num1=25;
int num2=0;
int result;
if(num2==0){
throw new ArithmeticException("这都不会,傻批,除数为0了");
}
result=num1/num2;
System.out.println("两数商为"+result);
}
}
//控制台输出
//Exception in thread "main" java.lang.ArithmeticException: 这都不会,傻批,除数为0了
// at com.cdu.rsj.ThrowTest.main(ThrowTest.java:11)
throws和throw的区别:
throws用在方法声明后面,表示抛出异常,由方法的调用者处理,而throw用在方法体内,用来制造一个异常,由方法体内的语句处理。
throws是声明这个方法会抛出这种类型的异常,以便使它的调用者知道要捕获这个异常,而throw是直接抛出一个异常实例。
throws表示出现异常的一种可能型,并不一定会发生这些异常,如果使用throw则一定会产生某种异常。