Logo

郎哥编程

显示异常信息与异常分类

2019-12-25 246

1. 如何显示异常信息

前面学习了各种异常类及异常语句的用法。在实际编程过程中,还需要显示导致异常出现的信息,方便程序员根据给出的异常信息查找程序错误。异常类提供了输出异常信息的两个方法:getMessage方法和printStackTrace方法。

getMessage方法

用于获取异常的详细消息字符串。

printStackTrace方法

输出Throwable对象的堆栈跟踪信息到控制台。

在catch中声明的异常对象catch(Exception ex)封装了异常事件发生的信息,在catch语句块中可以使用这个对象的getMessage方法获取错误信息。

getMessage的使用方法示例如下:

 public static void main(String[] args) {  
    try {  
        int  i = 12 / 0;  
    } catch (Exception e) {  
        System.out.println(e.getMessage());  
 }

运行代码,因为被零除,所以发生异常,输出“/  by  zero”。

printStackTrace的用法示例如下:

public static void main(String[] args) {
  try {  
    int  i = 12 / 0;  
   } catch (Exception e) {  
     e.printStackTrace();
  }
}

运行上述代码,输出结果如下下图所示:

 image.png                                          

使用printStackTrace方法可以获取异常的具体类型,这样就可以在使用throw时抛出一个确定的异常类型。

案例1:建立ShowExcepMessage类,输出异常信息到控制台。

在throwdemo包下新建ShowExcepMessage类。代码如下:

public class ShowExcepMessage {
 
    /** 
    * @Title: main 
    * @Description: Java程序入口main方法
    * @param @param args    参数 
   
    * @return void    返回类型 
    * @throws 
    */
 
    public static void main(String[] args) {
       try {  
           int  i = 12 / 0;  
       } catch (Exception e) {  
           System.out.println("异常消息" + e.getMessage());
           // 打印程序运行信息
           e.printStackTrace();
       }
    }
}

程序执行结果如下图所示:

image.png

2. 异常的分类

从编程角度考虑,可以将异常分为以下几种。

(1)非受检异常

非受检异常是指编译器不要求强制处置的异常。一般是指因设计或实现方式不当而导致的问题。也可以说,是程序员的原因导致的,是本来可以避免发生的情况。

java.lang.RuntimeException类及其子类都是非受检异常。具体如下:

●   java.lang.ClassCastException:错误的类型转换异常。

●   java.lang.ArrayIndexOutOfBoundsException:组下标越界异常。

●   java.lang.NullPointException:空指针访问异常。

●   java.lang.ArithmeticException:除零溢出异常。

如果事先检查数组元素下标,保证其不超出数组长度,ArrayIndexOutOfBoundsException异常就不会抛出;再如,先检查并确保一个引用类型变量值不为NULL,然后再访问其属性和方法,那么,NullPointException异常就不会抛出。因此,如果程序设计良好并且正确实现,这类异常就不会发生,所以通常也不会处理这类异常。

(2)受检异常

受检异常是指编译器要求必须处置的异常,即程序在运行时由于外界因素造成的一般性异常,具体如下:

●   java.lang.ClassNotFoundExeption:没有找到具有指定名称的类异常。

●   java.lang.FileNotFoundException:访问不存在的文件异常。

●   java.lang.IO Exception:操作文件时发生的异常。

●   java.sql.SQL Exception:操作数据库时发生的异常。

Java编译器要求Java程序必须捕获或声明所有受检异常。如FileNotFoundException、IO Exception等。因为,对于这类异常来说,如果程序不进行处理,可能会带来意向不到的结果。而非受检异常可以不做处理,因为这类异常很普遍,若全部处理可能会对程序的可读性和运行效率产生影响。

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论