【JavaSE】异常(Exception)

CSDN 2024-07-03 12:35:01 阅读 74

目录

异常是什么异常的分类异常的处理方法throw抛出异常异常的声明异常的捕获和处理finally

自定义异常类

在这里插入图片描述

异常是什么

异常就是程序在进行时的不正常行为,就像之前数组时会遇到空指针异常(NullPointerException),数组越界异常(ArrayIndexOutOfBoundsException)等等。

在java中异常由类来表示。

异常的分类

异常有一个顶层类Throwable;

Throwable派生出两个子类Error,Exception;

Error指的是Java虚拟机无法解决的严重问题,例如递归时一直开辟栈,导致栈溢出的错误。

Exception也分为两种异常:编译时异常和运行时异常。

编译时异常,这种异常顾名思义是在编译时候就会发生,这种异常要在程序中捕获声明才能让程序通过。

例如在比较器文章这篇中要实现clone方法时要通过throws关键字声明CloneNotSupportedException异常才能正常使用。

运行时异常,这种异常全在(RunTimeException)这个类和其子类之下,编译通过,运行报错,这种异常可以交给JVM处理

异常的处理方法

异常的处理一般使用throw、try、catch、finally、throws这五个关键字。

throw抛出异常

在程序执行时,该语句引发异常,此时就可以通过throw抛出异常来告诉程序员原因。

一般格式为<code>throw new 异常类名("异常产生的原因"); 例如我们进行方法传参为数组时参数是null抛出空指针异常:

public void printArray(int[] array){

if(null == array){

throw new NullPointException("数组传参为空null");

}else{

//

}

}

注意事项:

1.异常的抛出必须是在方法的内部

2.一旦异常抛出成功之后,在该语句之后的代码就不会执行了。就像上面写的else里面的语句不会执行了。

3.抛出的异常必须是Exception的或其子类,编译时异常必须在后续代码中处理,运行时异常可以交给JVM处理。

异常的声明

异常的声明就是告诉这个方法会报哪些异常,然后在这个方法内部不用对异常处理,让后面使用这个方法时对异常进行处理。

一般格式:

修饰符 返回值类型 方法名(参数表列) throws 异常类型1,异常类型2...{

}

注意事项:

1.格式不能变,一定是将声明放在参数表列后面,可以多个异常同时声明

2.声明的异常必须是Exception的或其子类。如果声明的异常是具有父子类关系,只声明父类也可以

异常的捕获和处理

使用try-catch语句来对异常进行捕获和处理。

使用格式:

try{

//会产生异常的代码

}catch(异常类型1 e){

//对异常的处理代码

}catch(异常类型2 e){

//对异常的处理代码

}

注意事项:

1.像前面一样如果try中抛出异常后还有代码就不会执行,

2.catch语句之间就像if-else语句一样,只会执行其中一个异常,

3.如果try中抛出异常被catch捕获并处理了那就会执行try-catch之后的语句,如果没有捕获到就不会执行

4.如果两个异常是父子类,一定要把子类异常catch放在前面

5.如果两个异常处理方式一样也可以用单竖杠 | 来处理catch(异常类型1 | 异常类型2 e){}但是这样就不知道具体是哪个异常了。

finally

这个语句是跟try-catch语句一起用的,这个语句的特点就是比catch先执行,里面常放一些资源关闭代码

格式:

try{

//会产生异常的代码

}catch(异常类型1 e){

//对异常的处理代码

}catch(异常类型2 e){

//对异常的处理代码

}finally{

//资源关闭代码

}

try 或者 catch 中如果有 return 会在这个 return 之前执行 finally. 但是如果

finally 中也存在 return 语句, 那么就会执行 finally 中的 return, 从而不会执行到 try 中原有的 return.

自定义异常类

异常本质就是一个类,然后继承于已有的异常类。在写自己的异常类时类名最后一个单词使用Exception更加规范

格式:

class NameException extends 异常类{

//

}

自定义异常类时一般继承Exception 或 RunTimeException。

继承Exception默认是编译时异常,

继承RunTimeException是运行时异常,

在自定义异常类中一般会实现如下的一个构造方法,来报出什么原因导致异常:

public NameException(String message) {

super(message);

}



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。