A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵许星 中级黑马   /  2013-11-2 14:26  /  976 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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{}中调用,就是相当于两个函数?

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 零下五度的水 于 2013-11-2 14:52 编辑

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

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

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
1.new出来的对象的作用域通俗点说就是从它上面的{到最近的},在try中new出来的对象catch中和finally中都可以引用到(特殊情况)
2.try中的代码它不是一个函数,catchz中当然不会调用得到他,如果想实现相同的功能你再写一边和try中一样的代码把(如果可以调用,那会造成无限循环的情况的)!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马