返回信息流import java.io.*;
class Test{
public static void main(String[] args) {
int i;
FileInputStream fin;
if (args.length != 1) {
System.out.println("Usage:filename");
return;
}
try{
fin = new FileInputStream(args[0]);
}catch(FileNotFoundException ex){
System.out.println("open file failed");
// return;
}
try{
do{
i = fin.read();
if(i != -1)
System.out.print((char)i);
}while(i != -1);
}catch(IOException ex){
System.out.println("read failed");
}finally{
try{
fin.close();
}catch(IOException ex){
System.out.println("close failed");
}
}
}
}
上面注释掉的那个return 如果不加的话,就不能通过编译,加上就没有问题,这个是为什么呢。。。
这是一条镜像帖。来源:北邮人论坛 / java / #30575同步于 2014/6/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
刚学java,问一下这个到底是为什么。。
json123
2014/6/20镜像同步13 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
lz还是让这些异常都直接抛出main吧,给main加上throws Exception,不要catch了。打印错误消息不算真正“处理”了异常。
【 在 json123 的大作中提到: 】
: [code=java]
: import java.io.*;
: class Test{
: ...................
其实很简单的逻辑,在try里你初始化了fin,假如执行了catch则fin没有初始化,java里没有初始化对象而直接用对于非基本数据类型是不允许的,你第一个try catch之后又接着使用了fin,所以之前必须初始化。你说那个return很容易理解,都已经return了,后面代码根本就不会执行,编译的时候也不会考虑。所以,加上return,执行catch之后就不会执行后面使用fin的代码,不会有问题。
【 在 nuanyangyang 的大作中提到: 】
: lz还是让这些异常都直接抛出main吧,给main加上throws Exception,不要catch了。打印错误消息不算真正“处理”了异常。
网上的新手视频都是这样处理...
毕竟刚学
【 在 j2613043 的大作中提到: 】
: 网上的新手视频都是这样处理...
: 毕竟刚学
顺便吐槽一下,Java的checked exception真是个糟糕的设计。Spring库因此将它所有的异常继承自RuntimeException。
多谢。
【 在 zhangjuzheng 的大作中提到: 】
: 其实很简单的逻辑,在try里你初始化了fin,假如执行了catch则fin没有初始化,java里没有初始化对象而直接用对于非基本数据类型是不允许的,你第一个try catch之后又接着使用了fin,所以之前必须初始化。你说那个return很容易理解,都已经return了,后面代码根本就不会执行,编译的时候也不会考虑。所以,加上return,执行catch之后就不会执行后面使用fin的代码,不会有问题。