赞
踩
Throwable
Error: 通常是出现重大问题抛出此异常,如运行的类不存在或则内存溢出,不用编写代码进行处理。
Exception: 在运行时出现的一种情况,可以通过try,catch,finally进行处理,也可以throws
Exception和Error的子类名称都是以父类名称作为后缀。
也可以抛出异常:
1.声明异常时,建议声明更为具体的异常,这样处理的可以更为具体。
2.对方声明的几个异常就应该有对应的几个catch块,不要定义多余的catch块,如果多个catch块中的异常出现继承关系,父类异常的catch块应该放在最下面。
3.建立在进行catch处理时,catch中一定要定义具体的处理方式,不要简单的定义一句e.printStackTrace(),也不要简单的输出语句。
throw使用在函数内,而throws是使用的函数上
throws后面跟的异常类,可以是多个,也可以逗号隔开,throw后面跟的是异常对象。
因为有的项目会出现特有的问题,而这些问题并未被java所描述并封装对象。
所以对于这些特有的问题可以按照java对问题封住的思想将特有的问题进行自定义异常封装。
Exception中有一个特殊的子类,RuntimeException,运行时异常,如果在函数中抛出这个异常,函数可以不用声明,编译一样通过。
之所以不用再函数声明,是因为不需要让调用者处理,当异常发生,希望程序停止,
因为在运行时出现了无法继续运算的情况,希望停止对代码进行修正,
自定义异常时,如果该异常的发生无法继续在进行运算,就让自定义异常标签继承RuntimeException。
对异常分为两种,编译时被检测的异常,和编译时不被检测的异常(运行时异常RuntimeException和其子类)
1.子类在覆盖父类时,如果父类抛出异常,那么子类的覆盖方法,只能派出父类的异常或者改异常的子类。
2.如果父类方法抛出多个异常,那么子类在覆盖改方法时,只能抛出父类异常的子集。
3.如果父类或者接口中的方法没有抛出异常,就必须要进行try处理,绝对不能抛。
将发生MyException异常,程序调转到catch (MyException e)代码块中执行
如果调用quotient()将会因“除数为0”错误引发ArithmeticException异常,属于运行时异常类,由Java运行时系统自动抛出。quotient()方法没有捕捉ArithmeticException异常,Java运行时系统将沿方法调用栈查到main方法,将抛出的异常上传至quotient()方法的调用者:
int result = quotient(a, b); // 调用方法quotient()
由于该语句在try监控区域内,因此传回的“除数为0”的ArithmeticException异常由Java运行时系统抛出,并匹配catch子句:
catch (ArithmeticException e) { // 处理ArithmeticException异常
System.out.println("除数不能为0"); // 输出提示信息
}
处理结果是输出“除数不能为0”。Java这种向上传递异常信息的处理机制,形成异常链
Java方法抛出的可查异常将依据调用栈、沿着方法调用的层次结构一直传递到具备处理能力的调用方法,最高层次到main方法为止。如果异常传递到main方法,而main不具备处理能力,也没有通过throws声明抛出该异常,将可能出现编译错误。
3.如果还发生其他异常,将使用catch (Exception e)捕捉异常。由于Exception是所有异常类的父类,如果将catch (Exception e)代码块放在其他两个代码块的前面,后面的代码块将永远得不到执行,就没有什么意义了,所以catch语句的顺序不可掉换。
注意:catch关键字后面括号中的Exception类型的参数e。Exception就是try代码块传递给catch代码块的变量类型,e就是变量名。catch代码块中语句"e.getMessage();"用于输出错误性质。通常异常处理常用3个函数来获取异常的有关信息:
getCause():返回抛出异常的原因。如果 cause 不存在或未知,则返回 null。
getMeage():返回异常的消息信息。printStackTrace():对象的堆栈跟踪输出至错误输出流,作为字段 System.err 的值。
有时为了简单会忽略掉catch语句后的代码,这样try-catch语句就成了一种摆设,一旦程序在运行过程中出现了异常,就会忽略处理异常,而错误发生的原因很难查找。
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 非法参数异常
- IO异常
IOException:操作输入流和输出流时可能出现的异常。
EOFException 文件已结束异常
FileNotFoundException 文件未找到异常
- 3.其他异常
ClassCastException 类型转换异常类
ArrayStoreException 数组中包含不兼容的值抛出的异常
SQLException 操作数据库异常类
NoSuchFieldException 字段未找到异常
NoSuchMethodException 方法未找到抛出的异常
NumberFormatException 字符串转换为数字抛出的异常
StringIndexOutOfBoundsException 字符串索引超出范围抛出的异常
IllegalAccessException 不允许访问某类异常
InstantiationException 当应用程序试图使用Class类中的newInstance()方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该异常
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。