黑马程序员--java异常学习笔记

来源:互联网 发布:程序员平均薪资 编辑:程序博客网 时间:2024/05/01 22:04
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------

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());}}}


 

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
原创粉丝点击