java异常处理

Thorwable类所有异常和错误的超类,有两个子类Error和Exception,分别表示错误和异常。

1、Error与Exception

  • Error(错误)表示运行应用程序中较严重问题, 是程序无法处理的错误。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。比如OutOfMemoryError、ThreadDeath等。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。
  • Exception(异常)是应用程序中可能的可预测、可恢复问题。一般大多数异常表示中度到轻度的问题。异常一般是在特定环境下产生的,通常出现在代码的特定方法和操作中。在 EchoInput 类中,当试图调用 readLine 方法时,可能出现 IOException 异常。

2、Exception又分为运行时异常(RuntimeException)(unchecked)和非运行时异常(checked),

  • 运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的。
  • 非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。

   如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。

选择checked还是unchecked异常?

选择checked还是unchecked都是由你自己决定的,很难说哪种就一定正确,反之就一定错误。

过多的是用checked异常会导致大量的try语句,代码丑陋,阅读性差。

建议:

  • 使用checked异常:当所有调用者必须处理这个异常,可以让调用者进行重试操作;或者该异常相当于该方法的第二个返回值。使用checked异常。
  • 使用unchecked异常:调用者根本无法处理。这个异常是一个非常严重的错误,如数据库连接错误,文件无法打开等。或者这些异常是与外部环境相关的。不是重试可以解决的
原文地址:https://www.cnblogs.com/gxz-sw/p/6646988.html