黑马程序员技术交流社区

标题: IO操作时的问题 [打印本页]

作者: 赵许星    时间: 2013-11-2 14:26
标题: IO操作时的问题
package cn.smarking.day1;
import java.io.*;

public class IOStream {
        public static void main(String[] argds){
               
                FileWriter fw = null;
                try {
                        fw = new FileWriter("k://demo.txt");
                        fw.write("abcdef");
                        fw.flush();                       
                } catch (IOException e) {
                        e.printStackTrace();
                }
                finally{       
                        try {
                                if(fw!=null)
                                        fw.close();
                        } catch (IOException e) {
                                e.printStackTrace();
                        }
                }
                System.out.println("Successful");               
        }
}

//这是优化后的程序
new FileWriter("k://demo.txt");
1、new出后的对象在程序中的生命周期范围是多少?为何在catch{}中还可以被引用
2、try{}中代码块的变量不能被catch{}中调用,就是相当于两个函数?

作者: 零下五度的水    时间: 2013-11-2 14:39
本帖最后由 零下五度的水 于 2013-11-2 14:52 编辑

{ } 好像是叫做作用域限定符,~变量~在程序中的生命周期就是它所属的作用域内,

至于new出的对象,如果主程序通向该对象的所有通路都被截断,则生命周期结束,
比如 FileWriter fw = null; 之后指向了一个new对象
只要 fw 还存在,那他指向的new对象就会一直存在,
如果 fw 的生命周期完结,相当于这条通路被截断,若指向的对象没有其他通路的话,在下一次垃圾回收器运行阶段会被自动回收
你是学过C是吧,C和C++也是一样的,C在 fw 消亡之前必须手动将指向的对象销毁,否则那个对象会一直存在而且永远无法被发现
Java只是将这个过程做了封装而已


作者: ~﹏~    时间: 2013-11-2 15:53
1.new出来的对象的作用域通俗点说就是从它上面的{到最近的},在try中new出来的对象catch中和finally中都可以引用到(特殊情况)
2.try中的代码它不是一个函数,catchz中当然不会调用得到他,如果想实现相同的功能你再写一边和try中一样的代码把(如果可以调用,那会造成无限循环的情况的)!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2