1.1 Java异常(Exception)处理及常见异常
计算机程序的编写也需要考虑处理这些异常情况。异常(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)处理及常见异常相关推荐
- java abort_在7.0以上版本的手机系统上出现java.lang.Exception: ... abort cold fix异常
在7.0以上版本的手机系统上出现java.lang.Exception: - abort cold fix异常,应用崩溃,一般后面还会报出java.lang.ClassNotFoundExceptio ...
- 1.异常简介:什么是异常???常见异常有哪些???
1.异常简介:什么是异常???常见异常有哪些??? 学习:第7遍 1. 什么是异常??? 程序在运行过程中发生的意外情况,称为异常,如:除数为0.访问下标不存在的数组元素等 异常是一种信号,用于向调用 ...
- java异常(机制和捕捉(常见异常类))详解 +练习题
Java 中的异常处理机制 1.什么是异常 异常:程序在运行过程中产生的不正常情况. 程序在运行的时候,发生了一些不被预期的事件,从而没有按照我们编写的代码执行,这就是异常. 异常是Java中的错误, ...
- java 数据库 异常类型_Java基础 -- 常见异常
1.常见异常 Exception 类是 Throwable 类的子类.除了Exception类外,Throwable还有一个子类Error . 异常类有两个主要子类:IOException和Runti ...
- java中三种可能导致异常的情况_Java常见异常种类及产生原因
JAVA异常共分为下列几种 Error JAVA环境编译错误 Runtime Exception 运行处异常 Exception 标准Java库方法异常 throw 用户自定义异常 异常分为两类 Er ...
- exception 类 java_Java 常见异常种类
1.什么是异常 结构不佳的代码不能运行,这是Java的基本理念. 发现错误的理想时机是在编译期.然而,编译器并不能发现所有的错误,余下的问题就需要在程序运行时解决.这就需要错误能通过某种方式,把适当的 ...
- 异常Exception 和 运行时异常RuntimeException
文章目录 概念 概念 Java中的所有异常都来自顶级父类Throwable. Throwable下有两个子类Exception和Error. Error是程序无法处理的错误,一旦出现这个错误,则程序将 ...
- java常见异常说明汇总
1. java.lang.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对 ...
- JAVA常见异常信息(保存)
一. java基础编程中常见的错误(基本类型) 包装类型参与运算时,要做null值校验,否则可能出现空指针异常. 包装类型比较大小,不能使用compare(i,j)直接比较,因为该方法是用来比较基本类 ...
- android常见异常总结
为什么80%的码农都做不了架构师?>>> Java中的异常分为两大类:错误Error和异常Exception,Java异常体系结构如下图所示: Throwable Throwa ...
最新文章
- Can‘t connect to HTTPS URL because the SSL module is not available
- python装饰器-Python——装饰器(Decorator)
- 划线价格怎么弄java_京东可以设置划线价格吗?怎么设置?
- 通俗讲解和学习SQL
- 在Hi3531上运行QT
- 微软Azure storage account的connection string
- 信息学奥赛一本通 1005:地球人口承载力估计| OpenJudge NOI 小学奥数 7653
- 2021-08-15 Servlet Properties 读取资源
- java 获取 jsp 内容_JAVA记录-JSP内容
- Arcgis培训内容
- 【Java】QuickHit游戏
- 管理与维护Linux系统
- Xprivacy - 必须拥有黑客应用程序
- 前端优化中的防抖与截流
- 智慧社区综合信息服务平台,让你的社区更智能
- 轻轻问一下,现在买笔记本电脑,送外接键盘是什么心态
- opengl 画椭圆_椭圆围城与圆型观光步道
- 【每日一短语】首席芭蕾舞演员
- 第 17 章 设计模式(3 装饰者模式)
- oracle 10092,Oracle诊断事件列表
热门文章
- ML:分类预测问题中评价指标(ER/混淆矩阵P-R-F1/ROC-AUC/RP/mAP)简介、使用方法、代码实现、案例应用之详细攻略
- OS_CORE.C(8)
- Java学习之动态代理
- 转 多租户SaaS架构
- C#最基本的小说爬虫
- COGS 2274. [HEOI 2016] tree
- pyhton (一)基础
- sql添加列,删除列,修改列
- BZOJ 1016 最小生成树计数
- com.microsoft.sqlserver.jdbc.SQLServerException: 索引 1 超出范围