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