Java中流在使用过程中异常的处理try catch finally及Exception in thread “main“ java.lang.NullPointerException的处理

JDK7前处理

在之前的练习中,我们一直把异常抛出,而实际的开发中并不能这样处理,建议使用try catch finally代码

块,处理异常部分

格式:

格式:
    try{
        可能会产出异常的代码
    }catch(异常类的变量 变量名){
        异常的处理逻辑
    }finally{
        一定会执行的代码
        资源释放
    }

变量所在的作用域在:变量所在的大括号范围内有效

1、提高变量的作用域(拿变量到大括号的外面)

作用:可以让finally可以使用

2、初始化提高

变量在定义的时候可以没有值,但是使用的时候必须有值

fw = new FileWriter("F:\\develop\\h.txt");//代码执行失败fw就没有值,继而fw.close会报错

这时候可以给 FileWriter fw一个空值,即FileWriter=nill;

做完上面的事情后发现close还是会报错,解决异常要使用try catch,直接Alt+Enter选择try catch就OK了

fw.close方法声明抛出了 IOException异常对象,所以我们就得处理这个异常对象,要么throws要么 try catch

throws这个程序其实没啥意义

close方法源码:

public void flush() throws IOException {
        se.flush();
    }

 Java中流在使用过程中异常的处理try catch finally

package com.baidu.文件类的代码;

import java.io.FileWriter;
import java.io.IOException;

public class TryCatchFinally {
    public static void main(String[] args) {
        FileWriter fw=null;
       try{
           //可能会产出异常的代码
                fw = new FileWriter("F:\\develop\\h.txt");
           for (int i = 0; i < 10 ; i++) {
               fw.write("boluochuixue"+i+"\r\n");
           }
       }catch (IOException e){
            //异常处理逻辑
           System.out.println(e);
       }finally {
           try {
               fw.close();
           } catch (IOException e) {
               e.printStackTrace();
           }
       }
    }
}

程序执行结果:

如果在上面的程序中,构造方法中绑定一个未知的路径,程序会报java.io.FileNotFoundException: L:\develop\h.txt (系统找不到指定的路径。)错误

我的电脑没有L盘,所以这在我电脑上是一段错误代码

package com.baidu.文件类的代码;

import java.io.FileWriter;
import java.io.IOException;

public class TryCatchFinally {
    public static void main(String[] args) {
        FileWriter fw=null;
       try{
           //可能会产出异常的代码
                fw = new FileWriter("L:\\develop\\h.txt");
           for (int i = 0; i < 10 ; i++) {
               fw.write("boluochuixue"+i+"\r\n");
           }
       }catch (IOException e){
            //异常处理逻辑
           System.out.println(e);
       }finally {
           try {
               fw.close();
           } catch (IOException e) {
               e.printStackTrace();
           }
       }
    }
}

执行得到:

java.io.FileNotFoundException: L:\develop\h.txt (系统找不到指定的路径。)
Exception in thread "main" java.lang.NullPointerException
	at com.baidu.文件类的代码.TryCatchFinally.main(TryCatchFinally.java:20)

java.io.FileNotFoundException: L:\develop\h.txt (系统找不到指定的路径。)这一段是catch语句中的异常处理逻辑报出来的错误

Exception in thread "main" java.lang.NullPointerException空指针异常

继续优化程序:

创建对象失败了,fw的值默认是null空,null是不能调用方法的,所以会抛出一个空指针异常,要增加一个判断,

判断不为null再把资源释放

package com.baidu.文件类的代码;

import java.io.FileWriter;
import java.io.IOException;

public class TryCatchFinally {
    public static void main(String[] args) {
        FileWriter fw=null;
       try{
           //可能会产出异常的代码
                fw = new FileWriter("L:\\develop\\h.txt");
           for (int i = 0; i < 10 ; i++) {
               fw.write("boluochuixue"+i+"\r\n");
           }
       }catch (IOException e){
            //异常处理逻辑
           System.out.println(e);
       }finally {
           if (fw!=null){
               try {
                   fw.close();
               } catch (IOException e) {
                   e.printStackTrace();
               }
           }

       }
    }
}

程序结果(现在就没有空指针异常了):

java.io.FileNotFoundException: L:\develop\h.txt (系统找不到指定的路径。)

出现这个FileNotFoundException是正确的,因为我的电脑就没有L盘。。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值