日期:2014-05-20  浏览次数:20732 次

对于异常的理解
Java code
public class p171
{
    public static void main(String args[])
    {
        int a=5,b=0;
        try
        {
            if(b==0)
                throw new ArithmeticException();//我觉得这里抛不抛都无所谓
            else
                System.out.println(a+"/"+b+"="+a*b); //我相信这里会自动产生一个异常吧
        }
        catch(ArithmeticException e)
        {
            System.out.println("异常:"+e+"被抛出了!");
        }
    }
}

总觉得异常应该不用throw,凡是错误直接去catch不就行了...

------解决方案--------------------
异常有分类的!
特别是需查异常,不需查异常,处理有区别!

那按照你的意思,catch后做什么哪,不throw出来?

你说的应该是throws和catch吧?


------解决方案--------------------
刚学JAVA。。。不要就认为某个功能完全没有用。。。
等你学多了以后自然就知道为什么要这么设计了

你完全是在一个假定的条件下
这个程序是我写的
这个程序只有我使用

当然,这样的情况下,无所谓上抛错误
但是,如果你处于一个多态环境那??你如何使用基类来统一处理子类错误,你如何设计一个通用错误处理框架?
如果你处于多人开发环境下??可能由你的代码产生的错误,如何通知给其他人,这里有一个错误?
------解决方案--------------------
我刚学java的第一个星期也和lz有同样的迷惑 不过学久了就觉得那种想法多么荒唐
------解决方案--------------------
不同的异常需要不同的界别来处理

如果都被你catch住了

你有能力都解决吗
------解决方案--------------------
呵呵,你说的不用throw是对于你来说吧~可以呀~这只是具体在那里处理异常的问题,那里处理都可以!
但是,没有throw哪来的catch呢?
呵呵,底层会给你throw出来的~!之后你抓住这些异常之后,可以转变为你自己写的异常~这样可以统一处理异常!
------解决方案--------------------

自己的一点建议
现在 做项目也遇到过这一个问题,就是在好几家公司合作 做一个项目的时候 有时候要调用别
的公司的一些方法的接口,但是这就出现问题了,有时候别的公司把方法改了或者修改了方法参数
或者别的什么东西但没有及时通知 这下就需要你自己程序的健壮性了。你把他捕获\抛出 因为在大
的项目中如果没有这些捕获查询错误起来是很困难的。

------解决方案--------------------
这么说吧,对于你能处理的异常,当然要去catch,可是有一些非运行时异常你必须处理,但是你的某段方法代码在某个时候无法处理,但是程序必须执行下去,所以要用throws往外抛异常,直到你的程序能去try了,这个时候就不用往外抛了。
------解决方案--------------------
引用楼主 sure2003 的帖子:
public static
总觉得异常应该不用throw,凡是错误直接去catch不就行了...

------解决方案--------------------
throw 是为了 在一个类里可以同一地方catch,然后根据继承的exception之间的关系 处理

很好维护的
------解决方案--------------------
举一个例子吧:

假如你做一个SWING界面,其中包含有一个自定义的文件选取控件和其它的控件,
那么当你的这个自定义文件选取控件操作发生异常时,你的处理方式可以有两种:
一是直接在这个控件里处理,另外是在框架JFrame中处理,很显然,在JFrame中处理的话就有利于OOP的高聚合。所以thorw在这里对程序的结构起着重要的作用。

另外还有很多例子表明它还可以对你的程序其它方面的设计合理性有很大作用,所以从工程的角度来说,很好地利用异常,是设计一个好的项目的一个重要因素
------解决方案--------------------
throw出来的异常是要调用他的类来catch的
异常总是要处理的 不处理的话 程序会停止运行的
还要最好不要把所有的异常都throw到上层调用类来处理
这样会给最后处理的类带来很大压力的
------解决方案--------------------
为什么需要异常处理:
---摘自《thinking in java》
java的基本理念是:结构不佳的代码不能运行
发现错误的理想时机是在编译阶段,也就是在你试图运行程序之前,然而,编译期间并不能找出所有的错误,余下的问题就要在运行时解决,这就需要错误源能通过某种方式把适当的消息传递给某个接收者----该接收者知道如何处理这个问题.


假如我现在让你写一个两个整数相除的方法供别人使用,请问你如何处理被0除的情况呢?
显然这个被0除,是由于使用者的失误,你应该将错误的原因提供给他,这个时候就需要用到抛出异常了。
------解决方案--------------------
一般来说
异常应该给最终调用者处理
你觉得你是 你就cath
你不是就 throw
------解决方案--------------------
探讨
刚学JAVA。。。不要就认为某个功能完全没有用。。。
等你学多了以后自然就知道为什么要这么设计了