java的异常机制 自定义异常等

这一篇是java的异常机制,那么到这一篇,java入门基础就结束了。


不止java python也有异常机制,因为一段程序不可能会说是完美的,如果出现意外,应该如何处理。

比如可以分返回值,就像响应信息一样,50x表示服务器内部异常,大可在程序中比如1表示正常,0表示异常,

但是程序的异常往往不会考虑周全,比如可能是请求时间过长等等。但是出现这些情况,程序不应该停止运行,

而是能够正常进行下一步(指异常出现后,程序下一步运行,是返回主页还是如何)

java 的异常机制关键字是 try catch finally


之前学过继承,java异常也有超类

Throwable是java语言中所有错误和异常的超类(万物即可抛)。它有两个子类:Error、Exception。

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

异常:Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理的核心。


举个例子 比如没有终止的递归调用

再比如常见的数组溢出

再比如分母为0


上述程序出现异常后,程序停止了,当然,拿除0来说,大可在前面判断,如果出现分母为0情况,那就怎么怎么

但是栈溢出呢,有些代码出现问题并不是都能意识到的,所以需要异常捕捉机制。

一个try需要一个catch或者finally和它对应,finally块中语句无论是否出现异常,都会输出,而catch块中只有出现异常时,才会处理。


那么能不能自定义异常呢,比如继承异常类,抛出自己的异常,当然是可以的

首先看看其他异常是怎么继承的,比如除0异常,我们可以使用throws关键字来提醒这段代码可能会抛出什么异常

看看IOException

可以看到有RuntimeException 和 Exception

如果要自定义异常类,则扩展Exception类即可,因此这样的自定义异常都属于检查异常(checked exception)。如果要自定义非检查异常,则扩展自RuntimeException。

从IOException可以看出,自定义异常应该包括:

一个无参构造函数 一个带有String参数的构造函数,并传递给父类的构造函数。 一个带有String参数和Throwable参数,并都传递给父类构造函数 一个带有Throwable 参数的构造函数,并传递给父类的构造函数。

public class IOException extends Exception {
    @java.io.Serial
    static final long serialVersionUID = 7818375828146090155L;

    /**
     * Constructs an {@code IOException} with {@code null}
     * as its error detail message.
     */
    public IOException() {
        super();
    }

    /**
     * Constructs an {@code IOException} with the specified detail message.
     *
     * @param message
     *        The detail message (which is saved for later retrieval
     *        by the {@link #getMessage()} method)
     */
    public IOException(String message) {
        super(message);
    }

    /**
     * Constructs an {@code IOException} with the specified detail message
     * and cause.
     *
     * <p> Note that the detail message associated with {@code cause} is
     * <i>not</i> automatically incorporated into this exception's detail
     * message.
     *
     * @param message
     *        The detail message (which is saved for later retrieval
     *        by the {@link #getMessage()} method)
     *
     * @param cause
     *        The cause (which is saved for later retrieval by the
     *        {@link #getCause()} method).  (A null value is permitted,
     *        and indicates that the cause is nonexistent or unknown.)
     *
     * @since 1.6
     */
    public IOException(String message, Throwable cause) {
        super(message, cause);
    }

    /**
     * Constructs an {@code IOException} with the specified cause and a
     * detail message of {@code (cause==null ? null : cause.toString())}
     * (which typically contains the class and detail message of {@code cause}).
     * This constructor is useful for IO exceptions that are little more
     * than wrappers for other throwables.
     *
     * @param cause
     *        The cause (which is saved for later retrieval by the
     *        {@link #getCause()} method).  (A null value is permitted,
     *        and indicates that the cause is nonexistent or unknown.)
     *
     * @since 1.6
     */
    public IOException(Throwable cause) {
        super(cause);
    }
}

比如自定义的话

package com.yy.ExceptionExamples;

public class CustomException extends Exception{
    
    public CustomException(){
        super();
    }

    public CustomException(String message) {
        super(message);
    }

    public CustomException(String message, Throwable cause) {
        super(message, cause);
    }

    public CustomException(Throwable cause) {
        super(cause);
    }
}

拿上面自定义异常举例,创建个方法抛出试试

上面这个方法会抛出异常,但不会处理 所以还需要try catch 来处理

  


到这里,java基础就结束了,每篇博客的内容都可以继续扩充,现在只是知道java有这么个东西

实际上,学了框架什么的,才会有更深的理解。

系列示例代码的地址: javabasic Github

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值