一、Java中的异常体系
最重要的是Throwable、Exception、RuntimeException和Error。
二、Throwable:Exception和Error的顶头上司
主要方法有getMessage和printStackTrace。
例1:
class Solution{
public static void main(String[] args) {
Throwable throwable=new Throwable("I am throwable");
System.out.println(throwable.getMessage());
}
}
例2:
class Solution{
public static void main(String[] args) {
Throwable throwable=new Throwable(new Exception("我是Exception!"));
System.out.println(throwable.getMessage());
}
}
例3:
class Solution{
public static void main(String[] args) {
Throwable throwable=new Throwable();
throwable.initCause(new Error("我是Error!"));
throwable.printStackTrace();
}
}
三、Exception
Java中的异常主要有运行时异常(RuntimeException)和编译期异常等。
1、运行时异常:编译时不会报错,运行时才可能触发。
被0除会触发ArithmeticException,该异常就属于运行时异常:
示例:
class Solution{
public static void main(String[] args) {
System.out.println(1/0);
}
}
2、编译期异常:编译期就能发现的异常。现代IDE在代码编辑阶段也能感知到,并提醒程序员进行处理,处理的方式可以是抛出(在调用方法中throws),也可以是捕获(try catch)。
示例:未对潜在异常进行处理,IDEA给出红色警告!
若强制运行:
所以说,java也是有脾气的
行,java您是大爷,咱照做就是了
示例:抛出(throws)
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
class Solution{
public static void main(String[] args) throws ParseException {
DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");
System.out.println(dateFormat.parse("2020-12-1"));
}
}
说明:throws ParseException可改成该异常的父类,比如Exception,Throwable。
示例:捕获(try catch)
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
class Solution{
public static void main(String[] args) {
DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");
try {
System.out.println(dateFormat.parse("2020-12-1"));
} catch (ParseException e) {
e.printStackTrace();
}
}
}
抛出和捕获的区别:
异常被捕获后,try catch之后的代码可以接着执行:
上图显示,程序正常退出!
异常被抛出后,异常代码后面的代码不会被执行:
上图显示程序异常退出!
对比一下,显然捕获更合理,更主动!
四、Error
运行时才可能触发,一旦发生,程序就会非正常退出。
示例:OutOfMemoryError
class Solution{
public static void main(String[] args) throws Exception {
int[] arr=new int[1024*1024*1024];
}
}