黑马程序员技术交流社区

标题: 关于异常部分的问题. [打印本页]

作者: 龙秋地    时间: 2012-5-31 23:19
标题: 关于异常部分的问题.
          java语言中怎么进行异常处理(具体分几种情况,希望详细说明),
          关键字throws,throw,try,catch,finally分别代表的含义?
          在try块中抛出的异常是由下面的catch接住,还是其他函数,还是主函数接接住.
作者: 江南    时间: 2012-5-31 23:32
在方法中 采用throws抛出去由调用者去try catch  当catch到这个exception的时候看你的业务需求,不让你抓到的是一些网络异常 这个只需要 给用户一个提示就好!不用在往上抛 在往上抛虚拟机就会崩溃了
对于未知的异常 例如会造出程序停止运行 catch到后 在通过包装抛出去(throw new RuntimeExcption(e.toString())) 因为这个异常已经会使程序停止运行了  通过抛出去让程序停止 查看原因 去完善你的项目

个人理解 仅供参考
作者: 江南    时间: 2012-5-31 23:32
在方法中 采用throws抛出去由调用者去try catch  当catch到这个exception的时候看你的业务需求,不让你抓到的是一些网络异常 这个只需要 给用户一个提示就好!不用在往上抛 在往上抛虚拟机就会崩溃了
对于未知的异常 例如会造出程序停止运行 catch到后 在通过包装抛出去(throw new RuntimeExcption(e.toString())) 因为这个异常已经会使程序停止运行了  通过抛出去让程序停止 查看原因 去完善你的项目

个人理解 仅供参考
作者: 程序猿    时间: 2012-6-1 02:39
throws,throw,try,catch,finally
throws是定义在方法头上的 例如 public static void main(String args[]) throws Exception
throw 是抛出异常的, 例如throw new Exception(); 抛出的异常是由调用函数的调用者来抓取的(catch)

try对指定语句进行检测异常,catch 抓相应异常,finally无论是否发生异常都会执行。
示例:int temp=4/0;                 System.out.println(temp);
就上面两句基本代码,讲一下这些关键字
直接运行会报 java.lang.ArithmeticException: / by zero   这个异常


我们可以抓住此异常
        public static void main(String[] args) {
                       
                       
                        try
                        {
                                int temp=4/0;
                                System.out.println(temp);
                        }
                        catch(ArithmeticException e)
                        {
                                System.out.println("不能除0");                        }
                }
e.printStackTrace()是打印错误信息。你看下运行结果是什么,不报异常了吧,因为你预先知道会发生这个错误。并且将发生错误的解决方法写到了catch中。

看下面加入了finally

public static void main(String[] args) {
                       
                       
                        try
                        {
                                int temp=4/0;
                                System.out.println(temp);
                        }
                        catch(ArithmeticException e)
                        {
                        //        e.printStackTrace();
                                System.out.println("不能除0");
                        }
                        finally
                        {
                                System.out.println("finally执行");
                        }
                }

结果为:
不能除0
finally执行

此时我们将除数0 改成别的比如:2
执行结果:
2
finally执行
说明没有抓到异常,但是finally却执行了,如果程序正常运行,finally一般是会执行的。
但有特殊情况:
1.如果没执行到try语句,那对应的finally也不会执行的。下例就执行不到
boolean b=true;
                        if(b=true)
                                return ;
                       
                        try
                        {
                                int temp=4/2;
                                System.out.println(temp);
                                                        }
                        catch(ArithmeticException e)
                        {
                        //        e.printStackTrace();
                                System.out.println("不能除0");
                        }
                        finally
                        {
                                System.out.println("finally执行");
                        }
                }

2.即使执行到try语句,对应的finally也不一定会执行,比如我们在try执行过程中关掉程序也不会执行finally

        try
                        {
                                int temp=4/2;
                                System.out.println(temp);
                                System.exit(0);
                        }
                        catch(ArithmeticException e)
                        {
                        //        e.printStackTrace();
                                System.out.println("不能除0");
                        }
                        finally
                        {
                                System.out.println("finally执行");
                        }


       


