对于java异常。想从两个方面谈论。
一。首先要熟悉java的异常处理,了解它的体系结构。
二。通过面向对象的思想,用现实面向对象去理解异常的一些内容。
1。error和exception的区别。
java异常都是实现Throwable的。往下分为error和exception.
两个的区别在于问题的严重程度。error是致命的,严重的,会影响系统的运行,举例来说,一个高PV的网站,他的数据库链接很少。高访问量超过网站的最大的承载压力。系统无法正常运行,最后挂掉。这就是error。再用面向对象来举例,就好比我有一输车,我在沙漠中,车没了,我是一点招也没有,巧妇难为无米之炊,谁也解决不了。问题很严重了。我无法走出沙漠,系统无法继续运行。
exception是一些异常,不是致命的。就好比电力公司,一台机票坏掉了并不影响给提供电力,有问题并不影响系统运行。
2。运行时的异常和非运行时的异常
exception又可以细分为运行时的异常和非运行时的异常。
运行时的异常:RuntimeExcetion 本身以及其子类称为运行的系统。当然RuntimeExcetion 也是继承Exception的。
非运行的异常:Exception本身以及除了RuntimeExcetion 以外,Exception的其他子类称为非运行时的异常。
有什么区别呢?
在编译上,如果方法抛出运行时的异常,调用查必须捕获。在IED中会有错误提示消息。而非运行时的异常不需要调用者进行处理。
运行时的异常是可以预料到的,而非运行时的异常是不可以预期的。
3。异常之间的转换
实现Throwable的类,彼此之间都可以进行转换。代码如下:
public class DAOException extends RuntimeException {
public DAOException(String message, Throwable cause) {
super(message, cause);
}
}
按上面总结的,Throwable大体分为error和exception,进行又可以细分为三类。
error,运行时的异常,非运行时的异常。
实现Throwable的类又是可以彼此之间进行转换,我们如何转换呢。一般分三种情况。
error转成Exception,error转成RuntimeException 还有 Exception转成RuntimeException.
在实际生产活动中。即使发了很大的错误,很致命的错误,也要让系统运行下去,碰到了error,系统也要运转。而且有些error我们也是可以进行处理的,没有必须让系统停下来。这样我们把他做成普通的异常进行处理。
Exception到RuntimeException:将检查异常转换为RuntimeException可以让程序代码变得更优雅,让开发人员集中经理设计更合理的程序代码,反过来也增加了系统发生异常的可能性。
Error到RuntimeException:目的还是一样的。把所有的异常和错误转译为不检查异常,这样可以让代码更为简洁,还有利于对错误和异常信息的统一处理。
其实代码中有大量的处理异常的代码,确实影响代码的可读性,处理异常的代码往往是和业务不相关的。
那在我们的系统中是用什么进行处理呢?是Exception还是RuntimeException呢/
这个不好说。我们可以用面向对象的思想来思考这个问题。
我从你那买了一辆车,我很高兴,周末开车出去,车突然没油了。我不高兴,找你去理论(看来我是很不讲理的),可能像我这种人太多了,汽车代理商受不了。为了避免以后的究分,在开车这个方法中抛出一个异常,告诉可能会发生车没有汽油这个异常。开车的人想要开车,必须要处理这个异常。问题看似解决了,但还有一些人,他们不喜欢默迹,就想开车,不想管不管什么异常,有异常的时候再说,车没汽油的时候再说,他们不想事前处理这些东西。他们不想处理非运行时的异常。
所以用Exception还是RuntimeException,不同的人是有不同的想法的。
但无论哪种,都应该根据实际业务,分段的,集中起来进行处理。
具体选用哪个异常还应该根据你自己对业务的理解来定。
最后来看一下Spring是选用什么来处理的异常的吧。
Spring中的所有异常都可以用org.springframework.core.NestedRuntimeException来表示,并且该基类继承的是RuntimeException
一。首先要熟悉java的异常处理,了解它的体系结构。
二。通过面向对象的思想,用现实面向对象去理解异常的一些内容。
1。error和exception的区别。
java异常都是实现Throwable的。往下分为error和exception.
两个的区别在于问题的严重程度。error是致命的,严重的,会影响系统的运行,举例来说,一个高PV的网站,他的数据库链接很少。高访问量超过网站的最大的承载压力。系统无法正常运行,最后挂掉。这就是error。再用面向对象来举例,就好比我有一输车,我在沙漠中,车没了,我是一点招也没有,巧妇难为无米之炊,谁也解决不了。问题很严重了。我无法走出沙漠,系统无法继续运行。
exception是一些异常,不是致命的。就好比电力公司,一台机票坏掉了并不影响给提供电力,有问题并不影响系统运行。
2。运行时的异常和非运行时的异常
exception又可以细分为运行时的异常和非运行时的异常。
运行时的异常:RuntimeExcetion 本身以及其子类称为运行的系统。当然RuntimeExcetion 也是继承Exception的。
非运行的异常:Exception本身以及除了RuntimeExcetion 以外,Exception的其他子类称为非运行时的异常。
有什么区别呢?
在编译上,如果方法抛出运行时的异常,调用查必须捕获。在IED中会有错误提示消息。而非运行时的异常不需要调用者进行处理。
运行时的异常是可以预料到的,而非运行时的异常是不可以预期的。
3。异常之间的转换
实现Throwable的类,彼此之间都可以进行转换。代码如下:
public class DAOException extends RuntimeException {
public DAOException(String message, Throwable cause) {
super(message, cause);
}
}
按上面总结的,Throwable大体分为error和exception,进行又可以细分为三类。
error,运行时的异常,非运行时的异常。
实现Throwable的类又是可以彼此之间进行转换,我们如何转换呢。一般分三种情况。
error转成Exception,error转成RuntimeException 还有 Exception转成RuntimeException.
在实际生产活动中。即使发了很大的错误,很致命的错误,也要让系统运行下去,碰到了error,系统也要运转。而且有些error我们也是可以进行处理的,没有必须让系统停下来。这样我们把他做成普通的异常进行处理。
Exception到RuntimeException:将检查异常转换为RuntimeException可以让程序代码变得更优雅,让开发人员集中经理设计更合理的程序代码,反过来也增加了系统发生异常的可能性。
Error到RuntimeException:目的还是一样的。把所有的异常和错误转译为不检查异常,这样可以让代码更为简洁,还有利于对错误和异常信息的统一处理。
其实代码中有大量的处理异常的代码,确实影响代码的可读性,处理异常的代码往往是和业务不相关的。
那在我们的系统中是用什么进行处理呢?是Exception还是RuntimeException呢/
这个不好说。我们可以用面向对象的思想来思考这个问题。
我从你那买了一辆车,我很高兴,周末开车出去,车突然没油了。我不高兴,找你去理论(看来我是很不讲理的),可能像我这种人太多了,汽车代理商受不了。为了避免以后的究分,在开车这个方法中抛出一个异常,告诉可能会发生车没有汽油这个异常。开车的人想要开车,必须要处理这个异常。问题看似解决了,但还有一些人,他们不喜欢默迹,就想开车,不想管不管什么异常,有异常的时候再说,车没汽油的时候再说,他们不想事前处理这些东西。他们不想处理非运行时的异常。
所以用Exception还是RuntimeException,不同的人是有不同的想法的。
但无论哪种,都应该根据实际业务,分段的,集中起来进行处理。
具体选用哪个异常还应该根据你自己对业务的理解来定。
最后来看一下Spring是选用什么来处理的异常的吧。
Spring中的所有异常都可以用org.springframework.core.NestedRuntimeException来表示,并且该基类继承的是RuntimeException