我得到的错误是变量fin可能未在以下程序中初始化。请告诉我关于初始化的概念。 :
import java.io.*;
class ShowFile
{
public static void main(String args[])
throws IOException
{
int i;
FileInputStream fin;
try
{
fin=new FileInputStream(args[0]);
}
catch(FileNotFoundException e)
{
System.out.println("File not found");
}
catch(ArrayIndexOutOfBoundsException e)
{System.out.println("Array index are out of bound");}
do
{
i=fin.read();
System.out.println((char) i);
} while(i!=-1);
fin.close();
}
}
但是在下面的代码中,我没有得到这样的错误
import java.io.*;
class ShowFile {
public static void main(String args[])
{
int i;
FileInputStream fin;
// First, confirm that a file name has been specified.
if(args.length != 1) {
System.out.println("Usage: ShowFile filename");
return;
}
// Attempt to open the file.
try {
fin = new FileInputStream(args[0]);
} catch(FileNotFoundException e) {
System.out.println("Cannot Open File");
return;
}
// At this point, the file is open and can be read.
// The following reads characters until EOF is encountered.
try {
do {
i = fin.read();
if(i != -1) System.out.print((char) i);
} while(i != -1);
} catch(IOException e) {
System.out.println("Error Reading File");
}
// Close the file.
try {
fin.close();
} catch(IOException e) {
System.out.println("Error Closing File");
}
}
}
为什么这样?请帮我。对于给阅读带来的不便感到抱歉。这是我的第一篇文章,所以我不确切知道如何发帖。
谢谢。
答案 0 :(得分:0)
您有try-catch
阻止
try {
fin=new FileInputStream(args[0]);
} catch(...) {
.....
}
您可以访问FileNotFoundException
fin
然后
如果第一个区块发生异常,那么fin将被取消初始化,最终将获得NPE
将读数移到第一个区块内。
try {
fin=new FileInputStream(args[0]);
do {
i=fin.read();
System.out.println((char) i);
} while(i!=-1);
} catch(...) {
.....
} finally {
if(fin != null) {
try { fin.close(); } catch(IOException e) {}
}
}
答案 1 :(得分:0)
变量需要在使用前初始化。
例如,在您的情况下,此行fin=new FileInputStream(args[0]);
可能会抛出异常(假设文件不存在),您捕获异常,将其打印出来,然后执行此操作i=fin.read();
此处fin
可能尚未初始化。
通常,在声明它们时始终初始化所有变量是个好主意:
int i = 0;
InputStream fin = null;
下次还请发布您需要帮助的实际错误消息。它有助于不必尝试编译"你的代码在精神上猜测你在说什么。
答案 2 :(得分:0)
对于在方法中声明且未初始化的变量,从声明到变量的任何使用点都不能有任何可能的执行路径。这由编译器检查,它不会让你变得复杂。
类中的字段始终是初始化的,可能为零,因此不适用于这些字段。