Java基础06—异常处理

本文是学习Java时所记录的学习笔记,本节包含了异常的相关知识,是从《疯狂Java讲义第四版》中学习。欢迎留言、私信交流~~

异常处理简介

  • 异常机制可以使程序中的异常处理代码和正常业务代码分离。
  • Java的异常机制主要依赖于try、catch、finally、throw和throws五个关键字。
  • 父类异常应该放在子类异常的后面。
  • 不要过度使用异常处理,不能替代流程控制。对不能确定和不能预知的运行时错误才应使用异常。
  • try块不要过于多的内容,应更加细化,分别捕获并处理异常。
  • 避免使用“catch(throwable t)”(Catch All)语句。该语句会导致无法对不同的异常分情况处理。该条语句作用主要是通过避免错误处理而加快变成进度的机制。
  • 不要忽略捕获到的异常,需要对异常做出反应。

异常语法说明

  • 捕捉多种类型的异常时,多种异常类型之间用竖线(|)隔开。

  • 使用多种类型异常时,异常变量有隐式的final修饰。

  • 语法

    try{
    	//业务实现代码
    }
    catch(Exception e){
    	alert 输入不合法
    	goto retry
    }
    
  • 常见异常

    常名称说明
    ndexOutOfBoundsException数组越界异常。
    umberFormatException数字格式异常。
    rithmeticException除0异常。
    xception是“其他”异常的父类
    ullPointerException调用null对象的实例方法或者实例变量产生的异常。
  • 异常处理常用方法

    对象常用方法说明
    etMessage()返回该异常的详细描述字符串。
    rintStackTrace()将该异常的跟踪栈信息输出到标准错误输出。
    rintStackTrace(PrintStream s)将该异常的跟踪栈信息输出到指定输出流。
    etStackTrace()返回该异常的跟踪栈信息。

异常相关知识

finally回收资源
  • finally块总会被执行,用于回收在try块里打开的一些物理资源。
  • finally块必须位于catch之后。
  • 如果在异常处理代码中使用System.exit(1),则finally块将会失去执行的机会。
  • 自动关闭资源的try语句(在try后面跟上圆括号,圆括号中包含一个或多个资源,try语句在该语句结束时自动关闭这些资源)。
    try(bufferedReader br = new BufferedReader(
    new FileReader("AutoCloseTest.java"));
    PrintStream ps = new PrintStream(new FileOutputStream("a.txt"))){}
    
throws声明自动抛出异常
  • 当方法不知道如何处理这种类型的异常,该异常应该由上一级调用者处理。方法签名中抛出异常。
  • 方法重写时,子类使用throws声明抛出的异常需要是父类的方法声明抛出的异常子类或相同。
    throws ExceptionClass1 , ExceptionClass2...
    
throw声明手动抛出异常
  • 可根据业务需要来决定是否抛出异常。单个抛出异常。
  • 语法
    throw ExceptionInstance;
    
Runtime和Checked的区别
  • Checked异常:如IO异常、SQL异常。

  • Runtme异常:如类型转换、数组越界异常。

  • checked异常:要么throw处于try块里,要么放在带throws声明抛出的方法中。

  • runtime异常:无需放在try块和带throws声明抛出的方法中,可以显示使用try-catch处理,也可以不理会。

异常链
  • 把捕获一个异常然后抛出另一个异常,把原始异常信息下来是一种典型的链式处理,也被称为“异常链”。
  • JDK1.4以后,所有Throwable的子类在构造器中都可以接收一个cause对象作为参数,这个cause用来表示原始异常,这样可以把原始异常传递给新的异常,能够通过异常链追踪到异常最初发生的位置。
  • 例子
    业务代码中:
    //传入了一个Exception对象
    catch(Exception e)
    	{
    		throw new SalException(e);
    	}
    
    SalException extends Exception类的代码:
    //接收了Throwable的参数构造器
    public SalException(Throwable t)
    {
    	super(t);
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值