Java的throw exception是啥意思?
Java里面处理异常一般有两种方法,一种就是throw exception 抛出异常,就是这一段代码出问题的时候自己不处理,交给调用这一段代码的处理。
第二种是用try catch处理,也就是出现问题的时候自己处理
java中throw抛出的一些异常,程序不进行处理程序编译也不会错误?
不会,抛出异常本意就是在某些不满足条件的时候终止程序运行,但是也可以选择捕获处理,捕获后就不会使程序终止。但是为什么有的系统方法必须让你捕获呢?
那是因为该方法使用throws关键字声明了,作用就是将throw抛出的异常显示的交给调用者处理,如果调用者不处理,就不try-catch那么才会编译不通过。
如何在Java程序出现异常时输出其文件和行号?
翻阅JDK,我们找到StackTraceElement这个类。这个类可以从Throwable取得,另外也可以从Thread类取得,通过这些我写如下的一个打印行号的测试程序: 查看源代码
在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也不处理,继续抛、抛给框架或者容器,那么这样是不是就规范了呢?是不是就优雅了呢
不能这么说吧,JDK自带的异常毕竟不能完全描述“代码运行过程中的所抛出的所有问题”,比如:参数为空,参数格式不正确,数据无法查找,调用第三方程序异常……的情况,所以自定义异常在所难免,我们将异常一般在表现层需要做“合适的处理,防止异常抛出到页面上”,如果全用JDK的异常,那么我们就如何区分?不可能所有的错误,我们都返回的是“系统繁忙,请稍后重试!”,所以不认为throw自定义异常就不优雅了,如果感觉不优雅我们可以采用切面上处理异常,核心代码中没有异常信息,这就优雅了!!!