应该是    props.load(f) 不是    props.load(in)

解决方案 »

  1.   

    各位:
        这是我贴这儿时,搞错了的。就算将props.load(in)改为props.load(f)还是一样出现错误啊!再麻烦帮我看看到底毛病出在哪里?
    编译时反回的错误如下:
    Test1.java:16:cannot resolve symbol
    symbol  : variable f
    location: class Test1
        props.load(f)
                   ^
    1 error
      

  2.   

    你应该把“props.load(f)”这句语句写到第二个try里面,而且是在
    FileInputStream f = new FileInputStream("E:\\JBuilder\1.txt");
    的后面。
    因为有可能这个FileInputStream f变量不能的到真确的初始化,而使的后面的这个语句不能执行,JAVA对这种情况会做为出错处理!
      

  3.   

    mygarfield:
        你好!我编译成功了!实在是很感谢!但是啊,我还是想不通,为什么非要把“props.load(f)”放到FileInputStream f = new FileInputStream("E:\\JBuilder\1.txt");后面。
        就算放到后面FileInputStream f变量还是有可能得不到正确初始化啊,那后面的语句“props.load(f)”还是会出错啊。真的是很想不通JAVA怎么会有这样的规定!
        望能给我再次指点!
      

  4.   

    try {
            FileInputStream f = new FileInputStream("E:\\JBuilder\1.txt");
        }
        catch(FileNotFoundException e) {
            System.out.println("无法找到指定文件");
        }
        props.load(f);是不是 load 里面
    看不到 f 啊?
      

  5.   

    try可以捕获错误啊,这两个语句是相关连的,如果FileInputStream f得不到正确初始化,这个错误就会被捕获到,这时,语句会跳转到CATCH里,这样也保证了后面props.load(f)的正确性,也就是说对所有调用f的语句只有在f真确时才能调用。这是种比较好的机制,你觉得呢?
    前面是从Exception的角度来理解的,这里可能还可以从局部变量的角度来理解吧。就象XKP(XKP)说的,不过个人觉得JAVA这么做主要还是Exception的原因吧。
      

  6.   

    对了,可不可以这样理解。因为Exception在被捕获后,产生错误的实例就会被JAVA的回收机制所回收啊?于是,f实例在错误被捕获后就被回收,也就是不存在了,于是把props.load(f)放到后catch后面就人出现错误。
         我想我是想通了。谢谢各位。特别是mygarfield((我被CSDN封杀过)) 的细心指导!!!
      

  7.   

    FoxBill(小狐仙):
       嘿嘿……
       是不该给点分,奖励一下!
       :)
      

  8.   

    对了,JAVA的回收机制并不是在一个变量无效或超出生存期而马上开始执行回收的。什么时候开始回收,是不确定的。但当内存不足时或程序结束,就会马上执行回收的。而且它的回收算法好象不是很理想,所以这也是JAVA程序对内存要求比较高的主要原因。
      

  9.   

    没有问题。还请教一个问题,如果从局部变量角度来看,f算是try的局部变量吗?JAVA是否分配了try相对独立的内存空间呢?
      

  10.   

    这个我就不是很清楚了,你可以在TRY里定义一个简单变量比如INT试试,看在TRY外部能否访问啊。因为INT变量应该没什么错误好报的。至于JAVA的内存空间怎么分配,我也不怎么清楚,:)其实我也在学习当中……
      

  11.   

    如果在try里面定义,外面是访问不了的。这个是语法规定,在编译阶段就会报错的,所以与内存分配无关。