计算机程序的编写也需要考虑处理这些异常情况。异常(exception)是在运行程序时产生的一种异常情况,已经成为了衡量一门语言是否成熟的标准之一。目前的主流编程语言,如 C++、c#、Ruby 和 Python 等大都提供了异常处理机制。

异常简介

Java 中的异常又称为例外,是一个在程序执行期间发生的事件,它中断正在执行程序的正常指令流。为了能够及时有效地处理程序中的运行错误,必须使用异常类,这可以让程序具有极好的容错性且更加健壮。

在 Java 中一个异常的产生,主要有如下三种原因:

  • Java 内部错误发生异常,Java 虚拟机产生的异常。
  • 编写的程序代码中的错误所产生的异常,例如空指针异常、数组越界异常等。
  • 通过 throw 语句手动生成的异常,一般用来告知该方法的调用者一些必要信息。

Java 通过面向对象的方法来处理异常。在一个方法的运行过程中,如果发生了异常,则这个方法会产生代表该异常的一个对象,并把它交给运行时的系统,运行时系统寻找相应的代码来处理这一异常。

我们把生成异常对象,并把它提交给运行时系统的过程称为拋出(throw)异常。运行时系统在方法的调用栈中查找,直到找到能够处理该类型异常的对象,这一个过程称为捕获(catch)异常

例 1
为了更好地理解什么是异常,下面来看一段非常简单的 Java 程序。下面的示例代码实现了允许用户输入 1~3 以内的整数,其他情况提示输入错误。

import java.util.Scanner;
public class Test {public static void main(String[] args) {System.out.println("请输入您的选择:(1~3 之间的整数)");Scanner input = new Scanner(System.in);int num = input.nextInt();switch (num) {case 1:System.out.println("one");break;case 2:System.out.println("two");break;case 3:System.out.println("three");break;default:System.out.println("error");break;}}
}

正常情况下,用户会按照系统的提示输入 1~3 之间的数字。但是,如果用户没有按要求进行输入,例如输入了一个字母“a”,则程序在运行时将会发生异常,运行结果如下所示。

请输入您的选择:(1~3 之间的整数)
a
Exception in thread "main" java.util.InputMismatchExceptionat java.util.Scanner.throwFor(Unknown Source)at java.util.Scanner.next(Unknown Source)at java.util.Scanner.nextInt(Unknown Source)at java.util.Scanner.nextInt(Unknown Source)at text.text.main(text.java:11)

异常类型

三种类型的异常:

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

为了能够及时有效地处理程序中的运行错误,Java 专门引入了异常类。在 Java 中所有异常类型都是内置类 java.lang.Throwable 类的子类,即 Throwable 位于异常类层次结构的顶层。
Throwable 类下有两个异常分支 Exception 和 Error,如图 1 所示。

由图 可以知道,Throwable 类是所有异常和错误的超类,下面有 Error 和 Exception 两个子类分别表示错误和异常。其中异常类 Exception 又分为运行时异常和非运行时异常,这两种异常有很大的区别,也称为不检查异常(Unchecked Exception)和检查异常(Checked Exception)。

  • Exception 类用于用户程序可能出现的异常情况,它也是用来创建自定义异常类型类的类。
  • Error 定义了在通常环境下不希望被程序捕获的异常。一般指的是 JVM 错误,如堆栈溢出。

本节不讨论关于 Error 类型的异常处理,因为它们通常是灾难性的致命错误,不是程序可以控制的。接下来将讨论 Exception 类型的异常处理。

运行时异常都是 RuntimeException 类及其子类异常,如 NullPointerException、IndexOutOfBoundsException 等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般由程序逻辑错误引起,程序应该从逻辑角度尽可能避免这类异常的发生。

非运行时异常是指 RuntimeException 以外的异常,类型上都属于 Exception 类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如 IOException、ClassNotFoundException 等以及用户自定义的 Exception 异常(一般情况下不自定义检查异常)。

表 1 和表 2 分别列出了 java.lang 中定义的运行时异常和非运行时异常的类型及作用。

表 1 Java中常见运行时异常

异常类型 说明
ArithmeticException 算术错误异常,如以零做除数
ArraylndexOutOfBoundException 数组索引越界
ArrayStoreException 向类型不兼容的数组元素赋值
ClassCastException 类型转换异常
IllegalArgumentException 使用非法实参调用方法
lIIegalStateException 环境或应用程序处于不正确的状态
lIIegalThreadStateException 被请求的操作与当前线程状态不兼容
IndexOutOfBoundsException 某种类型的索引越界
NullPointerException 尝试访问 null 对象成员,空指针异常
NegativeArraySizeException 再负数范围内创建的数组
NumberFormatException 数字转化格式异常,比如字符串到 float 型数字的转换无效
TypeNotPresentException 类型未找到

表 2 Java常见非运行时异常

