帮忙看下为什么会是这样的结果?

来源:百度知道 编辑:UC知道 时间:2024/06/05 10:36:27
import java.io.*;
public class CatchException
{
public static void main(String[] args)
{
FileInputStream fis = null;
try
{
fis = new FileInputStream("c;/a.txt");
int b;
b =fis.read();
while (b!= -1)
{
System.out.print((char)b);
b=fis.read();
}
}
catch (FileNotFoundException e)
{
System.out.println("FileNoutFoundException:"+e.getMessage());
}
catch (IOException e1)
{
System.out.println("IOException:"+e1.getMessage());
}
finally
{
try
{
fis.close();
}
catch (IOException ioe)
{
System.out.println("关闭文件出错!");
}
}
}

}

个人认为结果是:
FileNoutFoundException:c;/a.txt(系统找不到指定的路径。)
关闭文件出错!
可是现在运行的结果是:
FileNoutFoundException:c;/a.txt(系统找不到指定的路径。)
Except

lz使用了:
finally
{
try
{
fis.close();
}
catch (IOException ioe)
{
System.out.println("关闭文件出错!");
}
}
--------
finally的意思是:无论exception是否发生,finally中的语句都将执行。而由于lz代码中的fis=null,所以在执行fis.close();时会报空指针错误,可以修改代码如下:
if(fis!=null){
fis.close();
}

系统发神经

c;/a.txt,你好像写的是分号

同意zicozhang关于finally的说法。但lz你发现没有,你的FileInputStream 为null
程序在走到fis = new FileInputStream("c;/a.txt");就会因发异常,当然就会被下面的catch块捕获,至于你想得到的那种结果是跟本不可能的。因为FileInputStream 的对象始终没有被创建,自然不可能使用close方法来关闭流,你fanlly块中的catch块所捕获的异常应该是一个空指针异常,而不是IO异常。
你用IDE环境调试一下就明白了。