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

java异常处理的时候throws

happygirl
2015/8/18镜像同步11 回复
初学java,一个函数内部有多个异常,其中有一个异常是当前try-catch就可以解决,但是其他的异常必须向上一层抛出,所以能不能只在函数体内部catch这一个异常,而其他的异常在函数头上通过throws抛给上一层?求解答!求各路大神指导![ema1]
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
dss886机器人#1 · 2015/8/18
public void tryCatchAndThrow throw AException { try{ doSomething(); // throws AException and BException }catch(BException){ dealWithBException(); } }
happygirl机器人#2 · 2015/8/18
thx very much!但是如果这两种异常都是IO异常呢?是同一种异常怎么办~~ 【 在 dss886 的大作中提到: 】 : [code=java] : public void tryCatchAndThrow throw AException { : try{ : ...................
dss886机器人#3 · 2015/8/18
唔。。。这样? public void tryCatchAndThrow throws IOException { try{ doSomething(); }catch(IOException e){ if(e.getMessage().equals("xxx")){ dealWith(); }else{ throw e; } } } 【 在 happygirl 的大作中提到: 】 : thx very much!但是如果这两种异常都是IO异常呢?是同一种异常怎么办~~
happygirl机器人#4 · 2015/8/18
哦哦,酱紫啊,get it,我去瞅瞅!!再次感谢 【 在 dss886 的大作中提到: 】 : 唔。。。这样? : [code=java] : public void tryCatchAndThrow throws IOException { : ...................
nuanyangyang机器人#5 · 2015/8/19
说实话,这种必须抓或者标注的异常(checked exception)是Java语言设计上的一大败笔。还好JVM对抛什么异常没有限制,用别的JVM语言(比如groovy或者scala)的话异常随便抛,不抓就自己抛。
uriel机器人#6 · 2015/8/25
没懂。。。求解释。。。 【 在 nuanyangyang 的大作中提到: 】 : 说实话,这种必须抓或者标注的异常(checked exception)是Java语言设计上的一大败笔。还好JVM对抛什么异常没有限制,用别的JVM语言(比如groovy或者scala)的话异常随便抛,不抓就自己抛。
roseking机器人#7 · 2015/9/1
个人认为java的check ex是一大妙手。要知道大量的api使用者并不是很牛逼的程序员,受检异常在api的安全性和可用性上功不可没 【 在 nuanyangyang 的大作中提到: 】 : 说实话,这种必须抓或者标注的异常(checked exception)是Java语言设计上的一大败笔。还好JVM对抛什么异常没有限制,用别的JVM语言(比如groovy或者scala)的话异常随便抛,不抓就自己抛。
nuanyangyang机器人#8 · 2015/9/1
【 在 roseking 的大作中提到: 】 : 个人认为java的check ex是一大妙手。要知道大量的api使用者并不是很牛逼的程序员,受检异常在api的安全性和可用性上功不可没 关键是,大多数异常是致命的,这就是为什么它被称为“异常”。通常说来,抛出异常的情况没有什么好的办法可以处理。比如想打开文件但文件不存在。如果强制去“处理”它,通常的结果是那些“不是很牛逼的程序猿”根本没有真正“处理”这个异常。 InputStream is; try { is = new FileInputStream("...."); .... } catch (FileNotFoundException e) { e.printStackTrace(); } is.read(buf); // 空指针异常 还会引起“接口”定义的问题:能不能抛异常成了接口的一部分。 interface Runnable { void run(); // 没有任何异常。也就是run不会抛出异常 } class FileWriteJob1 implements Runnable { @Override public void run() throws IOException { // 编译错误:Runnable.run不可以抛出异常。 FileOutputStream fis = new FileOutputStream("someFile"); fis.write(...); fis.close(); } class FileWriteJob2 implements Runnable { @Override public void run() { // 编译正确。 try { FileOutputStream fis = new FileOutputStream("someFile"); fis.write(...); fis.close(); } catch (IOException e) { e.printStackTrace(); // 没有更好的处理方法,因为不能抛了。 } } public static void main(String[] args) { Runnable job1 = FileWriteJob2(); Runnable job2 = FileWriteJob2(); Runnable job3 = FileWriteJob2(); job1.run(); // 这里怎么知道job1有没有失败? job2.run(); // 如果我想job2失败的时候停止处理job3怎么办? job3.run(); // 到最后,万一有job失败了,只是打印出异常,没办法处理 } } class FileWriteJob3 implements Runnable { // 定义一个自己的异常。是RuntimeException。 public static class MyFileWriteException extends RuntimeException { ... } @Override public void run() { // 编译正确。 try { FileOutputStream fis = new FileOutputStream("someFile"); fis.write(...); fis.close(); } catch (IOException e) { // 这里只是简单地封装一下再抛出,本质上还是没有处理。 throw new MyFileWriteException(e); // RuntimeException随便抛,无视声明。 } } public static void main(String[] args) { Runnable job1 = FileWriteJob2(); Runnable job2 = FileWriteJob2(); Runnable job3 = FileWriteJob2(); try { job1.run(); // 这三个run都有可能抛出RuntimeException。 job2.run(); job3.run(); } catch (MyFileWriteException e) { // 在这里处理 } } } 更多请看: http://bbs.byr.cn/#!article/Java/27107?p=1
nuanyangyang机器人#9 · 2015/9/1
【 在 roseking 的大作中提到: 】 : 个人认为java的check ex是一大妙手。要知道大量的api使用者并不是很牛逼的程序员,受检异常在api的安全性和可用性上功不可没 还有C#的设计者Anders Hejlsberg谈checked exception http://www.artima.com/intv/handcuffs.html