请教大家一个问题。
         比如
              FileInputStream fis = null;
              fis = new FileInputStream("d:\\test.txt");

              FileInputStream fis;
              fis = new FileInputStream("d:\\test.txt");
             (或者说FileInputStream fis= new FileInputStream("d:\\test.txt");)
Qustion:
   1.其中第二种方式应该也是对的吧?
   2.然后第一种方式的先声明fis 未null的好处是 防止系统把不为空的内存赋值给fis?
   3能给我说明下,第二种方式会很不安全吗?

解决方案 »

  1.   

    没太大区别,第一种方式在某些情况可以避免编译错误
    比如
    FileInputStream fis;
    if(true)
      fis = new FileInputStream("d:\\test.txt");
    fis.xxx//使用就会编译错误
    只要存在if这种编译器不能确定fis一定被赋值了的在使用时会编译出错
      

  2.   

    1.第二种你在Eclipse中会出现错误,说没初始化。
    2.第一种是为了层次分明。
      FileInputStream fis = null;     //在栈中声明对象
      fis = new FileInputStream("d:\\test.txt");//在堆中实例化对象
      

  3.   

    也就是说:第一种方式先声明fis =null的好处是 防止系统把不为空的内存赋值给fis,这样理解对吗
      

  4.   

    不是这个意思
    FileInputStream fis;
    int i = 1;
    if(i==1)
    fis = new FileInputStream("d:\\test.txt");
    fis.close();

    FileInputStream fis;
    int i = 1;
    if(i==1)
    fis = new FileInputStream("d:\\test.txt");
    else
    fis = new FileInputStream("d:\\test.txt");
    fis.close();
      

  5.   


    这是因为在IO操作要捕获IOException,在try{}catch 块要写finally{fis.close();}来确保资源的关闭,所以要把fis定义成全局变量定义到try{}catch块外边去,因为try{}catch相当于一个方法,里面是一个域,出了这个域finally{}就不认识了,所以要 FileInputStream fis = null;单独定义出来,避免资源关闭时发生错误
      

  6.   


    这分两种情况: 
    类对象成员变量:可以不=null   编译时自动赋予null值   即进行内存分配 
    本地对象成员变量:必须=null   否则编译出错解释一下:类对象成员变量   是类的成员变量,即可以用public,protected,private修饰的变量,本地对象成员变量     是方法里声明的变量第一种情况在使用这个类成员变量时,因为编译时已经赋予了null值,相当于初始化了; 
    第二种情况因为是使用时才初始化,即在用的地方或者是赋值的地方才初始化,这要求这个对象变量应该分配了内存空间;所以必须在声明对象时显示指定