这一篇是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