八、异常(Exception)

异常的结构体系

(只有是Throwable体系的类才具有可抛性,所以自定义异常必须是Exception或runtimeException的本类或者子类)

java.lang.Throwable : 是所有错误和异常的父接口

          |-- java.lang.Error : 错误,一些严重的错误。  如: 内存溢出,系统错误等等。我们在代码中不做处理

                                                    Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,                                                                            Error很少出现。因此,程 序员应该关注 Exception为父类的分支下的各种异常类

          |-- java.lang.Exception : Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。

                                                   可以被Java异常处理机制使用,是异常处理的核心

                                                   如:用户输入不匹配,网络连接中断等

                 Java语言提供了两大类异常:

                        ①|--编译时异常(受检异常 checked) : 指程序中必须接受检查和处理的异常,由Exception 类表示。

                                                    在编译时对其进行检查,若不处理,编译不能通过。

                        ②|--运行时异常(非受检异常 unchecked) : 程序中可以不接受检查和处理,或致命性错误异常,

                                                    由RuntimeException类或Error类表示。 可以保证程序的正常运行,但是一旦发生该异常,

                                                    会在该代码处生成一个异常对象然后以堆栈式抛出,若不对其进行处理,程序终止运行

 

非检查异常(unckecked exception):Error 和 RuntimeException 以及他们的子类。javac在编译时,不会提示和发现这样的异常,不要求在程序处理这些异常。所以如果愿意,我们可以编写代码处理(使用try…catch…finally)这样的异常,也可以不处理。对于这些异常,我们应该修正代码,而不是去通过异常处理器处理 。这样的异常发生的原因多半是代码写的有问题。如除0错误ArithmeticException,错误的强制类型转换错误ClassCastException,数组索引越界ArrayIndexOutOfBoundsException,使用了空对象NullPointerException等等。

检查异常(checked exception):除了Error 和 RuntimeException的其它异常。javac强制要求程序员为这样的异常做预备处理工作(使用try…catch…finally或者throws)。在方法中要么用try-catch语句捕获它并处理,要么用throws子句声明抛出它,否则编译不会通过。这样的异常一般是由程序的运行环境导致的。因为程序可能被运行在各种未知的环境下,而程序员无法干预用户如何使用他编写的程序,于是程序员就应该为这样的异常时刻准备着。如SQLException , IOException,ClassNotFoundException 等。

需要明确的是:检查和非检查是对于javac来说的,这样就很好理解和区分了。

自定义编译时异常

//若想自定义一个编译时的异常时就继承Excepton

public class MyException extends Exception {
    private static final long serialVersionUID = 1255565655652L;

    public MyException() {}
    // 此构造器 制造一个异常时 自己输入异常的信息,当将此异常抛出处理时 调用 e.getMessage方法 会返回你输入的信息
    public MyException(String message) {
        super(message);
    }
}

 自定义运行时异常

//若想自定义一个运行时的异常时就继承RuntimeException

public class MyRunTimseException extends RuntimeException {

    private static final long serialVersionUID = 1255565655652L;
    private int idNumber;
    public MyRunTimeException() {}

    // 此构造器 制造一个异常时 自己输入异常的信息,当将此异常抛出处理时 调用 e.getMessage方法 会返回你输入的信息
    public MyRunTimeException(String message,int idNumber) {
        super(message);        
        this.idNumber = idNumber;
    }

    public int getIdNumber() {
        return idNumber;
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值