欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java异常处理机制,java异常处理

来源: javaer 分享于  点击 48057 次 点评:125

Java异常处理机制,java异常处理


本文总结的是Java的异常处理机制,其它语言的异常处理与Java的思想是一致的,细节可以自行百度一下。接下来会按照以下目录来总结以下Java异常处理机制。

目录

Java异常分类

Java中异常处理过程

 总结

Java中常见的异常处理类

Java中常见的异常处理函数

Java中抛出异常

throws

 throw

用户自定义异常


Java异常分类

Java异常分两大类,Error和Exception,其中这两个类都是Throwable 类的子类。

Error类:严格地说Error类不属于异常,它是错误,但这里先归为异常里面,Error表示系统级的错误,是java运行环境内部错误或者硬件问题,例如,JVM 内存溢出等。,它是Java虚拟机抛出的。

Exception异常类:表示程序需要捕捉、需要处理的异常,是由与程序设计的不完善而出现的问题,程序必须处理的问题。其中Exception异常类又分为运行时异常(Runtime Exception)和检查性异常(Checked Exception)。

运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略,运行时异常在代码中不一定要求捕获或者抛出。一般运行时异常有空指针,数组越界等。

检查性异常(重要):最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。因此检查性异常必须要处理。

Java中异常处理过程

我们会将可能会出现异常的代码放到try语句块中,如果有异常出现通过catch来截获并进行解决处理异常,最后一个选择的通过finally语句块来执行一段代码。

接下来按照种情况介绍程序执行的顺序

1.不会出现异常的try{}catch(){}finally{}

try{
    代码块1
}catch(异常1 e){
    代码块2
}catch(异常2 e){
    代码块3
}finally(){
    代码块4
}

运行顺序是:代码块1 -> 代码块4

2.不会出现异常的try{}catch(){}

try{
    代码块1
}catch(异常1 e){
    代码块2
}catch(异常2 e){
    代码块3
}

运行顺序是:代码块1

3.会出现异常的try{}catch(){}finally

try{
    代码块1
}catch(异常1 e){
    代码块2
}catch(异常2 e){
    代码块3
}finally(){
    代码块4
}

运行顺序是:代码块1 -> 代码块2或代码块3(主要根据产生的是哪个异常)-> 代码块4

4.会出现异常的try{}catch(){}

try{
    代码块1
}catch(异常1 e){
    代码块2
}catch(异常2 e){
    代码块3
}

运行顺序是:代码块1 -> 代码块2或代码块3(主要根据产生的是哪个异常)

 总结

因此可以看出无论发不发生异常,如果有finally代码块,都会执行finally代码块的内容。如果在try、catch、finally都中出现return语句呢,那执行的顺序变为以下几种情况:

1.没有异常抛出的时候并且try和finally都有return语句:执行到try语句块中的return语句时,系统会将return的值存储到一个变量中,然后跳过catch去执行finally里的代码,执行完finally代码返回finally里面的return返回的值。

2.没有异常抛出的时候并且只有try有return语句:执行到try语句块中的return语句时,系统会将return的值存储到一个变量中,然后跳过catch去执行finally里的代码,执行完finally代码,最后返回try语句块中的那个return的值,也就是执行完try时系统存的那个变量值。

3.有异常抛出的时候并且try、catch和finally都有return语句:执行到try语句块时抛出异常,进入catch语句块中,执行catch语句块,系统会将catch中的return的值存储到一个变量中,然后去执行finally里的代码,执行完finally代码返回finally里面的return返回的值。

4.有异常抛出的时候并且try和catch有return语句:执行到try语句块时抛出异常,进入catch语句块中,执行catch语句块,系统会将catch中的return的值存储到一个变量中,然后去执行finally里的代码,执行完finally代码,最后返回catch语句块中的那个return的值,也就是执行完catch时系统存的那个变量值。

Java中常见的异常处理类

常见的异常处理

异常 介绍 ArithmeticException 当出现异常的运算条件时,抛出此异常。 ArrayIndexOutOfBoundsException 用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引。 ArrayStoreException 试图将错误类型的对象存储到一个对象数组时抛出的异常。 IndexOutOfBoundsException 指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。 StringIndexOutOfBoundsException 此异常由 String 方法抛出,指示索引或者为负,或者超出字符串的大小。

Java中常见的异常处理函数

常用的异常处理函数
异常处理函数 介绍
public String getMessage() 返回关于发生的异常的详细信息。
public Throwable getCause() 返回一个Throwable 对象代表异常原因。
public String toString() 使用getMessage()的结果返回类的串级名字。
public void printStackTrace() 打印toString()结果和栈层次到System.err,即错误输出流。

Java中抛出异常

throws

有的时候我们在封装某一个函数时,可能不想自己去捕获异常,这时我么可以通过throws来抛出异常,之后由使用该函数的人来捕获异常。当我们通过throws来抛出异常时,我么将throws语句写在方法体的尾部。 

public void throwsFunction()throws IOException,ClassCastException{
    //方法体,这里不需要再写try{}catch(){}来捕获异常了
}

 throw

有时我们需要自己抛出异常并进行处理,这时可以使用throw来抛出异常再通过catch来捕获并解决异常或者直接通过throws抛出该异常。

public int divideFunction(int x,int y){
    if(y==0){
        try{
            throw new ArithmeticException();
        }catch(ArithmeticException e){
            System.out.println("除数不能为0");
            return 0;
        }
    }
    else{
        return x/y;
    }
}

用户自定义异常

有时我们需要自己定义异常类,我们定义的一场类都会继承自Throwable的子类,如果想定义运行时异常我们就将我们定义的异常类继承Runtime Exception,当然我们一般都会定义检查性异常类,这时我们必须继承Exception类。

相关文章

    暂无相关文章
相关栏目:

用户点评