所有的异常都是在java.lang包中的Throwable类中
exception:程序本身发生的异常,可以捕获抛出异常,一般用try—catch—finally捕获。
error:发生在jvm层面的错误,程序无法处理。
编译时异常(Exception)
都是Exception类及其子类
必须显示处理,否则程序就会发生错误,无法通过编译
运行时异常(RuntimeException)
都是RuntimeException类及其子类
无需显示处理,也可以和编译时异常一样处理
- 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是定义在方法上的,且跟在方法后面,异常类名一般抛出最大的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处理
编译时异常:在编译时就会检查,所以一定要在方法后抛出异常处理
声明格式:
一般在方法中抛出,表示手动抛出异常,一般结合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 {
- //
- }
- }
- }
关于有返回值情况: