JAVA-异常<Exception>

来源:互联网 发布:唯一网络招聘 编辑:程序博客网 时间:2024/04/30 04:10

异常的概念

异常和错误的区别

  • 异常是不正常的事件,不是错误!
  • 异常是指程序运行的过程中,发生某些意外的事情。
public class ExcptionTest {    public  void test(){        System.out.println("====运行前====");        int a=10/0;        System.out.println("====运行后====");    }    public static void main(String[] args) {        ExcptionTest et= new ExcptionTest();        et.test();    }}

而错误是很难处理的,比如内存溢出,不能够通过异常处理来解决。
异常是程序中发生的不正常事件流,通过程序依然可以运行下去。但是错误是无法控制的,程序肯定要中断。
*异常可以被程序本身处理,而错误是无法处理的。

Java异常类层次结构图

这里写图片描述

在Java中,所有的异常都有一个共同的父类 Throwable(可抛出)。Throwable指定代码中可用异常传播机制通过Java应用程序传输的任何问题的共性。

Throwable
  • 有两个重要的子类:Exception(异常)和Rrror(错误),二者都是Java异常处理的重要子类,各自都包含大量子类。

Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM (Java虚拟机)出现的问题。例如,Java虚拟机运行错误(Virtual MachineError),当 JVM 不再有继续执行操作所需的内存资源时,将出现OutOFMemoryRrror。这些异常发生时,Java虚拟机(JVM)一般回选择线程终止。

Exception(异常):
是程序本身可以处理的异常。
Exception 类有一个重要的子类RuntimeException。RuntimeException类及其子类表示 JVM 常用操作引发的错误。

运行时异常:
都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,在程序中可以捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

非运行时异常(编译异常):
是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。

异常处理的关键字

  • throw:有时我们需要创建并抛出异常对象来终止程序的正常执行。throw关键字用来抛出并处理运行时异常。
  • throws:当我们抛出任何被检测的异常病不处理时,需要在方法签名中使用关键字throws来告知调用程序此方法可能会抛出异常。调用方法可能会处理这些异常,或者同样用throws来将异常传给上一级调用方法。throws关键字后可以接多个潜在异常。
  • try-catch:我们在代码中用try-cacth块处理异常,当然,一个try块之后可以有多个catch,try-catch块也能嵌套。每个catch块必须接受一个(且仅有一个)代表异常类型的参数。
  • **finally:**finally块是可选的,并且只能配合try-catch一起使用。不管异常有没有出现,finally块总会被执行。

异常处理

在 Java 应用程序中,异常处理机制为:抛出异常,捕捉异常。

  • 抛出异常:当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含了异常类型和异常出现时的程序状态等异常信息。运行时系统负责寻找处置异常的代码并执行。
  • 捕获异常:在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器(exception handler)。潜在的异常处理器是异常发生时依次存留在调用栈中的方法的集合。当异常处理器所能处理的异常类型与方法抛出的异常类型相符时,即为合适 的异常处理器。运行时系统从发生异常的方法开始,依次回查调用栈中的方法,直至找到含有合适异常处理器的方法并执行。当运行时系统遍历调用栈而未找到合适 的异常处理器,则运行时系统终止。同时,意味着Java程序的终止。

java常见异常

在Java中提供了一些异常用来描述经常发生的错误,对于这些异常,有的需要程序员进行捕获处理或声明抛出,有的是由Java虚拟机自动进行捕获处理。Java中常见的异常类:

runtimeException子类

1、 java.lang.ArrayIndexOutOfBoundsException
数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。
2、java.lang.ArithmeticException
算术条件异常。譬如:整数除零等。
3、java.lang.NullPointerException
空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等
4、java.lang.ClassNotFoundException
找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。
5、java.lang.NegativeArraySizeException 数组长度为负异常
6、java.lang.ArrayStoreException 数组中包含不兼容的值抛出的异常
7、java.lang.SecurityException 安全性异常
8、java.lang.IllegalArgumentException 非法参数异常

IOException

1、IOException 操作输入流和输出流时可能出现的异常。
2、EOFException 文件已结束异常
3、FileNotFoundException 文件未找到异常

其他

1、ClassCastException 类型转换异常类
2、ArrayStoreException 数组中包含不兼容的值抛出的异常
3、SQLException 操作数据库异常类
4、NoSuchFieldException 字段未找到异常
5、NoSuchMethodException 方法未找到抛出的异常
6、NumberFormatException 字符串转换为数字抛出的异常
7、StringIndexOutOfBoundsException 字符串索引超出范围抛出的异常
8、IllegalAccessException 不允许访问某类异常
9、InstantiationException 当应用程序试图使用Class类中的newInstance()方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该异常

原创粉丝点击