Java异常

寵の児 提交于 2019-12-21 08:17:02

Java异常

什么是异常?

程序在运行过程中发生由于外部问题导致的程序异常事件,发生的异常会中断程序的运行。(在Java等面向对象的编程语言中)异常本身是一个对象,产生异常就是产生了一个异常对象。为了能够及时有效地处理程序中的运行错误,必须使用异常类。
异常本质上是程序上的错误

异常分类

Throwable

Error

Exception :

运行时异常
也称不检查异常(Unchecked Exception)
运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutBoundException等,这些异常是不检查异常,程序中可以先择捕获处理,也可以不处理。这些异常一般由程序逻辑错误引起,程序应该从逻辑角度尽可能避免这类异常的发生。

非运行时异常

也称检查异常(Checked Exception)
非运行时异常,是指RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、ClassNotFoundException等以及用户自定义的Exception异常,一般情况下不自定义检查异常

使用try-catch-finally实现异常处理

写法格式

    try{
        //逻辑程序块
    } catch (//异常类型1  e) {
        //处理代码块1
    } catch (//异常类型2  e){
        //处理代码块2
        throw(e);//在抛出这个“异常”
     } finally {
        //释放资源代码块
     }

printStackTrance()方法:
指出异常的类型、性质、栈层次、及出现在程序中的位置

getMessage()方法:
输出错误的性质

toString()方法:
给出异常的类型与性质

需要注意

  • 异常处理语法结构中只有try块是必需的,就是说,果如没有try块,则不能有后面的catch块和finally块
  • catch块和finally块都是可选的,但是catch块和finally块至少出现其中之一,也可以同时出现
  • 可以有多个catch块,捕获父类异常的catch块必须位于捕获子类异常的后面
  • 不能只有try块,既没有catch块,也没有finally块
  • 多个catch必须位于try块之后,finally块必须位于所有的catch块之后
    finally与try语句块匹配的语法格式,此种情况会导致异常丢失,所以不常见。
使用throw和throws实现异常处理

throws声明异常
当一个方法产生一个它不处理的异常时,那么就需要在该方法的头部声明这个异常,以便将该异常传递到方法的外部来进行处理。

返回值类型 方法名(参数列表) throws Exception1 ,Exception 2,…{…}

public static int test(int a, int b) throws ArithmeticException{
	if (b == 0) {
		throw new ArithmeticException("算数异常");
	} else {
	return a / b;
	}
}

throw抛出异常
throw语句用来直接抛出一个异常,后接一个可抛出的异常类对象.

throw  ExceptionObject;

ExceptionObject必须是Throwable类或其子类对象。如果是自定义异常类,也必须是Throwable的直接或间接子类

自定义异常类

因为项目中会出现特有的问题,而这些问题并未被java所描述并封装对象。所以对于这些特有的问题可以按照java的对问题封装的思想。将特有的问题。进行自定义的异常装。

自定义异常的语法形式为:

class 自定义异常名 extands Exception

在编码规范上,一般将自定义异常类的类名命名为XXXException,其中XXX用来代表该异常的作用。
自定义异常类一般包含两个构造方法:一个是无参的默认构造方法,另一个构造方法以字符串的形式接收一个定制的异常消息,并将该消息传递给超类的构造方法。

  • 当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。要么在内部try catch处理。要么在函数上声明让调用者处理。
  • 一般情况在,函数内出现异常,函数上需要声明,此时会发现打印的结果中只有异常的名称,却没有异常的信息。因为自定义的异常并未定义信息
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!