异常
某方法出错,该方法创建异常对象并传递给运行的系统,通过异常处理机制可以在当前方法中捕获并处理(与程序主逻辑分离),或可以向方法调用者抛出由调用者处理。
捕捉异常
try{}中发生异常的语句后跳转catch{},不会执行try{}异常语句后的代码.
java异常处理是结构化的,不会一个异常影响整个程序运行.
try-catch == 异常处理器
try{
//可能异常的代码块
}catch(Exception e){
//激发被捕获的异常
e.printStackTrace();//异常类型、性质、栈层次及代码异常位置
e.toString();//给出异常的类型与性质
e.getMessage();//输出错误性质
}finally{
//一定执行的代码块
/*不执行4种情况:
finally块发生异常,
前面的代码中使用了System.exit(),
程序所在线程死亡,
关闭CPU
*/
}
常见异常
异常类 | 说明 |
---|---|
ClassCastException | 类型转换异常 |
ClassNotFoundException | 未找到相应类异常 |
ArithmeticException | 算术异常 |
ArrayIndexOutOfBoundsException | 数组下标越界异常 |
ArrayStoreException | 数组中包含不兼容的值抛出异常 |
SQLException | 操作数据库异常 |
NullPointerException | 空指针异常 |
NoSuchFieldException | 字段未找到异常 |
NoSuchMethException | 方法未找到异常 |
NumberFormatException | 字符串转换为数字异常 |
NegativeArraySizeException | 数组元素个数为负数异常 |
StringIndexOutOfBoundsException | 字符串索引超出范围异常 |
IOException | 输入输出异常 |
IllegalAccessException | 不允许访问某类异常 |
InstantiationException | 当程序使用Class类中的newInstance()方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该异常. |
EOFException | 文件已结束异常 |
FileNotFoundException | 文件未找到异常 |
自定义异常
定义:继承Exception类即可自定义异常类
步骤:
1、创建自定义异常类
2、在方法体中通过throw抛出异常对象
3、如果在当前抛出异常的方法中处理异常,可使用try-catch捕获并处理,否则在方法的声明处throws指出可能抛给方法调用者的异常并在调用处使用异常处理器try-catch.
4、在出现异常方法的调用者中捕获并处理异常.
(既throws到调用者要在调用处进行try-catch处理,方法内处理既方法体用try-catch处理错误不必方法进行声明时throws)
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.sql.SQLException;
public class Demo01 {
public static void main(String[] args) throws NullPointerException, SQLException, NoSuchAlgorithmException {
try{
dosth1();
}catch (Exception e){
e.printStackTrace();
}
dosth2();
}
// 定义方法时,throws声明该方法可能抛出的异常类型
// 抛出的异常类型,RuntimeException类或其子类,则该方法调用时,异常可以不处理
public static void dosth1() throws NullPointerException,SQLException{
throw new NullPointerException();
}
// 抛出的异常类型,如果不是RuntimeException类或其子类,则该方法调用时,异常必须处理,
public static void dosth2(){
try{
throw new IOException();
}catch(Exception e){
e.printStackTrace();
}
}
}
若是Error、RuntimeException或它们的子类,可不用throws声明要抛出的异常,编译能通过运行时系统自动抛出.
throw和throws区别参见:
https://blog.csdn.net/interesting_code/article/details/103306389
版权声明:本文为CSDN博主「interesting_code」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
运行时异常
Throwable类派生两个子类–Exception、Error类.
Error类及其子类描述运行系统内部错误及资源耗尽错误(严重).
Exception类非致命性类.
RuntimeException运行时错误,编译可以通过,发生时程序停止不再继续执行.
注意:一个方法被重写,重写的方法要抛出相同异常/异常的子类。子类重写方法抛出异常为父类异常子集,子类不可新增异常.