Java异常类型及处理
一、什么是java异常?
异常就是程序运行过程中不正常执行.(例如:算术异常,重写异常,)异常是一个事件,它发生在程序运行期间,中断了正在执行的程序的正常指令流。
二、 异常机制的概述
异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。
程序错误分为三种:1.编译错误;2.运行时错误;3.逻辑错误。
(1)编译错误是因为程序没有遵循语法规则,编译程序能够自己发现并且提示我们错误的原因和位置,这个也是大家在刚接触编程语言最常遇到的问题。
(2)运行时错误是因为程序在执行时,运行环境发现了不能执行的操作。
(3)逻辑错误是因为程序没有按照预期的逻辑顺序执行。异常也就是指程序运行时发生错误,而异常处理就是对这些错误进行处理和控制。三、异常的结构
在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出)。

Throwable,它包括Java异常处理的两个重要子类:Error和Exception.
二者都是 Java 异常处理的重要子类,各自都包含大量子类。异常和错误的区别是:异常能被程序本身可以处理,错误是无法处理。
Throwable类中常用方法如下:
String | getMessage() 返回此 throwable 的详细消息字符串。 |
StackTraceElement[] | getStackTrace() 提供编程访问由 printStackTrace() 输出的堆栈跟踪信息。 |
void | printStackTrace() 将此 throwable 及其追踪输出至标准错误流。 |
String | toString() 返回此 throwable 的简短描述 |
Error(错误):
Error出现,是程序无法处理的错误,表示运行应用程序中较严重问题。
必须解决
处理方式: 只能抛出
Exception(异常):
1.编译器异常
写完代码.编译后,未运行就报错,必须处理该异常
非RuntimeException及其子类的异常都是编译器异常类
又称做:受检查异常
2.运行时异常
在代码运行期间可能出现的异常
这种异常,可以不做强制处理(不做处理,默认是将运行时异常抛出,也可以显式的声明抛出,或者是捕获)
特指RuntimeException类及其子类.
三、异常处理机制
在 Java 应用程序中,异常处理机制为:抛出异常,捕捉异常。
抛出异常(throws):
1.抛出:程序出现错误或者异常,会将异常信息以标注错误输出流的形式输出到控制台.
2.抛出的语法
2.1 在方法的参数列表和方法体之间使用throws声明抛出的异常类名
2.2多个异常使用,(逗号)隔开
2.3 如果声明抛出了很多异常类,那么可以直接写父类异常统一代表
2.4 程序一旦抛出异常,那么在抛出处,程序停止,不再向下执行
手动抛出异常(throw)
1 throw是真正创建出—个异常对象,并将该对象抛出
2 throw是写在方法体中
3 throw后跟==—个异常对象==
4程序中一旦使用throw抛出异常,如果抛出的编译期异常就必须处理该异常
捕获异常(try-catch):
捕获:程序出现异常将异常捕获,后续代码可以正常执行的.
捕获的语法:
try{
//可能有异常的代码
捕获的语法
}catch (异常类名对象){
/抓住之后,做的事
}
特点:
1 try{)内部,出现异常,那么try内部出现异常处后面的代码,不再执行
2但是,整体的try…catch后面的代码,会正常执行,即try中即使有异常;但是程序也会正常执行
3 try catch,只会捕获catch中指定的异常对象
4如果想要捕获多个异常,需要些多个catch 注意:真正在执行时只会抓住一个异常对象
三、Java常见异常
1. RuntimeException子类:
序号 | 异常名称 | 异常描述 |
1 | java.lang.ArrayIndexOutOfBoundsException | 数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。 |
2 | java.lang.ArithmeticException | 算术条件异常。譬如:整数除零等。 |
3 | java.lang.SecurityException | 安全性异常 |
4 | java.lang.IllegalArgumentException | 非法参数异常 |
5 | java.lang.ArrayStoreException | 数组中包含不兼容的值抛出的异常 |
6 | java.lang.NegativeArraySizeException | 数组长度为负异常 |
7 | java.lang.NullPointerException | 空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等。 |
2.IOException
序号 | 异常名称 | 异常描述 |
1 | IOException | 操作输入流和输出流时可能出现的异常 |
2 | EOFException | 文件已结束异常 |
3 | FileNotFoundException | 文件未找到异常 |
3. 其他
序号 | 异常名称 | 异常描述 |
1 | ClassCastException | 类型转换异常类 |
2 | ArrayStoreException | 数组中包含不兼容的值抛出的异常 |
3 | SQLException | 操作数据库异常类 |
4 | NoSuchFieldException | 字段未找到异常 |
5 | NoSuchMethodException | 方法未找到抛出的异常 |
6 | NumberFormatException | 字符串转换为数字抛出的异常 |
7 | StringIndexOutOfBoundsException | 字符串索引超出范围抛出的异常 |
8 | IllegalAccessException | 不允许访问某类异常 |
9 | InstantiationException | 当应用程序试图使用Class类中的newInstance()方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该异常 |
10 | java.lang.ClassNotFoundException | 找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。 |
四、相关的问题
1. 为什么要创建自己的异常?
答:当Java内置的异常都不能明确的说明异常情况的时候,需要创建自己的异常。
2.throw和throws的区别?
1 throw后面跟异常对象,throws异常类名
2 throw后面跟一个对象,throw后面跟多个类名
3 throw在方法内部使用,throws 在方法签名上使用
















