亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳解Java如何根據控制臺實現定位異常

發布時間:2020-07-21 09:42:51 來源:億速云 閱讀:147 作者:小豬 欄目:編程語言

小編這次要給大家分享的是詳解Java如何根據控制臺實現定位異常,文章內容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

異常堆棧作為我們平時定位問題的最重要手段,為我們解決問題提供了很大幫助。但是我們可能都有這樣的習慣就是看到一段異常,尤其是異常堆棧很多,層次很深的時候。就感覺很擔心害怕,匆匆掃描一眼就開始猜問題應該如何如何,然后不斷的根據猜測去調整代碼,雖然也會 debug 但是還是浪費了不少的時間。

這是因為:

1.我們沒有認認真真的看異常堆棧信息;

2.堆棧太多,我們并不確定到底哪里導致了問題。

解決辦法就是:

1.知道異常堆棧產生的流程。

2.耐心的閱讀堆棧信息。

3.解決問題

1.異常產生流程:上面報錯,下面跟隨

舉個例子:我們有如下的測試代碼:

package com.bsx.test;

public class TestException {  public static void main(String[] args) {    TestException exception = new TestException();    exception.m1();  }
  public void m1() {    m2();  }
  public void m2() {    m3();  }
  public void m3() {    String name = null;    System.out.println(name.length());  }
}

執行之后輸出結果如下:

Exception in thread "main" java.lang.NullPointerExceptionat com.bsx.test.TestException.m3(TestException.java:22)at com.bsx.test.TestException.m2(TestException.java:17)at com.bsx.test.TestException.m1(TestException.java:13)at com.bsx.test.TestException.main(TestException.java:9)

我們可以看到,這個錯誤日志輸出的順序跟調用順序是相反的,為什么呢?

我們知道 java 的方法在執行的時候是在虛擬機棧中執行的,每執行一個方法就會新建一個棧幀然后壓入到虛擬機棧中。這是一個后進先出的結構,所以報錯的時候也是從被調用者最開始報錯,然后調用者依次報錯,所以打印錯誤時的順序也是報錯的位置在最上面,調用者依次向后排。

由此我們可以得出結論:上面報錯,下面跟隨。

2.讀懂報錯信息:尋找我們代碼報錯的位置

從上面的分析我們知道報錯位置在上面。

大部分情況下,最上方的報錯信息就是我們代碼出錯的位置。但是有時候最上方的日志并不是我們自己的代碼,那是因為我們的代碼調用了一些三方 jar 包的代碼。但是這并不影響我們去定位問題,我們還是根據上面報錯,下面跟隨來定位問題,那么真正報錯的位置還是在上面。那么我們只需要從上往下依次找我們自己的代碼即可。

第一個找到的我們的代碼位置就是我們代碼中引發報錯的位置。有時候有些報錯信息很明顯,我們可以根據報錯信息來直接定位到問題癥結。有時候報錯信息并不能很明確的指明報錯原因,這時候,我們就可以在這個精確的位置打上斷點來調試一下。

看完這篇關于詳解Java如何根據控制臺實現定位異常的文章,如果覺得文章內容寫得不錯的話,可以把它分享出去給更多人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

镇原县| 温宿县| 丰县| 商水县| 阜南县| 高邮市| 忻州市| 册亨县| 盐源县| 朝阳县| 天柱县| 秦皇岛市| 澄迈县| 信丰县| 林芝县| 大同市| 沾化县| 阳江市| 山阳县| 金塔县| 米易县| 冕宁县| 平昌县| 中江县| 云梦县| 吉安县| 赤峰市| 宣化县| 华蓥市| 湖北省| 湖州市| 延庆县| 大英县| 保定市| 若羌县| 卫辉市| 晋城| 民乐县| 石台县| 渑池县| 泗洪县|