异常处理方式一(try-----catch-----finally) [Java]

异常处理方式一

try-----catch-----finally的结构

eg:

try{
    //这里是异常发生的语句
}catch(异常类型1 变量名){
    //处理异常的方式1
    //这里是要对异常进行处理的语句
    //这里我们一般使用两个常用的方法对异常进行处理
}catch(异常类型2 变量名){
    //异常的处理方式2
}catch(异常类型3 变量名){
    //异常的处理方式3
}
...
    
finally{
    //一定会执行的代码
}
  • try就是起了一个监听目的
  • try中就是要包住可能会出现异常的代码(其中可以以包一些没有异常的正常的代码,但尽量少包)

注意:一旦try中可能发生异常的语句真的发生异常之后,就会抛出异常对象,那么try中异常语句后的代码就会不再执行了

  • 上面的try-----catch-----finally结构中的finally可以加也可以不加,就和switch语句中的defauly有点像

try------catch-------finally使用中的注意事项

  1. finally是可选的(可以写,也可以不写)

  2. 使用try将可能出现异常的代码包装起来,一旦出现异常,就会生成一个对应的异常类型的对象,根据此异常的类型去catch中匹配

  3. 一旦try中的异常对象匹配到某一个catch中时,就进入catch中进行异常的处理,一旦处理完成就跳出当前的try----catch结构(没有写finally的情况),继续执行其后的代码

  4. catch中的异常类型如果没有子父类关系,谁声明在上谁声明在下都没有关系(但是如果catch中的异常存在字父类关系,则要求子类一定要定义在父类的上面,否则就会编译报错)

  5. catch中常用的异常对象处理方式:

    方式一: String(这里的String为返回值) getmessage()

    方式二: printStackTrace() (这个函数没有返回值)

    • 这两个异常处理方式,方式二更加常用
  6. 在try结构中声明的变量在出了try结构以后,就不能再被调用了

    • 这时我们可以将声明变量进行在try结的外面,只在try结中进行赋值就行了
  7. try ------catch----finally结构可以嵌套使用

体会一下通过使用try----catch—finally处理编译时异常,使得程序在编译时就不再报错,但是运行时仍旧可能报错(相当于我们使用try----catch----finally将一个编译时可能出现的异常延迟到运行时出现)

try-----catch------finally解决编译时异常:

eg:

public static void main(args [] args){
    File file=new File("hello.txt);
    FileInputStream fis=new FileInPutStream(file);   // FileNotFoundException(可能回发生)
    int data = fis.read();  //可能会发生IOException
    While(data!=1){
        System.out.Println((char)data);
        data=fis.read();  //IOException
    }
    fis.close();  //IOException
                       //这里的FileNotFoundException是IOException的一个子类
     
}

try ------catch-----finally中finally的使用

  1. finally是可选的,可以写也可以不写
  2. finally中的写的代码是一定会被执行的语句,即使是catch中又出现异常了(这个时候catch后的代码就不会执行了),try中又return语句,catch中有return语句等情况下,都也会执行finally中的语句
  3. 什么时候用finally"
    • 像数据库链接,输入输出流,网络编程中的socket等资源等jvm是不能自动垃圾回收的,我们就需要自己手动的进行资源的释放,此时的资源释放就需要声明在finally中

编译时异常和运行时异常的不同处理:

开发中由于运行时异常比较常见,而且运行时异常在我们编写代码时不可见,所以我们通常不针对运行时异常

编写try-----catch------finally

而针对编译时的异常,我么就一定要考虑异常的处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值