Java异常学习笔记
一. java异常的定义
在《java编程思想》中这样定义 异常:阻止当前方法或作用域继续执行的问题。虽然java中有异常处理机制,但是要明确一点,决不应该用"正常"的态度来看待异常。绝对一点说异常就是某种意义上的错误,就是问题,它可能会导致程序失败。之所以java要提出异常处理机制,就是要告诉开发人员,你的程序出现了不正常的情况,请注意。(异常的由来:在程序运行时出现的不正常情况,通过java类的形式进行描述并封装成对象。)
二.Java异常的体系
Throwable
|---Error :理用于指示合理的应用程序不应该试图捕获的严重问题。一般不写针对 性的代码进行处理。
|---Exception:指出了合理的应用程序想要捕获的条件。可以使用针对性的处理 方式进行处理。
|---RuntimeException:运行时异常。当该异常发生时希望程序停止。
三.Java异常的处理
当异常发生时,可以使用两种方法处理。第一种:抓取异常。第二种:向上抛出异常。
(1)抓取异常:
Java提供了特有的语句进行处理。
Try{}catch(){}:处理语句:
try{
需要被检测的代码
}
catch(异常类 变量){
异常处理代码
}
finally{
一定会被执行的代码(一般用来关闭资源)
}
(2)向上抛出异常
throw和throws的区别
Throw用在函数内,后面跟的是异常对象
Throws用在函数上,后面跟的是异常类,可以有多个,用逗号分开。(和 implements相似)
四.Java异常的使用
Eg.
/*
* 需求:毕老师用电脑上课。过程中可能出现的问题:电脑蓝屏,电脑冒烟
* 面向对象分析:(名词提取法)
* 涉及对象:老师,电脑。
* 出现的问题(异常):
* 电脑蓝屏:BlueScreenException :可以通过重启电脑解决
* 电脑冒烟:SmokeException :需要用其他方式解决
*
*
*/
class NoPlanException extends Exception{ // 未知异常
NoPlanException(String msg){
super(msg);
}
}
class BlueScreenException extends Exception { // 蓝屏异常
BlueScreenException(String msg) {
super(msg);
}
}
class SmokeException extends Exception { // 冒烟异常
SmokeException(String msg) {
super(msg);
}
}
class Computer {
private int state = 3; // state取值为1,2,3(1:正常运行;2:蓝屏异常;3:冒烟异常)
// 用枚举会好一些
public void run() throws BlueScreenException, SmokeException {
switch (state) {
case 1: // 正常运行
System.out.println("电脑启动");
System.out.println("电脑运行");
break;
case 2: // 蓝屏异常
System.out.println("电脑启动");
System.out.println("电脑蓝屏了...");
throw new BlueScreenException("电脑蓝屏了...");
case 3: // 冒烟异常
System.out.println("电脑启动");
System.out.println("电脑冒烟了...");
throw new SmokeException("电脑冒烟了...");
}
}
public void restart() {
state = 1; // 电脑恢复正常运行状态
System.out.println("电脑重启...");
System.out.println("电脑运行");
}
}
class Teacher // 老师类
{
private String name;
private Computer computer; // 面向对象组合
Teacher(String name) {
this.name = name;
computer = new Computer();
}
public void prelect() throws NoPlanException {
try {
computer.run();
System.out.println(name + "用电脑讲课");
} catch (BlueScreenException e) {
computer.restart(); // 出现蓝屏异常,重启电脑解决问题
} catch (SmokeException e) {
NoPlanException otherException =
new NoPlanException("教学延误"); // 老师无法处理冒烟问题,向上抛出异常
otherException.initCause(e); // 抛出新异常时,吧导致新异常的原因记录下来,以便分析和修改程序
throw otherException;
}
}
}
public class ExceptionDemo {
public static void main(String[] args) {
Teacher t = new Teacher("毕老师");
try {
t.prelect();
} catch (NoPlanException e) {
System.out.println("放假: "+e.getMessage()+" "+e.getCause());
}
}
}