Java异常笔记

异常

某方法出错,该方法创建异常对象并传递给运行的系统,通过异常处理机制可以在当前方法中捕获并处理(与程序主逻辑分离),或可以向方法调用者抛出由调用者处理。

捕捉异常

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运行时错误,编译可以通过,发生时程序停止不再继续执行.

Java异常类结构

注意:一个方法被重写,重写的方法要抛出相同异常/异常的子类。子类重写方法抛出异常为父类异常子集,子类不可新增异常.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值