作者: 胡团乐    时间: 2012-6-1 07:10
关键字throws,throw,try,catch,finally分别代表的含义?
throws用在方法的大括号后面如 public static void main() throws Exception{...抛出异常 让继承者,实现着,调用者去处理
try{这里存放会抛出异常的代码}
catch(Exception e){这里需要作出处理动作 一般打印友好的信息,不让用户看到异常的具体信息 这里面会用到throw 比如 throw new RuntimeExcption("这儿有异常")如果抛出异常 而后面没写finally方法 程序会终止}
finally{这里存放一定会执行的代码 比如一些 io流的关闭操作和数据库对象的关闭操作等}
作者: 黑马—陈磊    时间: 2012-6-1 07:58
throw   表示手动抛出了一个异常,当然必须是Exception的派生类,并由catch捕获处理,注意只有try大括号句括的内容才能使用throw
try{}   表示该大括号名括的语句有可能抛出异常,如果捕捉到的异常,则由catch(...)进行识别并处理
catch(){}     识别try抛出的异常并进行处理
finally(){}     有无异常均会执行这里的语句,用于释放异常情况下未释放的资源操作等

try{}catch{}在方法体中具体捕获某种异常并进行处理。
throw是在方法体中抛出具体异常!这个异常可以是自定义的!
作者: 马林贺    时间: 2012-6-1 08:06
http://bbs.itheima.com/thread-15442-1-1.html    我发的帖子,建议你可以去看一下
作者: 飞舞❤心动    时间: 2012-6-1 08:36
异常:就是程序在运行时出现不正常情况。
        异常的由来:问题也是现实生活中一个具体的事物,也可以通过java 的类的形式进行描述。并封装成对象(这是以前没有注意到的)。
问题分两种:一种是严重的,一种是非严重的问题。
对于严重的:java 通过Error类进行描述。(不能挽回)
对于非严重的,java 通过Exception类进行描述。(可以补救)
try
{
需要被检测的代码;
}
catch(异常类 变量)
{
处理异常的代码;(处理方式)
}
finally
{
一定会执行的语句;
}

补充二点啊,其实还有一个异常,是“可解决,也可不解决的异常”————RuntimeException,它是包含在EXcepetion里面的!还有就是我理解的异常的一些概念,JAVA异常是JAVA提供的用于处理程序中错误的一种机制,错误有包括,程序运行时的错误,例如:数组下标越界,溢出,所要读取的内容不存在等等!总之设计一个良好的程序应该是在异常发生时提供处理这些错误的方法,使得程序不会因为异常而阻断或不可能预见的结果!
还有一点,就是真正写项目的时候,异常非常多,也令程序员非常讨厌,但是,大多数开发的时候,你要单独建立一个包然后声明一个类,来装内存,具体的要用myeclips,创建一个包,然后选择EXPECTION,创建一个EXCEPTION类,然后声明所以的异常,这样你的异常,就够用了!
作者: 凡延海    时间: 2012-6-1 08:49
我也说一下,异常处理是Java的一大特点,Java虚拟机可以自己识别异常并抛出异常。其语句是tr...catch语句来处理异常。
try{}语句用于抓捕异常,其作用范围也就是{}中的语句;catch(Exception e){}语句用于对异常进行处理;
如果方法中有异常你可以自己在方法中处理掉,如果你不想处理或者不好处理可以通过throws 来抛出异常来,这样呢你就可以把异常问题抛给了调用该方法的语句来抓捕处理异常。
还有就是throw,这个呢是表示你要主动抛出异常,可以用于抛出自己编写的异常,因为自己编写的异常系统是不能识别生成异常实例对象的,需要自己来生成对象处理。finally就是你的程序只要不是强制推出程序都会执行下面的finally。这里呢我写了一个简单的程序用到了
  1. public class MapTest2 {
  2.         public static int test(int x,int y)throws ArithmeticException
  3.         {
  4.                 return x/y;
  5.         }

  6.         public static void main(String[] args) {
  7.                 try
  8.                 {
  9.                         System.out.println(test(8,2));
  10.                         System.out.println(test(8,0));
  11.                 }
  12.                 catch(ArithmeticException e)
  13.                 {
  14.                         System.out.println("被除数是0");
  15.                 }
  16.                 finally
  17.                 {
  18.                         System.out.println("程序照样执行");
  19.                 }
  20.         }
  21. }
复制代码
在test()方法中throws有可能的异常,然后在main方法中运用的时候呢就要对这些异常进行抓捕处理。




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