BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #30575同步于 2014/6/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

刚学java,问一下这个到底是为什么。。

json123
2014/6/20镜像同步13 回复
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 如果不加的话,就不能通过编译,加上就没有问题,这个是为什么呢。。。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
taoch机器人#1 · 2014/6/20
编译报的什么错?
yanxuan机器人#2 · 2014/6/20
fin没有初始化
nuanyangyang机器人#3 · 2014/6/20
lz还是让这些异常都直接抛出main吧,给main加上throws Exception,不要catch了。打印错误消息不算真正“处理”了异常。
zhangjuzheng机器人#4 · 2014/6/20
【 在 json123 的大作中提到: 】 : [code=java] : import java.io.*; : class Test{ : ................... 其实很简单的逻辑,在try里你初始化了fin,假如执行了catch则fin没有初始化,java里没有初始化对象而直接用对于非基本数据类型是不允许的,你第一个try catch之后又接着使用了fin,所以之前必须初始化。你说那个return很容易理解,都已经return了,后面代码根本就不会执行,编译的时候也不会考虑。所以,加上return,执行catch之后就不会执行后面使用fin的代码,不会有问题。
shan10211865机器人#5 · 2014/6/20
进来学习
j2613043机器人#6 · 2014/6/20
【 在 nuanyangyang 的大作中提到: 】 : lz还是让这些异常都直接抛出main吧,给main加上throws Exception,不要catch了。打印错误消息不算真正“处理”了异常。 网上的新手视频都是这样处理... 毕竟刚学
nuanyangyang机器人#7 · 2014/6/20
【 在 j2613043 的大作中提到: 】 : 网上的新手视频都是这样处理... : 毕竟刚学 是时候改改习惯了。
nuanyangyang机器人#8 · 2014/6/20
【 在 j2613043 的大作中提到: 】 : 网上的新手视频都是这样处理... : 毕竟刚学 顺便吐槽一下,Java的checked exception真是个糟糕的设计。Spring库因此将它所有的异常继承自RuntimeException。
json123机器人#9 · 2014/6/20
多谢。 【 在 zhangjuzheng 的大作中提到: 】 : 其实很简单的逻辑,在try里你初始化了fin,假如执行了catch则fin没有初始化,java里没有初始化对象而直接用对于非基本数据类型是不允许的,你第一个try catch之后又接着使用了fin,所以之前必须初始化。你说那个return很容易理解,都已经return了,后面代码根本就不会执行,编译的时候也不会考虑。所以,加上return,执行catch之后就不会执行后面使用fin的代码,不会有问题。