java error throws,Java Exception、Error

Java异常类层次结构

+-----------+

| Throwable |

+-----------+

/ \

/ \

+-------+ +-----------+

| Error | | Exception |

+-------+ +-----------+

/ | \ / | \

\________/ \______/ \

+------------------+

unchecked checked | RuntimeException |

+------------------+

/ | | \

\_________________/

unchecked

Error:一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢出等。如java.lang.StackOverFlowError和Java.lang.OutOfMemoryError。对于这类错误,Java编译器不去检查他们。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和预防,遇到这样的错误,建议让程序终止。

Exception:表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。

常见的异常:

OutOfMemoryError:VirtualMachineError的子类,VirtualMachineError是Error的子类;

StackOverflowError:同上;

IOException:Exception的子类,属于checked exception。常见的子类有FileNotFoundException等。而IOError则是Error的子类;

RunTimeException:运行时异常,属于unchecked exception,其常见的子类有NullPointerException等

checked/unchecked Exception分类

unchecked exception:run-time exception + error;

checked exception:除了unchecked exception的其他所有异常,即除了RunTimeException及其子类、Error及其子类的所有Throwable的子类。

oracle英文原文见参考资料4。

两者的区别:

checked exception:必须在代码中处理该Exception,否则会编译不通过。可以通过try-catch或throws让调用者处理;

unchecked exception:可能是代码逻辑错误引起的,但不处理也能编译通过

throw、throws

throw用在方法体内,是具体向外抛异常的动作,表示既定事实,如throw new Exception("error.");

throws用在函数声明中,表明该函数可能抛出某种类型的异常,需要调用者处理,表示倾向,如public void test() throws IOException。

try-catch-finally、try with resources

// before Java 7:

try {

// open resources like File, Database connection, Sockets etc

} catch (FileNotFoundException e) {

// Exception handling like FileNotFoundException, IOException etc

} finally{

// close resources

}

// Java 7 try with resources implementation:

try(// open resources here){

// use resources

} catch (FileNotFoundException e) {

// exception handling

}

// resources are closed as soon as try-catch block is executed.

Java 7之前必须显示的关闭,否则会导致内存泄漏

Java try with resources 的好处:

代码的可读性更好,更易于编写代码

自动化的资源管理

代码的行数被减少

不需要使用finally块来关闭资源

可在try-with-resources中使用分号来间隔多个资源,会在关闭时通过逆序的方式关闭

任何资源在用于 try-with-resources 时,都需要实现 java.lang.AutoCloseable,否则Java编译器会抛出编译问题

异常的日志打印

e:获取的信息包括异常类型和异常详细消息

e.getMessage:只会获得具体的异常名称. 比如说NullPoint 空指针,就告诉你说是空指针

e.printStackTrace:会打出详细异常,异常名称,出错位置,便于调试用...一般一个异常至少几十行

在使用slf4j打印异常时,不需要占位符,只需这么打印:logger.error("error = ", e);,下面这种是错误的:logger.error("error = {}", e);

参考资料

Java中throws和throw的区别讲解

logger.error用法

Java Try with Resources

Chapter 11. Exceptions

Java 的 Checked 和 Unchecked Exception【译】

Error和Exception的联系

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值