
-
RuntimeException
:运行时异常,编译阶段不会出现异常提醒,是运行的时候出现的,也叫非检查异常(Unchecked Exceptions)
. -
非运行时异常:
编译异常
,也叫检查异常(Checked Exceptions)
.
java
package JavaProjets;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
* author: Warren */public class Main {
public static void main(String[] args) {
//编译时异常,必须处理,不然代码报错
// String time="2021-09-10";
// SimpleDateFormat sdf=new SimpleDateFormat(time);
//
// Date date=sdf.parse(time);
// System.out.println(date);
//运行时异常,编译阶段不需要处理
// int []arr={1,2,3};
// System.out.println(arr[5]);
}
}
异常的作用:查看bug的信息,或者作为方法的一种特殊的返回值,告诉调用者底层的执行情况.
处理异常
- jvm处理异常的
默认方式
:把异常的关键信息打印在控制台,并终止程序的执行,出现异常位置下面的代码不再执行. - 捕获异常:使用
try....catch
,可以让程序继续往下执行而不停止.
java
package JavaProjets;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
* author: Warren */public class Main {
public static void main(String[] args) {
int []arr={1,2,3,4};
try{
System.out.println(arr[8]);
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("你的索引有问题");
}
}
}
- 如果try中的代码没有问题,则不会执行catch中的代码.
- 如果try中代码出现多个错误,则要写多个对应的catch语句与之对应.
- 如果我们要捕获多个异常,而且这些异常存在父子关系,那么
父类异常一定要写在子类异常的下面
. - 如果try中的异常没有被捕获,会按照 Jvm 默认的处理方式处理异常,终止后面的代码执行.

- 示例:
java
package JavaProjets;
/*
* author: Warren */public class Main {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 9};
System.out.println(getMax(arr));
}
public static int getMax(int[] arr) {
if (arr == null || arr.length == 0) {
throw new NullPointerException();
}
if (arr.length == 0) {
throw new ArrayIndexOutOfBoundsException();
}
int max = 0;
for (int i = 0; i < 5; i++) {
max = arr[0];
if (arr[i] > max) {
max = arr[i];
}
}
return max;
}
}
常用方法

printStackTrace:只会打印错误信息,不会停止程序的运行.
自定义异常
自定义异常类继承 Exception
类来创建受检异常,或继承 RuntimeException
类来创建非受检异常
自定义检查时异常(继承Exception
)
java
// 自定义受检异常,继承Exception
public class MyCheckedException extends Exception {
// 默认构造方法
public MyCheckedException() {
super();
}
// 带有错误消息的构造方法
public MyCheckedException(String message) {
super(message);
}
// 带有错误消息和原因的构造方法
public MyCheckedException(String message, Throwable cause) {
super(message, cause);
}
// 带有原因的构造方法
public MyCheckedException(Throwable cause) {
super(cause);
}
}
自定义非检查异常(继承 RuntimeException
)
java
// 自定义非受检异常,继承RuntimeException
public class MyUncheckedException extends RuntimeException {
// 默认构造方法
public MyUncheckedException() {
super();
}
// 带有错误消息的构造方法
public MyUncheckedException(String message) {
super(message);
}
// 带有错误消息和原因的构造方法
public MyUncheckedException(String message, Throwable cause) {
super(message, cause);
}
// 带有原因的构造方法
public MyUncheckedException(Throwable cause) {
super(cause);
}
}