面向对象-Exception

2016-06-27  本文已影响0人  若波特

异常

定义

异常体系

Throwable
    |--Exception
        |--RuntimeException
        |--...
        |--XxxxException
    |--Error

异常体系的特点

throw和throws的用法

RuntimeException类异常除外,如果函数中抛出此异常,函数上可以不用声明

异常分为两种:

异常处理语句

try{
    需要被检测的代码
}
catch(捕获的异常对象){
    处理异常的代码
}
finally{
    一定会被执行的代码
}

异常的三种编写格式

第一种:
try{

    } catch(  ){

    }

    第二种:
try{

    } catch(  ){

    } fianlly{

    }

    第三种:
    try{

    } finally{

    }

注意:
finally中通常定义的是关闭资源代码,因为资源必须被释放。
finally语句中的代码只有一种情况下不会被执行,就是当执行到System.exit(0);


自定义异常

class MyException extends Exception{
    MyException(String message){
        super(message);
    }
}

异常的好处

异常的处理原则

    try{
        throw new AException();
    } catch (AException e){
        throw e;
    }
    try {
        throw new AException();
    } catch (AException e){
        //对AException先进行处理
        throw new BException();
    }

异常的注意事项


子父类异常示例

class BlueScriptException extends Exception{
    BlueScriptException(String message){
        super(message);
    }
}

class BrokenException extends Exception{
    BrokenException(String message){
        super(message);
    }
}

class NoPlanException extends Exception{
    NoPlanException(String message){
        super(message);
    }
}

class Computer{
    private int state = 3;
    public void run()throws BlueScriptException,BrokenException{
        if(state == 2)
            throw new BlueScriptException("电脑蓝屏了");
        if(state == 3)
            throw new BrokenException("电脑坏掉了");
        System.out.println("电脑运行");
    }
    public void reset(){
        System.out.println("电脑重启");
    }
}

class Teacher{
    private String name;
    private Computer cmt;
    Teacher(String name){
        this.name = name;
        cmt = new Computer();
    }
    public void tech()throws NoPlanException{
        try{
        cmt.run();
        System.out.println("老师开始上课");
        }
        catch(BlueScriptException e){
        System.out.println(e.getMessage());
        cmt.reset();
        }
        catch(BrokenException e){
        System.out.println(e.getMessage());
        throw new NoPlanException("课时进度无法继续");
        }
    }
    public void test(){
        System.out.println("同学们做练习题");
    }
}
class ExceptionTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        Teacher t = new Teacher("蒋老师");
        try{
            t.tech();       
        }
        catch(NoPlanException e){   
            t.test();
            System.out.println("test原因:"+e.getMessage());
        }
    }
}

输出结果:
电脑坏掉了
同学们做练习题
test原因:课时进度无法继续

RuntimeException异常示例

interface Mir {
    void mianji();
}
class Rec implements Mir{
    private double len,wid;
    Rec(double len,double wid){
        if(len<=0 || wid<=0)
            throw new NoValueException("长或宽数据不合法,请重新输入");
        this.len = len;
        this.wid = wid;
    }
    public void mianji(){
        System.out.println("长方形面积 = "+len*wid);
    }
}
class Circle implements Mir{
    private double ricl;
    public static final double PI = 3.14;
    Circle(double ricl){
        if(ricl<=0)
            throw new NoValueException("半径不合法,请重新输入");
        this.ricl = ricl;
    }
    public void mianji(){
        System.out.println("圆形面积 = "+ricl*ricl*PI);
    }
}
class NoValueException extends RuntimeException{
    NoValueException(String message){
        super(message);
    }
}
class ExceptionTest2 {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        try{
        Rec r = new Rec(4,5);
        r.mianji();
        
        Circle c = new Circle(-5);
        c.mianji();
        } catch(NoValueException e){
            System.out.println(e.toString());
        }
    }
}

输出结果:
长方形面积 = 20.0
ExceptionTest2.NoValueException: 半径不合法,请重新输入
上一篇 下一篇

猜你喜欢

热点阅读