Java Can';无法正确启动读卡器对象

Java Can';无法正确启动读卡器对象,java,bufferedreader,Java,Bufferedreader,我正在读一个文件。所以在我的“Skanner”类中,我有一个字段如下所示: 私有阅读器,readerX 现在我在构造函数中初始化了这些字段: public Skanner() { try { Reader readerX = new FileReader("aliceinwonderland.txt"); Reader reader = new BufferedReader(readerX);

我正在读一个文件。所以在我的“Skanner”类中,我有一个字段如下所示:

私有阅读器,readerX

现在我在构造函数中初始化了这些字段:

public Skanner()
    {   
        try 
        {
            Reader readerX = new FileReader("aliceinwonderland.txt");
            Reader reader = new BufferedReader(readerX);
        } 
        catch (FileNotFoundException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

但是,当我尝试在Skanner类的方法中使用字段时,我得到了一个空指针异常。如果我改为在构造函数的try块中使用
reader.read()
,则不会出现任何问题。为什么我不能在启动它的范围之外调用
reader.read()

通过在方法中重新声明实例成员来隐藏它们。从发布的代码中删除读卡器类型声明。

通过在方法中重新声明实例成员,您将隐藏它们。从您发布的代码中删除读卡器类型声明。

问题在于
读卡器
对象仅在您的构造函数中可用,它是

public Skanner()
    {   
        try 
        {
            Reader readerX = new FileReader("aliceinwonderland.txt");
            Reader reader = new BufferedReader(readerX);
        } 
        catch (FileNotFoundException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
如果希望在构造函数外部访问它们,则需要在构造函数外部声明它们

 Reader readerX;
 Reader reader;

 public Skanner()
        {   
            try 
            {
                  readerX= new FileReader("aliceinwonderland.txt");
                  reader = new BufferedReader(readerX);
            } 
            catch (FileNotFoundException e) 
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

public void someMethod(){
//is now available
// make sure you use new Skanner() first before calling this method or it will result to NPE(null pointer exception) because the initialization of reader is in the constructor
reader.read();
}

如果您想在类外访问它们,请使用
public
access修饰符。

问题在于
Reader
对象仅在您的构造函数中可用,它是

public Skanner()
    {   
        try 
        {
            Reader readerX = new FileReader("aliceinwonderland.txt");
            Reader reader = new BufferedReader(readerX);
        } 
        catch (FileNotFoundException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
如果希望在构造函数外部访问它们,则需要在构造函数外部声明它们

 Reader readerX;
 Reader reader;

 public Skanner()
        {   
            try 
            {
                  readerX= new FileReader("aliceinwonderland.txt");
                  reader = new BufferedReader(readerX);
            } 
            catch (FileNotFoundException e) 
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

public void someMethod(){
//is now available
// make sure you use new Skanner() first before calling this method or it will result to NPE(null pointer exception) because the initialization of reader is in the constructor
reader.read();
}

如果您想在课堂之外访问它们,请使用
public
access修饰符。

请提供特定代码以重现问题。不要仅用简单的语言解释代码问题。请发布更多代码,至少是有问题的行(导致NPE)和异常的完整堆栈跟踪。请提供重现问题的特定代码。不要只简单地解释代码问题。请发布更多代码,至少是有问题的行(导致NPE)和异常的完整堆栈跟踪。