1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 解释java程序中的异常机制_Java编程中的异常机制

解释java程序中的异常机制_Java编程中的异常机制

时间:2023-03-02 03:41:34

相关推荐

解释java程序中的异常机制_Java编程中的异常机制

本文旨在以初学者的角度来学习Java异常的知识,尽量简单,一些细枝末节的知识不会讲述,但不影响对知识的掌握。

(比如try-catch可以嵌套,不太会这么用)

1.什么是异常

我们先举个例子

int x = 10/0;

在IDE里输入这样一个statement,静态检查没有发现其错误。运行后发现抛出算数类异常。

Exception in thread "main" java.lang.ArithmeticException: /by zero

“异常”可以理解为字面意思,通常指正常情况无法处理的异常事件。

不过异常和错误不同,程序员无法处理error,如VirtualMachineError、OutOfMemoryError,而Exception本身可以被程序解决,如NullPointException、ArithmeticException、ArrayIndexOutOfBoundException

异常与错误都继承了Throwable类,整体关系如下图:

Exception,大致可以分为两类

RuntimeException 运行时异常不可检查OtherException 编译期异常可检查

程序员最需要的关心的:

不是Error,因为大部分遇到了就自认倒霉束手无策不是RuntimeException,根本不可查而是OtherException,可查异常;可以通过try-catch捕获异常,或者在方法上加throws抛出异常等

2.异常处理机制

上面谈到对于OtherException可查异常可以try-catch捕获,或者throws抛出异常。接下来就详细介绍如何使用

2.1 try-catch

try {//可能发生异常的地方}catch (RuntimeException e1){// runtimeException}catch (Exception e2){//Exception}finally {//finally的内容一定会执行:无论有没有Exception}

try-catch中可以有多个catch,处理时将依次匹配,注意是依次依次依次,重要的事情说三遍!,一旦先匹配上了,后面的catch就不再匹配,程序员需当心顺序(这里有什么技巧,欢迎大佬补充)

2.2 抛出异常

使用方法:比如有一个静态方法a,在方法名后添加throws IOException(这是一个可检查异常),那么在调用它时,作为一个可检查异常,那么必须要对它try-catch的。如果像下面这样没有try-catch,会出现什么情况呢?

public class Main {public static void a() throws IOException{System.out.println("a");}public static void main(String[] args){a();}}

根据第一节可知,可检查异常是编译期异常,我使用的工具Intellij IDEA就会报错,不让我通过。只要给它套上一层外衣就好了:

try {a();}catch (IOException e){//do something}

catch里的Exception类一定要和方法抛出的类是同一个类,或者有从属关系(如IOException是Exception的子类)

有一个有趣的问题,之前我说过只有可检查类有抛出异常的必要,如果我throws一个不可检查的异常会发生什么呢?

public class Main {public static void a() throws RuntimeException{System.out.println("a");}public static void main(String[] args){a();}}

我在这里先不说结果,感兴趣的小伙伴可以自己尝试一下。(不理解结果的,可以私信我)

注意:throws与throw的区别

我的理解是,

throws只是一个保障机制,要求可检查异常必须得到检查。至于是不是真的抛出了异常,还一定。throw才是真正的抛出异常,就算有时候方法没有声明throws(不过建议写,可读性高)。

另外,Java自定义异常类的原理类似,都派生自Exception或某个更小的Exception,有空单独写一篇自定义类的常见用法和注意事项。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。