5.4. 异常链

一. 获取异常对象的两个重要方法

1. getMessage

获取异常简单的描述信息。

语法格式:String msg = exception.getMessage();

2. printStackTrace()

打印异常追踪的堆栈信息,比较适合于程序的调试阶段

语法格式:exception.printStackTrace();

3. 两个方法的实例

public class ExceptionText3 {
    public static void main(String[] args) {
        //这里只是为了测试getMessage()方法和printStackTrace()方法
        //这里只是new了异常对象,但是没有将异常对象抛出。JVM会认为这是一个普通的java对象。
        NullPointerException e = new NullPointerException("空指针异常Exception ");

        //获取异常简单描述信息:这个信息实际上就是构造方法上面String参数
        String msg = e.getMessage();//空指针异常Exception
        System.out.println(msg);

        //打印异常堆栈信息
        //java后台打印异常堆栈追踪信息的时候,采用了异步线程的方式打印的。
        e.printStackTrace();

        System.out.println("Hello World!");
    }
}
image.png

二. 查看异常的追踪信息

我们应该怎么看,可以快速的调试程序呢?

异常信息追踪信息,从上往下一行一行看。 但是需要注意的是:SUN 写的代码就不用看了。主要问题是出现在自己编写的代码上。

即从运行结果中的 at ExceptionText 3. M 3 (ExceptionText 3. Java:27) 这一行看

import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class ExceptionText3 {
    public static void main(String[] args) {
        try {
            m1();
        } catch (FileNotFoundException e) {
            //打印异常堆栈追踪信息
            //在实际开发中建议使用这个。养成好习惯
            e.printStackTrace();
        }

        //这里程序不耽误执行,很健壮
        System.out.println("Hello World!");
    }

    private static void m1() throws FileNotFoundException {
        m2();
    }

    private static void m2() throws FileNotFoundException {
        m3();
    }

    private static void m3() throws FileNotFoundException {
        new FileInputStream("C:\\Users\\Administrator\\Desktop\\学习a.txt");
    }
}
image.png

因为27行出现了问题导致23行
23行出问题导致19行
19行出问题导致7行
应该先查看27行的的代码。27行是错误的根源,从根上看问题

防止误导再加一条!!!!:

尽量不要使用e.printStackTrace(),而是使用log打印。

反例:

try{
  // do what you want  
}catch(Exception e){
  e.printStackTrace();
}

正例:

try{
  // do what you want  
}catch(Exception e){
  log.info("你的程序有异常啦,{}",e);
}

理由:

  • PrintStackTrace () 打印出的堆栈日志跟业务代码日志是交错混合在一起的,通常排查异常日志不太方便。


  • e.printStackTrace () 语句产生的字符串记录的是堆栈信息,如果信息太长太多,字符串常量池所在的内存块没有空间了, 即内存满了,那么,用户的请求就卡住啦~


暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