异常类型 说明
ClassNotFoundException 没有找到类
IllegalAccessException 访问类被拒绝
InstantiationException 试图创建抽象类或接口的对象
InterruptedException 线程被另一个线程中断
NoSuchFieldException 请求的域不存在
NoSuchMethodException 请求的方法不存在
ReflectiveOperationException 与反射有关的异常的超类

1.1 Java异常(Exception)处理及常见异常相关推荐

  1. java abort_在7.0以上版本的手机系统上出现java.lang.Exception: ... abort cold fix异常

    在7.0以上版本的手机系统上出现java.lang.Exception: - abort cold fix异常,应用崩溃,一般后面还会报出java.lang.ClassNotFoundExceptio ...

  2. 1.异常简介:什么是异常???常见异常有哪些???

    1.异常简介:什么是异常???常见异常有哪些??? 学习:第7遍 1. 什么是异常??? 程序在运行过程中发生的意外情况,称为异常,如:除数为0.访问下标不存在的数组元素等 异常是一种信号,用于向调用 ...

  3. java异常(机制和捕捉(常见异常类))详解 +练习题

    Java 中的异常处理机制 1.什么是异常 异常:程序在运行过程中产生的不正常情况. 程序在运行的时候,发生了一些不被预期的事件,从而没有按照我们编写的代码执行,这就是异常. 异常是Java中的错误, ...

  4. java 数据库 异常类型_Java基础 -- 常见异常

    1.常见异常 Exception 类是 Throwable 类的子类.除了Exception类外,Throwable还有一个子类Error . 异常类有两个主要子类:IOException和Runti ...

  5. java中三种可能导致异常的情况_Java常见异常种类及产生原因

    JAVA异常共分为下列几种 Error JAVA环境编译错误 Runtime Exception 运行处异常 Exception 标准Java库方法异常 throw 用户自定义异常 异常分为两类 Er ...

  6. exception 类 java_Java 常见异常种类

    1.什么是异常 结构不佳的代码不能运行,这是Java的基本理念. 发现错误的理想时机是在编译期.然而,编译器并不能发现所有的错误,余下的问题就需要在程序运行时解决.这就需要错误能通过某种方式,把适当的 ...

  7. 异常Exception 和 运行时异常RuntimeException

    文章目录 概念 概念 Java中的所有异常都来自顶级父类Throwable. Throwable下有两个子类Exception和Error. Error是程序无法处理的错误,一旦出现这个错误,则程序将 ...

  8. java常见异常说明汇总

    1. java.lang.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对 ...

  9. JAVA常见异常信息(保存)

    一. java基础编程中常见的错误(基本类型) 包装类型参与运算时,要做null值校验,否则可能出现空指针异常. 包装类型比较大小,不能使用compare(i,j)直接比较,因为该方法是用来比较基本类 ...

  10. android常见异常总结

    为什么80%的码农都做不了架构师?>>>    Java中的异常分为两大类:错误Error和异常Exception,Java异常体系结构如下图所示: Throwable Throwa ...

最新文章

  1. Can‘t connect to HTTPS URL because the SSL module is not available
  2. python装饰器-Python——装饰器(Decorator)
  3. 划线价格怎么弄java_京东可以设置划线价格吗?怎么设置?
  4. 通俗讲解和学习SQL
  5. 在Hi3531上运行QT
  6. 微软Azure storage account的connection string
  7. 信息学奥赛一本通 1005:地球人口承载力估计| OpenJudge NOI 小学奥数 7653
  8. 2021-08-15 Servlet Properties 读取资源
  9. java 获取 jsp 内容_JAVA记录-JSP内容
  10. Arcgis培训内容
  11. 【Java】QuickHit游戏
  12. 管理与维护Linux系统
  13. Xprivacy - 必须拥有黑客应用程序
  14. 前端优化中的防抖与截流
  15. 智慧社区综合信息服务平台,让你的社区更智能
  16. 轻轻问一下,现在买笔记本电脑,送外接键盘是什么心态
  17. opengl 画椭圆_椭圆围城与圆型观光步道
  18. 【每日一短语】首席芭蕾舞演员
  19. 第 17 章 设计模式(3 装饰者模式)
  20. oracle 10092,Oracle诊断事件列表

热门文章

  1. ML:分类预测问题中评价指标(ER/混淆矩阵P-R-F1/ROC-AUC/RP/mAP)简介、使用方法、代码实现、案例应用之详细攻略
  2. OS_CORE.C(8)
  3. Java学习之动态代理
  4. 转 多租户SaaS架构
  5. C#最基本的小说爬虫
  6. COGS 2274. [HEOI 2016] tree
  7. pyhton (一)基础
  8. sql添加列,删除列,修改列
  9. BZOJ 1016 最小生成树计数
  10. com.microsoft.sqlserver.jdbc.SQLServerException: 索引 1 超出范围