Java的异常处理机制

Phemia ·
更新时间:2024-11-10
· 772 次阅读

Java的异常处理

今天来聊一下Java的异常处理机制,因为我也是初学者,并没有理解的那么深刻,所以有什么错误的话,还请多多指教。我将用五部分来解释我所理解的Java异常。

一、异常是怎么出现的 public class Test { public static void main(String[] args) { //写一个会报错的语句 String str = null; System.out.println(str.length()); } }

运行结果
首先我们可以看到控制台出现的:Exception in thread “main”,它是告诉我们异常信息的来源,是发生在main线程中。
然后,后面发现一个拥有描述能力的异常信息,java.lang.xxxxx一个类,这个类是干嘛用的呢?是负责给你打印null指针异常出现的时候,红色的异常信息。

二、用什么来描述异常

写错的每一个出现异常信息的代码,都会有一个类来进行描述,而且异常信息描述类全部以Exception结尾。
Exception:它是所有异常的根类(root)
异常信息描述类:NumberFormatException,NullPointerException等等。

三、用什么来处理异常 try catch finally public class Test { public static void main(String[] args) { try { //写一个会报错的语句 String str = null; System.out.println(str.length()); } catch (NullPointerException e) { System.out.println("空指针异常"); e.printStackTrace();//打印红色异常的方法 } } }

在这里插入图片描述
若try语句里面还有其他的错误的话,可以用多个catch来捕获,例如:

public class Test { public static void main(String[] args) { try { // 会报NullPointerException错误 String str = null; System.out.println(str.length()); // 会报NumberFormatException错误 String str1 = "aaa"; int res = 1 + Integer.parseInt(str1); System.out.println(res); } catch (NullPointerException e) { System.out.println("空指针异常"); e.printStackTrace(); } catch (NumberFormatException e) { System.out.println("类型转换异常"); e.printStackTrace(); } } }

若你不知道会报什么错误,也可以使用Exception这个父类来捕获异常。

try { // 会报NullPointerException错误 String str = null; System.out.println(str.length()); // 会报NumberFormatException错误 String str1 = "aaa"; int res = 1 + Integer.parseInt(str1); System.out.println(res); } catch (Exception e) { System.out.println("所有异常"); e.printStackTrace(); }

在这里插入图片描述
而finally是不管有没有异常都会执行的语句,如:

try { // 会报NullPointerException错误 String str = null; System.out.println(str.length()); // 会报NumberFormatException错误 String str1 = "aaa"; int res = 1 + Integer.parseInt(str1); System.out.println(res); } catch (Exception e) { System.out.println("所有异常"); e.printStackTrace(); } finally { System.out.println("最后执行的语句"); }

在这里插入图片描述

四、用什么来抛出异常 throws

首先建立一个Utils类

public class Utils { // throws Exception 方法中所有的异常抛出给调用者进行处理 public void method() throws Exception{ // 会报NumberFormatException错误 String str1 = "aaa"; int res = 1 + Integer.parseInt(str1); System.out.println(res); } }

在Test类里面来调用

public class Test { public static void main(String[] args) { Utils u = new Utils(); u.method(); } }

在这里插入图片描述
这里就需要你trycatch一下了, 如果你不想再次trycatch的话,也可以throws给调用它的类,但是这个是main方法,没有什么可以调用main方法,所以只能trycatch一下啦。
在这里插入图片描述
这里的throws可以打一个比方,这样更好利于理解。
就像一个人,他生病了,去看医生, 把自己抛给了医生,此时呢,医生就有两个方案,一个就是自己的能力够用,自己能给病人看病,这就相当于用trycatch,另一个方案,就是自己的能力不够,需要一个更有能力的大神,把病人抛给大神,这就相当于再次throws。

throw public class Test { public static void main(String[] args) { throw new RuntimeException("随时随地抛出异常"); } }

在这里插入图片描述至此就结束了,谢谢观看,如有什么错误的话,还请多多指教。


作者:Draco-_-



JAVA 异常 java的 异常处理

需要 登录 后方可回复, 如果你还没有账号请 注册新账号