A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Cola 中级黑马   /  2013-12-27 19:44  /  3243 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Cola 于 2013-12-28 11:30 编辑

我知道它们在出现异常的时候使用,throws写在函数上,throw和try catch写在函数内。下边的例子,main方法上的throws NoPlanException,是否注释都可以运行,请问throws应该在哪里是必须写的呢,这里为什么写,不写都行呢?
  1. class ExceptionTest
  2. {
  3.         public static void main(String[] args) //throws NoPlanException
  4.         {
  5.                 Teacher t=new Teacher("Zhang",new Computer());
  6.                 try
  7.                 {
  8.                         t.prelect();
  9.                 }
  10.                 catch (NoPlanException e)
  11.                 {
  12.                         System.out.println(e.toString());
  13.                         System.out.println("换老师或者放假");
  14.                 }
  15.         }
  16. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

3 个回复

倒序浏览
当在内部出现了throw抛出异常的对象,那么就必须要给对应的处理动作,要么在内部try  catch处理,要么就在函数上声明叫调用者处理,在一般的情况下,函数内出现异常,函数上需要声明。
class ExceptionTest
{
        public static void main(String[] args) //throws NoPlanException
        {
                Teacher t=new Teacher("Zhang",new Computer());
                try
                {
                        t.prelect();
                }
                catch (NoPlanException e)
                {
                        System.out.println(e.toString());
                        System.out.println("换老师或者放假");
                }
        }
}
在你的这个程序里,里面有了相对应的解决方法了,所以在函数上就没有不要在声明异常了!

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
首先,异常如果产生了,是不是要进行处理?有两种方式,一是向上一级抛出,而是进行捕获

当一个调用者调用方法时,这个方法产生了异常,这时候可能有多种处理方式,如果这时候不知道如何处理,这种异常一般交给调用者处理,这时候一般用throws,throws一般是向上一级抛出异常,也就是抛给调用者,交由调用者处理。
当你知道如何处理异常时,这是侯就直接对异常捕获处理。就用try catch。

你上面的代码已经对异常进行了处理,所以这时候就不进行抛出。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
出现异常后  处理动作只有两个    要么抛throws    要么 try  catch      
这两个动作只需要做一个就可以了。
thrwos  是抛给了你的上一级。是说  这个异常我处理不了。。你帮我干吧。
try   catch    是自己处理。自己能处理。自己都处理了。抛出去没意义了。

还有一种是在catch中抛。
catch (NoPlanException e)
                {
                        System.out.println(e.toString());
                        System.out.println("换老师或者放假");
                        throw  new Exception("我接着抛");//这种的你在方法上也需要throws  
                                                                        //这样可以在遇到异常后进行一些特殊操作后再
                                                                         //抛出异常给上一级处理
                }
还有一种是RuntimeException  这种不需要抛。
API说的很好    RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。

可能在执行方法期间抛出但未被捕获的 RuntimeException 的任何子类都无需在 throws 子句中进行声明。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马