众所周知,我们第一次运行程序时,程序大都不会按我们想象中的那样运行,而是会出现各种各样的错误,我们把其称之为异常。异常发生在程序的执行期间,会中断正在执行的程序的正常指令流。
异常捕捉
异常捕捉由3部分组成:
try{
//可能发生的异常
}
catch{
//激发被捕捉的异常
}
finally{
//执行异常之后的语句
}
当try语句中发生异常时,程序会跳转到catch语句块中执行,执行完后会继续运行而不会因为try处的异常而使程序结束。
虽然catch语句块可以为空也可以执行,但如此一旦程序出现了错误,原因就会变得十分难找,所以最好还是加上printStackTrace() 用于输出异常的性质
注意:无论程序中有无异常发生,无论try-catch是否顺利执行,finally语句块都会执行!
以下四种情况除外:
1.在finally语句块中发生异常
2.前面程序中使用了System.exit()退出了程序
3.程序所在线程死亡(暂时不理解)
4.关闭CPU
异常捕捉的例子:
public class Take {
public static void main(String[] args) {
try {
String str = "Bob";
System.out.println(str + "年龄是:");
int age = Integer.parseInt("20L"); // 数据类型转换
System.out.println(age);
} catch (Exception e) { // catch语句块用来获取异常信息
e.printStackTrace(); // 输出异常性质
}
System.out.println("program over"); // 输出信息
}
}
编译可以通过,输出如图:
如果没有异常捕捉,则:
public class Take {
public static void main(String[] args) {
String str = "Bob";
System.out.println(str + "年龄是:");
int age = Integer.parseInt("20L"); // 数据类型转换
System.out.println(age);
System.out.println("program over"); // 输出信息
}
}
输出如图:
可以看到System.out.println("program over");
语句未被执行
异常抛出
问:什么是抛出异常?
答:如果程序出现了异常,没有办法将具体的异常打印出来,则不做任何处理;程序中断。
如果某个方法发生了异常,但不想在当前方法中处理此异常,则可使用throws 在方法中抛出异常。
public class MyException extends Exception { // 创建自定义异常类
String message; // 定义String类型变量
public MyException(String ErrorMessagr) { // 父类方法
message = ErrorMessagr;
}
public String getMessage() { // 覆盖getMessage()方法
return message;
}
}
public class Captor {
static int quotient(int x, int y) throws MyException {
// 定义方法抛出异常
if (y < 0) { // 判断参数是否小于0
throw new MyException("除数不能是负数"); // 异常信息
}
return x / y; // 返回值
}
public static void main(String args[]) { // 主方法
try { // try语句包含可能发生异常的语句
int result = quotient(3, -1); // 调用方法quotient()
} catch (MyException e) { // 处理自定义异常
System.out.println(e.getMessage()); // 输出异常信息
} catch (ArithmeticException e) {
// 处理ArithmeticException异常
System.out.println("除数不能为0"); // 输出提示信息
} catch (Exception e) { // 处理其他异常
System.out.println("程序发生了其他的异常"); // 输出提示信息
}
}
}
输出:
除数不能是负数