异常----应用与异常转换


/*
 毕老师用电脑上课

 问题中设计两个对象:毕老师 电脑
 分析其中的问题:
 比如电脑蓝屏啦 电脑冒烟啦
 */
class LangPingException extends Exception
{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    LangPingException(String msg)
    {
        super(msg);
    }

}
class MaoYanException extends Exception
{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    MaoYanException(String msg)
    {
        super(msg);
    }

}
class NoPlanException extends Exception
{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    NoPlanException(String msg)
    {
        super(msg);
    }

}
class Computer 
{
    public int state = 2;
    public void run() throws LangPingException, MaoYanException
    {
        if(state == 1)
            throw new LangPingException("电脑蓝屏啦");
        if(state == 2)
            throw new MaoYanException("电脑冒烟啦");
        System.out.println("电脑运行");
    }
    public void reset()
    {
        state = 0;
        System.out.println("电脑重启");
    }
}

class Teacher
{
    private String name;
    private Computer comp;
    Teacher(String name)
    {
        this.name = name;
        comp = new Computer();
    }

    public void prelect() throws NoPlanException  
    {

        try
        {
            comp.run();
            System.out.println(name+"讲课");
        }
        catch (LangPingException e) 
        {
            System.out.println(e.toString());
            comp.reset();//能处理  就catch处理
            prelect();
        }
        catch (MaoYanException e) 
        {
            System.out.println(e.toString());
            test();//不能处理 做完能做的动作以后 再抛出让调用者知道。
            //但是 这里涉及一个问题 我们无法处理的这个问题 调用者是否可以处理?
            //拿此处的电脑冒烟来说 调用者不会修电脑 但是他更熟悉的是保持课时的进行
            //即提出 异常转换 将冒烟异常转换为计划外异常。
            throw new NoPlanException("课时无法进行:"+e.getMessage());
        }

    }
    public void test()
    {
        System.out.println("大家练习");
    }
}

public class ExceptionDemo6 {

    public static void main(String[] args) {
        Teacher t = new Teacher("毕老师");
        try
        {
            t.prelect();
        }
        catch(NoPlanException e)
        {
            System.out.println(e.toString()+":.......");
            System.out.println("换人");
        }

    }

}
//异常转换的应用场景:
/*
 class NoAddException extends Exception
 {

  }

 void addData (Data d)throws NoAddException
 {
    连接数据库
    try
    {
        添加数据。出现异常 SQLException();//因 此异常可以内部解决 所以try catch
    }
    catch(SQLException())
    {
        解决问题
        throw new NoAddException();//转换异常 抛出调用者能看懂的异常。
    }
    finally
    {
        关闭数据库
    }

    //上述操作出现了一个问题:当异常被内部消化时,若不抛出,调用者便不知道。
    //因此,我们需要告诉调用者,需要将异常做一个转换,转换成调用者能处理,能看懂的异常。
 }

 //被称为异常的封装:
  * 不该暴露的问题 就没有必要暴露出去 暴露了对方也处理不了。
 */

你可能感兴趣的:(面向对象)