Java异常类型及处理

一、什么是java异常?

异常就是程序运行过程中不正常执行.(例如:算术异常,重写异常,)异常是一个事件,它发生在程序运行期间,中断了正在执行的程序的正常指令流。

二、 异常机制的概述

异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。

程序错误分为三种:1.编译错误;2.运行时错误;3.逻辑错误。
  (1)编译错误是因为程序没有遵循语法规则,编译程序能够自己发现并且提示我们错误的原因和位置,这个也是大家在刚接触编程语言最常遇到的问题。
  (2)运行时错误是因为程序在执行时,运行环境发现了不能执行的操作。
  (3)逻辑错误是因为程序没有按照预期的逻辑顺序执行。异常也就是指程序运行时发生错误,而异常处理就是对这些错误进行处理和控制。

三、异常的结构

在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出)。

JAVA出现错误能运行 java错误类型与解决方法_程序人生


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 在方法签名上使用