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盘。。。。