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


## 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块将被忽略。
  • 异常子类一定要位于异常父类之前,如下图:


突如其来的&amp;quot;中断异常&amp;quot;,我(Java)该如何处理?的更多相关文章

  1. 突如其来的"中断异常",我(Java)该如何处理?

    一.何为异常? 1.生活中的实例 生活中存在许多不正常: 上班路上自行车掉链子 上厕所手机掉马桶 下班回家钥匙丢失 ....... 2.程序中的实例 我们的代码中也许存在许多纰漏,导致用户使用时程序突 ...

  2. 突如其来的“中断异常”,我(Java)该如何处理?

    3.try-catch块 try语句块中代码执行时发生三种情况: try语句块中代码正常执行完毕,没有任何异常,那么catch语句块的代码将不会被执行. import java.util.*; pub ...

  3. Java 中断异常的正确处理方式

    处理InterruptedException 这个故事可能很熟悉:你正在写一个测试程序,你需要暂停某个线程一段时间,所以你调用 Thread.sleep().然后编译器或 IDE 就会抱怨说 Inte ...

  4. Java中断异常 InterruptedException 的正确处理方式

    你看到这篇文件可能是因为你已经调用了一个抛出 InterruptedException 异常的方法,并且需要以某种方式处理它. 首先,需要了解为一个方法为啥会 throws InterruptedEx ...

  5. sleep方法要求处理中断异常:InterruptedException

    package seday08.thread;/*** @author xingsir * 当一个线程调用sleep方法处于阻塞状态的过程中,这个线程的中断方法interrupt被调用时,则sleep ...

  6. X86中断/异常与APIC

    异常(exception)是由软件或硬件产生的,分为同步异常和异步异常.同步异常即CPU执行指令期间同步产生的异常,比如常见的除零错误.访问不在RAM中的内存 .MMU 发现当前虚拟地址没有对应的物理 ...

  7. 【原创】X86下ipipe接管中断/异常

    目录 X86 ipipe接管中断/异常 一.回顾 二.X86 linux异常中断处理 1. 中断门及IDT 2. 初始化门描述符 2.1 早期异常处理 2.2 start_kernel中的异常向量初始 ...

  8. Java虚拟机内存溢出异常--《深入理解Java虚拟机》学习笔记及个人理解(三)

    Java虚拟机内存溢出异常--<深入理解Java虚拟机>学习笔记及个人理解(三) 书上P39 1. 堆内存溢出 不断地创建对象, 而且保证创建的这些对象不会被回收即可(让GC Root可达 ...

  9. 异常处理器详解 Java多线程异常处理机制 多线程中篇(四)

    在Thread中有异常处理器相关的方法 在ThreadGroup中也有相关的异常处理方法 示例 未检查异常 对于未检查异常,将会直接宕掉,主线程则继续运行,程序会继续运行 在主线程中能不能捕获呢? 我 ...

  10. Java异常(一)Java异常简介及其框架

    Java异常(一)Java异常简介及其框架 概要 本章对Java中的异常进行介绍.内容包括:Java异常简介Java异常框架 Java异常简介 Java异常是Java提供的一种识别及响应错误的一致性机 ...

随机推荐

  1. Springboot+vue 实现汽车租赁系统(毕业设计二)(前后端项目分离)

    文章目录 1.系统功能列表 2.管理员端界面 2.1 商家登录界面 2.2 用户信息管理界面 2.3 汽车管理界面 2.4 订单界面 2.5 汽车图形报表 2.6 优惠券新增界面 3.普通用户界面 3 ...

  2. git-secret:在 Git 存储库中加密和存储密钥(下)

    在之前的文章中(点击此处查看上一篇文章),我们了解了如何识别包含密钥的文件,将密钥添加到 .gitignore ,通过 git-secret 进行加密,以及将加密文件提交到存储库.在本篇文章中,将带你 ...

  3. CF Round #829 题解 (Div. 2)

    F 没看所以摆了 . 看拜月教教主 LHQ 在群里代打恰钱 /bx 目录 A. Technical Support (*800) B. Kevin and Permutation (*800) C. ...

  4. ML-朴素贝叶斯算法

    贝叶斯定理 w是由待测数据的所有属性组成的向量.p(c|x)表示,在数据为x时,属于c类的概率. \[p(c|w)=\frac{p(w|c)p(c)}{p(w)} \] 如果数据的目标变量最后有两个结 ...

  5. 出现The server time zone value ‘�й���׼ʱ��‘ is unrecognized的解决方法

    使用mybatis链接数据库时出现如下错误, The server time zone value '�й���׼ʱ��' is unrecognized or represents more tha ...

  6. JVM学习笔记——类加载和字节码技术篇

    JVM学习笔记--类加载和字节码技术篇 在本系列内容中我们会对JVM做一个系统的学习,本片将会介绍JVM的类加载和字节码技术部分 我们会分为以下几部分进行介绍: 类文件结构 字节码指令 编译期处理 类 ...

  7. jmeter分布式压测对master、slave防火墙配置

    首先要了解jmeter分布式压测的基础概念:master为统计结果的服务器,slave为各台压力机,如下图所示 一.结论 针对master 1.修改jmeter.properties的client.r ...

  8. C#使用正则表达式来验证是否是16进制字符串

    /// <summary> /// 判断是否为16进制字符串 /// </summary> /// <param name="hexString"&g ...

  9. Linux 中的内部命令和外部命令

    Linux 中的内部命令和外部命令 作者:Grey 原文地址: 博客园:Linux 中的内部命令和外部命令 CSDN:Linux 中的内部命令和外部命令 什么是 bash shell ? bash s ...

  10. 算法5: LeetCode_单链表_两数相加

    题目: * 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. * 请你将两个数相加,并以相同形式返回一个表示和的链表. * 你可 ...