异常和异常处理

//2021.07.22

目的

程序出现非致命错误或者语法错误时,让程序可以继续执行,比如当考虑的情况不够全面时。

异常的分类

  1. 编译时异常(必须处理)
  2. 运行期异常(选择性处理)继承自RuntimeExcpetion

基本语法

try{
    //code
}catch(异常类型 名){
    //code
}

出现的异常类型必须和catch()中的异常类型一直,但是catch中的异常类型可以是try类型出现的子类

所有的异常类的父类都是Exception

也就是说当使用下面这种方式时,可以捕获所有的异常(但是实际开发中一般不会使用)

try(){
    //code
}catch(Exception e){
    //code
    //e.printStackTrace() 将异常输出到栈,可以看作是打印异常
}

2021/07/23 10:14

异常的分类

异常处理方案

编译期间异常处理案例

try{
    //code 可能会出现异常的代码
    FireWriter writter=new FireWriter(file);
    //这里出现的是编译器异常
}catch(IOException e){
    //code  异常处理
}finally{
    writter.close();
}

运行期异常处理案例

String str=null;
try{
    str.toCharArry();
    //这里的异常是空指针异常,因为str的内容为空
    //这里的异常是编译器异常,编译期可以通过且不做处理
}catch(NullPointerException e){
    e.printStackTrace();
}

一些注意点

  1. try某一段语句中出现异常,后续语句将不会执行,直接跳转至catch
  2. catch语句可以存在多个
    1. 当出现的异常可能有多种类型时,可以使用到多个catch来捕获不同的异常
    2. 当出现的异常类型不同时,可以使用父类型的异常来捕获所有异常
    3. 但是父类型异常写在子类型前面时,会使子类型异常失去意义,导致编译错误
  3. 还有finally模块,3个模块,不能单独出现,但是try,catch,finally三个可以组合出现
    1. finally中的内容必定会执行 无论是否出现异常
try{
    //code
}finally{
    //code
}
//不做异常处理
    1. 只有中途手动exit(),即退出程序,可以不执行finally
    2. 即使前面出现了return ,也会在return之前执行finally
    3. 一般会在finally语句中结束一些占用资源且需要长时间开启的资源
      1. FileWriter
      2. FileReader
      3. ....

throws申明异常

如果一个方法中可能出现异常,但是又不方便处理时,可以使用申明异常由调用者处理

Tips:所有的运行时异常,都是默认抛出

public class test{
    public static void main(Sting [] args]) throws Exception{
        //main函数会收到method()的异常,继续申明抛出,但是会抛出到运行环境
    }
    
    public static void method() throws IOException{
        //捕获到异常不处理,直接申明抛出会直接抛出给Mian方法
        //但是程序的最后还是会进行异常处理
    }
}

手动抛出异常对象 throw

public class test{
    public static void main(String[] args]){
        int age=1800
        try{
            if(age>150){
                throw new RuntimeException("年龄过大")
                //手动(抛出)制造一个异常并抛出
            }catch(RuntimeException e){
                e.printStackTrace();
            }
        }
        sout("end");
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值