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

© 刘晓康 中级黑马   /  2012-4-1 11:43  /  1958 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我们在java中要抛出异常一般都是在方法与"{"之间写上throws Excetpion,另一种是在方法体内throw new RuntimeException 但是有一个问题,在main()方法后我们有时候
会也会写上throws Exception 这都是一种偷懒的做法,那这个异常是由谁去处理(try)呢,如果说都不用去try catch,那干嘛不全部用throws Exception直接抛出去呢...为什么还要用try catch去捕获它呢???求解,知道原理的朋友帮忙解决一下...

8 个回复

倒序浏览
public static void main(Strign[] args) throws Exception 是将异常抛给jvm(也就是java虚拟机去处理)
try{}catch(){}用来捕获具体的异常
回复 使用道具 举报
try{……}里面是一些你觉得可能会出问题的代码,catch里就是你觉得会有什么问题,如果出的问题正好是你catch里说到的问题,那么他就会按照你设定的,比如会打印出来,比如会退出方法等等……然后接着往下执行后面该执行的代码。
但是如果你不用try{}的话,没问题,很好,一有问题,代码就会在那里停住,然后给用户一个很不友好的默认的错误提示,一般这个提示只有开发人员等内行人可以看懂。
也就是说加不加try,区别在于不加程序不知道怎么执行,会停住,而加了,就会按您给定的处理异常程序的步骤,处理完了,接着走往下的代码。

还有,如果不想在这个方法里处理,而在调用的方法里一起处理的话,可以直接在方法的签名也就是方法名后的小括号后面,加throws Exception,把异常抛给别人,像推太极一样,推给别人,谁调用我,谁就要负责处理。如果都不处理,到最后虚拟机会用默认的异常处理机制,把异常信息打印一遍结束,程序终止。
回复 使用道具 举报
异常的对象从哪里来呢?有两个来源,一是Java运行时环境自动抛出系统生成的异常,而不管你是否愿意捕获和 处理,它总要被抛出!比如除数为0的异常。二是程序员自己抛出的异常,这个异常可以是程序员自己定义的,也可以是Java语言中定义的,用throw 关键字抛出异常,这种异常常用来向调用者汇报异常的一些信息。

Java异常处理机制
第一、在方法中用try...catch语句捕获并处理异常,catach语句可以有多个,用来匹配多个异常。

第二、对于处理不了的异常或者要转型的异常,在方法的声明处通过throws语句抛出异常。即由上层的调用方法来处理。

如果每个方法都是简单的抛出异常,那么在方法调用方法的多层嵌套调用中,Java虚拟机会从出现异常的方法代码块中往回找,直到找到处理该异常的 代码块为止。然后将异常交给相应的catch语句处理。如果Java虚拟机追溯到方法调用栈最底部main()方法时,如果仍然没有找到处理异常的代码 块,将按照下面的步骤处理:
第一、调用异常的对象的printStackTrace()方法,打印方法调用栈的异常信息。
第二、如果出现异常的线程为主线程,则整个程序运行终止;如果非主线程,则终止该线程,其他线程继续运行。

所以用throws  抛出异常,而不自定义异常时,你早晚得用try{}catch{}来处理异常。你一直往上抛,程序一直会找到处理异常的代码块为止。找不到,则出现异常。
回复 使用道具 举报
在方法上声明异常(throws Excetpion),必须在代码中对异常进行处理;而在主函数上声明异常,是希望虚拟机去处理异常。
而类RuntimeException及其子类在异常Exception中属于特例,其特点是:
如果在函数内容抛出该异常,函数上可以不用声明,也不用处理,编译一样通过。
        之所以不用在函数上声明,是因为不需要让调用者处理。在程序内部处理掉。

如果在函数上声明了该异常。调用者可以不用进行处理。编译一样通过。
        但程序运行错误,当该异常发生,希望程序停止。因为在运行时,出现了无法继续运算的情况,希望停止程序后,由程序员对代码进行修正。
回复 使用道具 举报
在main方法上抛异常,jvm虚拟机会自动处理!
回复 使用道具 举报
袁野 黑马帝 2012-4-1 14:30:23
7#
呵呵 最后会给JVM ,JVM 处理不了 程序就死掉了
回复 使用道具 举报
用catch try是为了自己做些特殊处理,不想做特殊处理就throws Exception让虚拟机去做默认的处理
回复 使用道具 举报
    自己能处理的异常就try catch ,自己不能处理的才抛给虚拟机去处理
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马