java 异常处理

内容来自中软国际java培训

一、基本使用

  1. 基本结构

try{
    //可能发生异常的语句
}catch(Exception e){
    e.printStackTrace();//打印异常信息
}
  1. 一个可能发生多种不同异常的代码块,可以分别捕获异常

需要注意,哪一行异常捕获就直接出去了,不会执行后面的了

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
    Date day = sdf.parse("1999-9-9");
    String str = null;
    str.length();
}catch (ParseException e){//捕获日期格式错误异常
    e.printStackTrace();//打印异常信息
}catch (NullPointerException e){//捕获空指针异常
    e.printStackTrace();
}

3. 一个可能发生多种异常的代码块,也可以在一个代码块中统一捕获

使用“|”表示捕获的异常是其中之一(关系为或)

try {
    Date day = sdf.parse("1999-9-9");

    String str = null;
    str.length();
}catch (ParseException | NullPointerException e){
    e.printStackTrace();//打印异常信息
}

4. 使用父类型异常可以捕获子类型异常

try {
}catch (Exception e){//父类型异常
    e.printStackTrace();
}

5. 使用父类型异常可以同时捕获多个子类型异常

try {
    Date day = sdf.parse("1999-9-9");
    String str = null;
    str.length();
}catch (Exception e){//可以捕获日期格式异常和空指针异常
    e.printStackTrace();
}

6. 父子类型异常同时出现在多个catch块中,父类不能在前

子类异常在后,出现编译错误。因为父类异常在前,已经涵盖了子类异常。(若子类再出现,属于重复处理,或无法进入的catch)

try {
    Date day = sdf.parse("1999-9-9");
    String str = null;
    str.length();
}catch (ParseException e){//子类型捕获日期格式异常
    e.printStackTrace();
}catch (Exception e){//父类写在后面
    e.printStackTrace();
}

7. finally:无论如何都必须执行的代码

try {
    Date day = sdf.parse("1999/9/9");
    return;//在未抛出异常时,首先会执行finally中的代码,才会执行return语句
}catch (ParseException e){
    e.printStackTrace();
}finally{
    System.out.println("无论如何,最终都会被执行的代码!");
}

8. try-finally用法

try {
    String str = null;
    str.length();
}finally {//有return也拦不了,反正都会执行
    System.out.println("无论如何必须被执行!");
}

二、throw与throws

  1. throws向外抛出异常

  1. 在方法中出现的异常,可以不处理,在方法的申明后,使用“throws+异常类名”,表示继续向外抛出

  1. 对于抛出异常的方法的调用者来讲,应当处理它(若不处理,则继续向外抛出)

2. throws层层抛出异常

向外抛出异常,调用者也不处理,继续抛给下一个

3. throw自行抛出异常对象

public static int div(int a, int b) throws Exception {
    if(b == 0){
        //自行抛出异常:使用throw+抛出的异常对象
        throw new Exception("除法错误:b不能为0!");
    }

    return a / b;
}

三、抛出异常与方法覆盖

对于方法的覆盖(Override),抛出异常的规定:

若父类方法抛出异常,则子类方法:

1.可以不抛出异常

2.可以抛出与父类方法一样的异常

3.可以抛出父类方法抛出的异常的子类异常

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值