黑马程序员技术交流社区

标题: 在什么情况下,遇到异常只能try,不能throws [打印本页]

作者: 王艳静    时间: 2015-8-16 23:00
标题: 在什么情况下,遇到异常只能try,不能throws
本帖最后由 王艳静 于 2015-8-17 08:39 编辑

今天在复习多线程的时候注意到。现在脑子很混沌。记录下问题,明天总结。
----------------------------------------------------------------------------------------
2015-08-17 08:40更

原问题解答:在run()方法中,Thread.sleep(10);只能try不能throws的原因:
答:因为我们在复写父类方法或实现接口方法时,本源的方法没有做抛出说明,复写此方法时,就无法抛出异常
       复写run方法时,本源run方法没有做出抛出声明

异常的小总结,不完整,欢迎指教。
问:关于异常哪些该try,哪些该throws,哪些既不用try也不用throws?
答:
哪些该try?——能处理就早处理,抛不出去还不能处理的就想法消化掉或者转换为RuntimeException处理。eg:IOException,当你打开、读取、写入文件时可能抛出这个错。你可以捕获并提示最终用户『文件操作失败,请重试』等信息,而不是任由它抛到JVM中导致当前线程挂掉。
哪些该throws——
哪些既不用try也不用throws?——RuntimeException可能产生于运行时的一些不可预知的时刻,而且往往产生后没有有效的手段处理,因此不需要强制对其进行声明和捕获。

  1. class Tickett implements Runnable/*extends Thread*/{
  2.         private int num = 400;//重点:静态
  3.         Object o = new Object();
  4.         
  5.         public void run(){
  6.                 while(true){
  7.                         synchronized (o) {
  8.                                 if(num>0){
  9.                                         try {
  10.                                                 Thread.sleep(10);//只能try不能throws
  11.                                         } catch (InterruptedException e) {
  12.                                                 e.printStackTrace();
  13.                                         }
  14.                                         System.out.println(Thread.currentThread().getName()+"卖出一张票。现阶段还剩余"+(num--)+"张票");
  15.                                 }        
  16.                                 
  17.                         }
  18.                 }        
  19.         }        
  20. }
复制代码




作者: kingxiao    时间: 2015-8-16 23:04
需要程序停顿的时候吧
作者: superhs    时间: 2015-8-16 23:08
遇到难题时可以放松放松大脑,也许休息一会灵感就来了!
作者: 放学后来我家    时间: 2015-8-17 01:12
     求沟通,        
作者: 王艳静    时间: 2015-8-17 09:03
kingxiao 发表于 2015-8-16 23:04
需要程序停顿的时候吧

我是说异常的问题
作者: 王艳静    时间: 2015-8-17 09:04
放学后来我家 发表于 2015-8-17 01:12
求沟通,

为什么给你回复不了 已更新问题答案 欢迎指教
作者: backin    时间: 2015-8-17 09:15
这个例子其实不能很好的解释为什么异常必须抛的,因为这个是线程的执行体,一旦多线程进入,抛出去谁接手不清楚的。。异常什么时候抛要看你想告诉什么人这里有异常,抛出的异常就在哪里try就搞定了撒
作者: 放学后来我家    时间: 2015-8-17 10:37
王艳静 发表于 2015-8-17 09:04
为什么给你回复不了 已更新问题答案 欢迎指教

          我都马上失去信心了
作者: TheBadboy    时间: 2015-8-17 19:55
父类没有异常的话,子类不能往上抛出




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2