声明函数
static bool func(DataInputStream in)
{
  ……
};然后调用
DataInputStream in;func(in);               // 在这里报错

解决方案 »

  1.   

    肯定报错如果是方法中定义的DataInputStream 变量,编辑器会报错:变量没有初始化如果是类中声明的成员变量,默认初始化为null,传入方法在运行期肯定报空指针,除非你的方法中做了null的检查
    为何不实例化就调用变量声明呢?
      

  2.   

    因为 我要在 func中 实例化,用于读取文件。FileInputStream fi = new FileInputStream(absolutepath);
    new DataInputStream(new BufferedInputStream(fi));
      

  3.   

    你的做法好奇怪DataInputStream in = null;func(in);
      

  4.   

    很奇怪么?打开文件的步骤往往一样,而分析其中的数据时却往往不同,因而把寻找文件,打开文件的操作做成独立的类或者方法 以便重用,难道java里不常这么做?
      

  5.   

    哦,我知道问题出在哪里了,楼主是习惯使用C中的指针了,在JAVA中参数都是值传递而不是地址传递,所以出现了这个问题,你可以在你的func()中将流实例化,将该对象作为一个返回值传回来
    static DataInputStream func(DataInputStream in)
    {
      ……
    };
    DataInputStream in = func();
    如果中间发生异常就返回一个NULL
      

  6.   

    DataInputStream in=null;func(in);in.somemethod();
    //你是想这么用,这样肯定报错,因为这儿in仍是null,即使在func函数体里为in申请了内存,在退出函数体的时候,也会将in重置为null,因为在java函数体里都是值传递的
      

  7.   

    可以采用炮炮的作法DataInputStream func(){
      DataInputStream in = new ...;
      ...
      return in;
    }DataInputStream in2=func();
    in2.somemethod();