Java异常

异常:程序出现了没有足够信息能继续执行,或者不能按照正常逻辑执行
Java 异常机制,使得我们能在某个地方集中处理要解决的问题。

异常种类:检查时异常,运行时异常
检查时异常,我们必须catch或者抛出,运行时异常不用显示捕捉。
常见运行时异常有:ClassCastException, DateTimeParseException, IllegalArgumentException, ArrayIndexOutOfBoundsException, NullPointerException等。
异常的基类是Throwable, 这个类有2个子类,一个是Error, 另一个是Exception
在实际中我们需要自定义异常类,可以继承Exception或者Throwable。
一个自定义异常的例子:

class CannotOpenException extends Exception{

    private static final long serialVersionUID = 4893739257004490618L;

}

public class TextException {
    public void throwException() throws CannotOpenException{
        System.out.println("do something");
        throw new CannotOpenException();
    }

    public static void main(String[] args) {
        try {
            new TextException().throwException();
        } catch (CannotOpenException e) {
            e.printStackTrace();
        }finally {
            System.out.println("Do some clean up.");
        }
    }

}

执行结果:

do something
Do some clean up.
CannotOpenException
    at TextException.throwException(TextException.java:11)
    at TextException.main(TextException.java:16)

有时候使用不当,异常会丢失,常见的问题是在finally执行了return

class CannotOpenException extends Exception{

    private static final long serialVersionUID = 4893739257004490618L;

}

public class TextException {
    public void throwException() throws CannotOpenException{
        try{
        System.out.println("do something");
        throw new CannotOpenException();
        }finally {
            return;
        }
    }

    public static void main(String[] args) {
        try {
            new TextException().throwException();
        } catch (CannotOpenException e) {
            e.printStackTrace();
        }finally {
            System.out.println("Do some clean up.");
        }
    }

}

执行结果:

do something
Do some clean up.

异常的继承
- 子类可以不用声明任何异常如果不调用基类的方法。如果声明只能是基类的类型。
- 构造函数可以声明任何异常,但必须包含基类的异常。


class CannotOpenException extends Exception {

}

class CannotReadException extends Exception {

}

class CannotWriteException extends Exception {

}

abstract class BaseClazz {
    public BaseClazz() throws CannotOpenException{

    }
    public void read() throws CannotReadException {

    }

    public void write() throws CannotWriteException {

    }
}
class SubClazz extends BaseClazz{

    public SubClazz() throws CannotOpenException,CannotReadException,CannotWriteException {
        //构造方法必须包含基类异常,但是可以抛出其他任何异常
    }

    @Override
    public void read() throws CannotReadException {
        super.read();//必须并且只能和基类的异常一样
    }

    @Override
    public void write()  {
        //如果不調用super方法,可以不抛出基本的异常
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值