突如其来的"中断异常",我(Java)该如何处理?
2016-11-30 22:17
483 查看
# **一、何为异常?**
——————————————————
## 1.生活中的实例
> 生活中存在许多不正常:
> 上班路上自行车掉链子
> 上厕所手机掉马桶
> 下班回家钥匙丢失
> 。。。。。。。
## 2.程序中的实例
我们的代码中也许存在许多纰漏,导致用户使用时程序突然停止工作,例如下面简单的Java代码完成一个加法器:
看看输入数据会不会出现异常:
- 当输入100和200时,运行正常:
![](http://images2015.cnblogs.com/blog/833309/201610/833309-20161015111705671-1587464475.png)
- 当输入100和a时,运行报错:
![](http://images2015.cnblogs.com/blog/833309/201610/833309-20161015111817031-2118418317.png)
这就是Java中的异常,输入不合法,程序无法继续运行被迫终止,流程图如下:
## 3.异常的概念
> **异常**:异常指的是在程序运行过程中发生的异常事件,通常是由硬件问题或者程序设计问题所导致的。在Java等面向对象的编程语言中异常属于对象**(Java语言中异常分为运行时异常(Exception)和编译型异常(Error))**。
# **二、Java中异常处理机制**
——————————————————
## 1.Java异常处理机制的概念
> Java异常处理机制就是程序代码执行过程中出现异常后,会按照我们预先制定的处理方法对异常进行处理,异常处理完成后程序会继续运行下去。
## 2.关键字**try**、**throw**、**throws**、**catch**、**finally**
**try**: 尝试执行被此关键字作用的代码块A,若出现异常则忽略代码块A中剩下的代码。
**throws**: 声明方法中将抛出的异常,通常在方法名后出现。
**throw**: 手动抛出异常。
**catch**: 捕获处理异常。
**finally**:不论出现不出现异常都要此块代码都要执行。
![](http://images2015.cnblogs.com/blog/833309/201610/833309-20161015115119312-1087816146.png)
## 3.**try-catch**块
**try**语句块中代码执行时发生三种情况:
- **try**语句块中代码正常执行完毕,没有任何异常,那么**catch**语句块的代码将不会被执行。
输入100和200后程序顺利进行!
- **try**语句块中代码执行过程中产生异常,并且该异常跟**catch**中声明的异常类型相符合,那么**try**语句块中剩余的代码将被忽略,**catch**语句块的代码将被执行。
还是上面代码,输入100和a后程序运行如下:
![](http://images2015.cnblogs.com/blog/833309/201610/833309-20161015122602906-614881231.png)
- **try**语句块中代码执行过程中产生异常,但是抛出的异常并没有在**catch**语句块中声明,那么这个时候程序会立刻终止。
## 4.**try-catch-finally**块
在**catch**子句后加入**finally**块,可以确保无论是否发生异常,**finally**块中的代码总能被执行。
- 代码示例:
- 运行结果:
![](http://images2015.cnblogs.com/blog/833309/201610/833309-20161015123640984-1247008145.png)
## 5.多重**catch**块
* 一段代码可能会产生多个异常。
* 依次对每个**catch**块声明的异常对象进行检查,找到执行第一个与**try**抛出的异常类型匹配的**catch**块,之后的**catch**块将被忽略。
* 异常子类一定要位于异常父类之前,如下图:
4000
/div>
——————————————————
## 1.生活中的实例
> 生活中存在许多不正常:
> 上班路上自行车掉链子
> 上厕所手机掉马桶
> 下班回家钥匙丢失
> 。。。。。。。
## 2.程序中的实例
我们的代码中也许存在许多纰漏,导致用户使用时程序突然停止工作,例如下面简单的Java代码完成一个加法器:
import java.util.Scanner; public class Count { public static void main (String []args){ int a , b; Scanner read = new Scanner(System.in); System.out.print("请输入a:"); a = read.nextInt(); System.out.print("请输入b:"); b = read.nextInt(); System.out.println("a+b="+(a+b)); } }
看看输入数据会不会出现异常:
- 当输入100和200时,运行正常:
![](http://images2015.cnblogs.com/blog/833309/201610/833309-20161015111705671-1587464475.png)
- 当输入100和a时,运行报错:
![](http://images2015.cnblogs.com/blog/833309/201610/833309-20161015111817031-2118418317.png)
这就是Java中的异常,输入不合法,程序无法继续运行被迫终止,流程图如下:
## 3.异常的概念
> **异常**:异常指的是在程序运行过程中发生的异常事件,通常是由硬件问题或者程序设计问题所导致的。在Java等面向对象的编程语言中异常属于对象**(Java语言中异常分为运行时异常(Exception)和编译型异常(Error))**。
# **二、Java中异常处理机制**
——————————————————
## 1.Java异常处理机制的概念
> Java异常处理机制就是程序代码执行过程中出现异常后,会按照我们预先制定的处理方法对异常进行处理,异常处理完成后程序会继续运行下去。
## 2.关键字**try**、**throw**、**throws**、**catch**、**finally**
**try**: 尝试执行被此关键字作用的代码块A,若出现异常则忽略代码块A中剩下的代码。
**throws**: 声明方法中将抛出的异常,通常在方法名后出现。
**throw**: 手动抛出异常。
**catch**: 捕获处理异常。
**finally**:不论出现不出现异常都要此块代码都要执行。
![](http://images2015.cnblogs.com/blog/833309/201610/833309-20161015115119312-1087816146.png)
## 3.**try-catch**块
**try**语句块中代码执行时发生三种情况:
- **try**语句块中代码正常执行完毕,没有任何异常,那么**catch**语句块的代码将不会被执行。
import java.util.*; public class Count { public static void main (String []args){ int a , b; Scanner read = new Scanner(System.in); try{ System.out.print("请输入a:"); a = read.nextInt(); System.out.print("请输入b:"); b = read.nextInt(); System.out.println("a+b="+(a+b)); }catch(InputMismatchException ex){ System.out.println("不可以,请输数字!"); } System.out.println("<<<<欢迎使用!>>>>"); } }
输入100和200后程序顺利进行!
- **try**语句块中代码执行过程中产生异常,并且该异常跟**catch**中声明的异常类型相符合,那么**try**语句块中剩余的代码将被忽略,**catch**语句块的代码将被执行。
还是上面代码,输入100和a后程序运行如下:
![](http://images2015.cnblogs.com/blog/833309/201610/833309-20161015122602906-614881231.png)
- **try**语句块中代码执行过程中产生异常,但是抛出的异常并没有在**catch**语句块中声明,那么这个时候程序会立刻终止。
## 4.**try-catch-finally**块
在**catch**子句后加入**finally**块,可以确保无论是否发生异常,**finally**块中的代码总能被执行。
- 代码示例:
import java.util.*; public class Count { public static void main (String []args){ int a , b; Scanner read = new Scanner(System.in); try{ System.out.print("请输入a:"); a = read.nextInt(); System.out.print("请输入b:"); b = read.nextInt(); System.out.println("a+b="+(a+b)); }catch(Exception ex){ System.out.println("不可以,请输数字!"); }finally{ System.out.println("<<<<欢迎使用!>>>>"); } } }
- 运行结果:
![](http://images2015.cnblogs.com/blog/833309/201610/833309-20161015123640984-1247008145.png)
## 5.多重**catch**块
* 一段代码可能会产生多个异常。
* 依次对每个**catch**块声明的异常对象进行检查,找到执行第一个与**try**抛出的异常类型匹配的**catch**块,之后的**catch**块将被忽略。
* 异常子类一定要位于异常父类之前,如下图:
————————————————————————————————————————————————-
<4000
/div>
相关文章推荐
- 突如其来的"中断异常",我(Java)该如何处理?
- 突如其来的“中断异常”,我(Java)该如何处理?
- 如何解决在快速向jtable添加数据的时候报AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException:异常
- Java的构造函数抛出异常如何处理?
- Java中如何正确处理异常
- 尚客:JAVA语言如何进行异常处理
- 如何正确地处理Java异常
- Java:如何处理异常
- JAVA异常机制介绍/如何正确的进行JAVA异常处理
- 操作XmlDocument时,出现"System.OutOfMemoryException"异常,如何解决加载大数据的情况?
- JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
- JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗
- java如何处理异常
- 如何解决EnterLib异常处理框架最大的局限——基于异常"类型"的异常处理策略
- Java异常处理终结篇——如何进行Java异常处理设计
- JAVA异常机制介绍/如何正确的进行JAVA异常处理
- 开机突然出现"NTLDR is miss"该如何处理
- JAVA语言如何进行异常处理
- 开机突然出现"NTLDR is miss"该如何处理
- Java异常处理终结篇——如何进行Java异常处理设计