解决方案 »

  1.   

    package com.company;import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;/**
     * Created by he on 2014/6/27.
     */
    public class Test2 {
        public static void main(String[] args) {
            FileWriter fw = null;
            BufferedWriter bfw = null;
            
            try {
                fw = new FileWriter("demo3.txt");
                bfw = new BufferedWriter(fw);
                bfw.write("uasifuisbuisBufferedReaderbisb");
                System.out.println("sdbjsd21515");
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    bfw.flush();
                    bfw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }代码改成上面形式就正常了。
      

  2.   

    我个人理解,就第一段来说哈,try出了异常之后,try里代码就不会继续往下运行,而finally又是必须要运行的代码,所以finally运行的时候,bfw不一定能得到声明。也就是说代码里不一定有bfw这个东西,当然也就不一定有close这个方法,这时调用close这个方法就会出错啊一般把引用变量写在try外面吧,先确保其存在。后面做fw!=null的判断也基本基于此本人菜鸟额说错了的请指出,谢谢
      

  3.   

    肯定会报错,变量范围太小了,finally里找不到,把变量定义在try外面
      

  4.   

    第一段,从语法上在finally里面根本看不到bfw。从运行顺序来看,假设你16行运行出错,这个时候,还没定义bfw,finally如何收尾。所以,编译器比如会禁止这种写法。