【修真院JAVA小课堂】异常处理的原因,try/catch的应用场景

大家好,我是IT修真院,一枚正直纯洁善良的如刚入门的Java程序员,今天跟大家分享一下修真院官网JAVA任务一,深度思考中的知识点——异常处理的原因,try/catch的应用场景。


1. 知识背景
异常exception

导致程序的正常流程被中断的事件,叫做异常

异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。

异常发生的原因有很多,通常包含以下几大类:

1.用户输入了非法数据。

2.要打开的文件不存在。

3.网络通信时连接中断,或者JVM内存溢出。

Try/catch语法

使用 try 和 catch 关键字可以捕获异常。

try/catch 代码块放在异常可能发生的地方。try/catch代码块中的代码称为保护代码。

一个 try 代码块可以后面跟随多个 catch 代码块,叫多重捕获。

如果一个方法没有捕获一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。也可以使用 throw 关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。


2. 知识剖析

java如何处理异常?

java提供了抛出异常捕获异常的逻辑用于处理异常,当程序抛出异常时,如果不存在捕获异常逻辑,正在执行的方法将停止执行,并将该异常向外抛出,调用该方法的程序进行同样的处理,如果也没有进行捕获,则将一层一层的向外抛出,直到到达当前线程处时将会终止线程的执行。


异常的分类:
检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
运行时异常:   运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。

所有的异常类是从java.lang.Exception类继承的子类。
Exception类是Throwable类的子类。除了Exception类外,Throwable还有一个子类Error 。

3. 常见问题
在什么场景下加Try-Catch机制

Try-Catch机制注意点


4. 解决方案
1)以业务逻辑功能为单位,在最上层加Try-Catch机制。为什么要这样做呢?这主要是增加程序的健壮性,防止因抛出异常过多,导致程序崩溃。

2)底层代码,在可能出错的地方加Try-Catch机制,用Catch侦测具体的异常,然后就具体的异常,采取相应的解决方案。

3)底层代码,在需异常追踪时加Try-Catch机制,在Catch块中抛出自定义异常,调试时可迅速定位到错误代码段。

Try-Catch机制会将异常屏蔽掉,必须根据具体的应用场景,具体分析。


5. 编码实战
先构造一个方法用来表示catch执行

image.png

image.png

image.png

6. 扩展思考
catch 体里遇到 return 是怎么处理?
finally 体遇到 return 怎么办?
finally 体里有 System.exit() 方法怎么处理?
当 catch 和 finally 体里同时遇上 return 怎么办?

(假设方法需要返回值)java 的异常处理中,

在不抛出异常的情况下,程序执行完 try 里面的代码块之后,该方法并不会立即结束,而是继续试图去寻找该方法有没有 finally 的代码块,

如果没有 finally 代码块,整个方法在执行完 try 代码块后返回相应的值来结束整个方法;

如果有 finally 代码块,此时程序执行到 try 代码块里的 return 语句之时并不会立即执行 return,而是先去执行 finally 代码块里的代码,

若 finally 代码块里没有 return 或没有能够终止程序的代码,程序将在执行完 finally 代码块代码之后再返回 try 代码块执行 return 语句来结束整个方法;

若 finally 代码块里有 return 或含有能够终止程序的代码,方法将在执行完 finally 之后被结束,不再跳回 try 代码块执行 return。


7. 参考文献
http://www.cnblogs.com/tianzhiliang/archive/2010/10/09/1846676.html
http://www.blogjava.net/fancydeepin/archive/2012/07/08/java_try-catch-finally.html
https://www.cnblogs.com/zouheng/p/6706114.html



猜你喜欢

转载自blog.csdn.net/jimo621/article/details/80045879