所有的异常都是在java.lang包中的Throwable类中
一、Exception 和 Error 的区别
exception:程序本身发生的异常,可以捕获抛出异常,一般用try—catch—finally捕获。
error:发生在jvm层面的错误,程序无法处理。
二、编译时异常和运行时异常
-
编译时异常(Exception)
-
都是Exception类及其子类
-
必须显示处理,否则程序就会发生错误,无法通过编译
-
-
运行时异常(RuntimeException)
-
都是RuntimeException类及其子类
-
无需显示处理,也可以和编译时异常一样处理
-
三、Throwable类中的主要方法
public class myThrowable extends Throwable{
@Override //返回异常发生时的简要描述
public String getMessage() {
return super.getMessage();
}
@Override //返回异常对象的本地化信息
public String getLocalizedMessage() {
return super.getLocalizedMessage();
}
@Override //返回异常发生时的详细信息
public String toString() {
return super.toString();
}
@Override //在控制台上打印 Throwable 对象封装的异常信息
public void printStackTrace() {
super.printStackTrace();
}
}
四、throws方式处理异常
throws是定义在方法上的,且跟在方法后面,异常类名一般抛出最大的Exception。
一般调用方用的异常要大一些。
定义格式:
public void 方法名() throws 异常类名 {
// 代码
}
例子:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class myThrowable{
public static void main(String[] args) throws Exception{
System.out.println("开始");
// method1();
method2();
System.out.println("结束");
}
//编译时异常,异常必需要手动给出,否则报红
public static void method2() throws ParseException {
String s = "2022-08-08";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d = sdf.parse(s);
System.out.println(d);
}
//运行时异常
public static void method1() throws ArrayIndexOutOfBoundsException {
int[] arr = {1, 2, 3};
System.out.println(arr[3]);
}
}
运行时异常: 运行时才会发生,所以在方法后面可以不写,运行时出现异常默认交给jvm处理
编译时异常:在编译时就会检查,所以一定要在方法后抛出异常处理
四、throw异常和try-catch-finally 使用
声明格式:
一般在方法中抛出,表示手动抛出异常,一般结合try-catch-fianlly使用
throw new 异常类型();
例子:
public class myThrowable{
public static void main(String[] args){
System.out.println("开始");
method1();
System.out.println("结束");
}
public static void method1() {
try {
int i = 1/0;
System.out.println(i);
} catch (Exception e) {
e.printStackTrace();
System.out.println("异常信息描述:"+e.getMessage());
} finally {
//
}
}
}
关于有返回值情况: