# **一、何为异常?**


## 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时,运行正常:

- 当输入100和a时,运行报错:
![](http://images2015.cnblogs.com/blog/833309/201610/833309-20161015111817031-2118418317.png)

这就是Java中的异常,输入不合法,程序无法继续运行被迫终止,流程图如下:

3.异常的概念

异常:异常指的是在程序运行过程中发生的异常事件,通常是由硬件问题或者程序设计问题所导致的。在Java等面向对象的编程语言中异常属于对象(Java语言中异常分为运行时异常(Exception)和编译型异常(Error))

二、Java中异常处理机制


## 1.Java异常处理机制的概念

Java异常处理机制就是程序代码执行过程中出现异常后,会按照我们预先制定的处理方法对异常进行处理,异常处理完成后程序会继续运行下去。

2.关键字trythrowthrowscatchfinally

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后程序运行如下:

- **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("<<<<欢迎使用!>>>>");
}
}
}
  • 运行结果:

5.多重catch

  • 一段代码可能会产生多个异常。
  • 依次对每个catch块声明的异常对象进行检查,找到执行第一个与try抛出的异常类型匹配的catch块,之后的catch块将被忽略。
  • 异常子类一定要位于异常父类之前,如下图:


最新文章

  1. 第37课 深度解析QMap与QHash
  2. Android笔记:调试android程序
  3. ACM集训的1B。。。。黑色星期五。。。。2333333
  4. android 使用相机拍照,并存储到手机sd卡上,并利用系统录像录像并播放
  5. Robot Framework自动化测试(四)--- 分层思想
  6. 【MySQL】PREPARE 的应用
  7. css hack一览
  8. toad for sqlserver5.7
  9. Different Ways to Add Parentheses——Leetcode
  10. bitree
  11. 【firefox】关闭firefox缓存
  12. 假设我的朋友账号分别是v{1,2,3,4,5},且这五人想要共享一个目录,因此应该加入同一个群组,假设这个群组为vbird,且这五个账号的密码均为password.那该如何建置这五个账号?
  13. Programming In Scala笔记-第十五章、Case Classes和模式匹配
  14. [FPGA] 1、Artix-7 35T Arty FPGA 评估套件学习 + SiFive risc-v 指令集芯片验证
  15. JavaScript lastIndexOf() 方法
  16. store.state
  17. [Bayes] Improve HMM step by step
  18. 使用lombok 找不到方法
  19. Gradle详细解析***
  20. What is AMQP? and the architecture

热门文章

  1. MassTransit | .NET 分布式应用框架
  2. 1.WEB应用模式
  3. 京东云开发者|经典同态加密算法Paillier解读 - 原理、实现和应用
  4. C语言白盒测试讲义
  5. EasyPoi 导出Excel(ExcelExportEntity生成表头)
  6. 【深入浅出 Yarn 架构与实现】3-1 Yarn Application 流程与编写方法
  7. 2022-11-10 Acwing每日一题
  8. ThinkPhp5 自定义异常处理类
  9. C++初阶(封装+多态--整理的自认为很详细)
  10. [排序算法] 简单选择排序 (C++)