ioexception类别异常是怎么回事?
=。=|IO流异常。一般在读写数据的时候会出现这种问题。java内部数据的传输都是通过流,或者byte来进行传递的。就行一个文本文件。你可以通过in流写入到java中,同时也可以通过out流从java(计算机内存中)返还给具体的文件。
如何优雅的设计Java异常?
1,我看开源中国的很多源码,比如负责从网络解析数据,从数据库的操作都抛异常。这么做的原因是什么。 2,是不是通常情况下,返回值是void的方法一般都抛出异常(如果有的话),有返回值的就在内部try,catch,然后通过返回值标识这个方法是不是执行成功。比如返回值是String时,就约定返回""就是发生了异常, 3,A方法调用了B方法,B方法内部可能会产生IOException,B方法是带有返回值的,A方法的内部也会有其他的操作产生IOException,这时候,让B方法抛出一个IOException,是不是便于在A方法中的catch中集中处理 4,一段逻辑,可能会产生A异常,解析json异常,IOExceptoin,这些异常都是IOException的子类,这时候是都catch,还是只捕获IOException 5.还看过一种写法,比如要catch A,B,C,D异常,结果他只是catch Exception,然后在内部throw new RuntimeException,能这么做的依据是什么 6.《effective java》里写发生可恢复错误的抛出受检异常,程序错误就抛出运行时异常。我能想到的程序错误例子
在JAVA中捕获异常后throw自定义异常是不优雅的吗?
throws语句
如果一个方法可以引发异常,而它本身并不对该异常进行处理,那么该方法必须将这个异常抛给调用者可以使程序能够继续执行下去,这时候就要用到throws语句。在方法体中可以是引发异常列表中的任何一种异常及其子类型的异常。throws用来声明一个方法可能会抛出所有的异常,它跟在方法名称的后面。如果有多个异常,则使用逗号将其分开。
throw语句
throw语句通常用在方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即停止,它后面的语句都不执行。
No,实际上,在很多框架中都采用了这种方式
1.ReThrow
自定义异常,用来更好地进行异常隔离,标识异常的类型,ID,自定义消息等,用于LOG等2.对第三方库的异常进行包装,抽象化,保持与你的框架异常定义一致性,便于你框架对不同异常的处理
3.restful Api,统一异常管理
你换个角度考虑,如果把A异常包装成B异常确实是不规范的做法,应该禁止使用,那么我们的代码会变成什么样?
比如系统的底层,不管是查询数据库,还是调用某个REST服务,本质都是访问网络,那么访问网络必然抛出IOException、SocketTimeoutException等异常,但因为不能对这些异常再次包装,所以要么catch住,打印一下日志,然后返回一个false代表本次操作失败,要么就是把这些底层异常层层往上抛,然后在最前端的Controller/Action/Servlet里处理,或者Controller/Action/Servlet也不处理,继续抛、抛给框架或者容器,那么这样是不是就规范了呢?是不是就优雅了呢