这两种写法哪种好?

finemi 2014-10-20 11:54:13
1
try {
if(new File("c:\\file.txt").exists()) {
FileInputStream fis = new FileInputStream("c:\\file.txt");
fis.read();
}
}catch(IOException e) {

}



2
try {
FileInputStream fis = new FileInputStream("c:\\file.txt");
fis.read();
}catch(FileNotFoundException e) {

}catch(IOException e){

}
...全文
388 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
finemi 2014-10-21
  • 打赏
  • 举报
回复
引用 13 楼 shuitawuhen 的回复:
............ 讨论的结果是:在没有抛出异常的情况下,性能完全没区别。
也就是我第一个好咯?
finemi 2014-10-21
  • 打赏
  • 举报
回复
引用 17 楼 hemowolf 的回复:
两种写法都不好,因为没有关闭资源的语句 不考虑以上因素,第一种写法好 基本上,能够在代码里判断的逻辑,就不要依赖对异常的捕捉
我也是这么想的,但是java强制要求要有try catch捕捉,这里即使我有了判断保证不会出现文件未找到的异常,但是还是得用try
wanghualeilei 2014-10-21
  • 打赏
  • 举报
回复
第二种好 第一种等于为了判断文件存在 创建了个用不上的File类
-江沐风- 2014-10-21
  • 打赏
  • 举报
回复
哦,我也是用第二种;
小灰狼 2014-10-21
  • 打赏
  • 举报
回复
两种写法都不好,因为没有关闭资源的语句 不考虑以上因素,第一种写法好 基本上,能够在代码里判断的逻辑,就不要依赖对异常的捕捉
twtiqfn 2014-10-21
  • 打赏
  • 举报
回复
哪种方法都行啊,只有能起作用不就行了吗
小灰狼 2014-10-21
  • 打赏
  • 举报
回复
引用 20 楼 finemi 的回复:
[quote=引用 17 楼 hemowolf 的回复:] 两种写法都不好,因为没有关闭资源的语句 不考虑以上因素,第一种写法好 基本上,能够在代码里判断的逻辑,就不要依赖对异常的捕捉
我也是这么想的,但是java强制要求要有try catch捕捉,这里即使我有了判断保证不会出现文件未找到的异常,但是还是得用try[/quote] 能让程序不抛出异常就不抛出 JAVA的非RUNTIME异常要求捕捉,是因为这些异常是程序无法根本避免的,也就是说,你写程序的水平再牛B,这些异常情况也无法避免,比如磁盘出现坏道、正在进行TCP通信时对方主机当机、正在访问数据库时数据库死机等,你写程序的水平再高,拦不住这些客观情况的发生,所以JAVA要求你处理这些异常情况 而runtime异常是可以通过优化代码避免的,比如你在使用对象之前判断一下对象是否为空就可以避免空指针异常;在访问数组前比较一下下标值和数组长度就可以避免数组越界异常……楼主在访问文件之前,先判断一下文件是否存在,就可以避免文件找不到的异常
Magical茏 2014-10-20
  • 打赏
  • 举报
回复
我一直用第一种 错误细粒度 没要求那么高
日知己所无 2014-10-20
  • 打赏
  • 举报
回复
感觉都不太好…… 异常不应该用来处理本应该程序里需要检查的处理,比如文件是否存在 根据这个原则,只能选第一个,但是第一个又过于复杂、混乱了
Paul_ZJ 2014-10-20
  • 打赏
  • 举报
回复
引用 10 楼 finemi 的回复:
[quote=引用 9 楼 shuitawuhen 的回复:] 如果用第一种,按上面的代码not exist的情况你如何获知?? 建议在第一种情况下加一个else条件print输出文件不存在。 两种方法都可以,关键是逻辑要正确、完整,起码你自己调试的时候知道哪里出错了。
...其实我是想问的是,能够用方法判断出来的是否最好就不要用catch()捕获?会影响效率? 但是这里没体现出来,IOException是 NotFound的父类,第一个即使我用的if判断,虽然不会引发NotFound异常。 如果我上面说的成立的话,用IF避免掉一些异常,然后下面catch用一个Exception类,这样对于效率是否有帮助?[/quote] 强大的google还是告诉我,跟我一样有疑惑的人不少,终于再一个询问帖中找到了答案及解答。 问题:A 和B在性能上的区别在哪? A: try { for(int i = 0; i < max; i++) { String myString = ...; float myNum = Float.parseFloat(myString); myFloats[i] = myNum; } } catch (NumberFormatException ex) { return null; } B: for(int i = 0; i < max; i++) { String myString = ...; try { float myNum = Float.parseFloat(myString); } catch (NumberFormatException ex) { return null; } myFloats[i] = myNum; } 其实在功能上明显有区别,一个for循环中出现一个异常就终止,另一个则是会很负责任的把它全部跑完,但问题不是问功能,而是问性能上的区别。 性能无非就是看 空间消耗,时间消耗 ,想当然就觉得try catch重复执行了这么多次肯定比只执行了一次跑得肯定慢,空间消耗肯定更大。好吧,哥承认完全不了解其中的工作原理。 讨论的结果是:在没有抛出异常的情况下,性能完全没区别。
郭毓挺 2014-10-20
  • 打赏
  • 举报
回复
第二种,个人习惯。
finemi 2014-10-20
  • 打赏
  • 举报
回复
引用 2 楼 huxiweng 的回复:
我喜欢第二个
...其实我是想问的是,能够用方法判断出来的是否最好就不要用catch()捕获?会影响效率? 但是这里没体现出来,IOException是 NotFound的父类,第一个即使我用的if判断,虽然不会引发NotFound异常。 如果我上面说的成立的话,用IF避免掉一些异常,然后下面catch用一个Exception类,这样对于效率是否有帮助?
finemi 2014-10-20
  • 打赏
  • 举报
回复
引用 9 楼 shuitawuhen 的回复:
如果用第一种,按上面的代码not exist的情况你如何获知?? 建议在第一种情况下加一个else条件print输出文件不存在。 两种方法都可以,关键是逻辑要正确、完整,起码你自己调试的时候知道哪里出错了。
...其实我是想问的是,能够用方法判断出来的是否最好就不要用catch()捕获?会影响效率? 但是这里没体现出来,IOException是 NotFound的父类,第一个即使我用的if判断,虽然不会引发NotFound异常。 如果我上面说的成立的话,用IF避免掉一些异常,然后下面catch用一个Exception类,这样对于效率是否有帮助?
Paul_ZJ 2014-10-20
  • 打赏
  • 举报
回复
如果用第一种,按上面的代码not exist的情况你如何获知?? 建议在第一种情况下加一个else条件print输出文件不存在。 两种方法都可以,关键是逻辑要正确、完整,起码你自己调试的时候知道哪里出错了。
whos2002110 2014-10-20
  • 打赏
  • 举报
回复
第一种
rayw0ng 2014-10-20
  • 打赏
  • 举报
回复
没有特别处理的话,第一种够用了
skgary 2014-10-20
  • 打赏
  • 举报
回复
没什么区别啊。
aaron_gzt 2014-10-20
  • 打赏
  • 举报
回复
我喜欢第二种的,按异常的捕捉顺序,易维护,而且可以针对不同的异常情况做不同的处理
JPF1024 2014-10-20
  • 打赏
  • 举报
回复
我喜欢第一个那种简单的,记得关闭资源就可以,其实写法有时候看自己习惯了
S117 2014-10-20
  • 打赏
  • 举报
回复
都差不多吧,不过你最好把FileInputStream放到外面,然后再fianlly中关闭
加载更多回复(2)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