2023-03-02
代碼 bug
1. 前言
剛開始學習Java語言的小伙伴, 很可能被各種各樣的程序bug搞得焦頭爛額, 甚至勸退.健哥將手把手帶你們了解Java中的異常體系, 如何識別Bug以及如何解決Bug.
2. Java語言中異常的分類
讓我們先來了解下Java中的異常分類, 如下圖:
Java中的異常分為Error錯誤和Exception異常兩大類
Error錯誤: 一般所有編譯時期的錯誤或者系統錯誤, 都來自于虛擬機自身. 錯誤無法處理.
Exception異常: 它規定程序本身可以處理的異常, 是指程序本身有問題, 異常可以處理.
編譯期異常: 一般集成開發工具比如IDEA工具, Eclipse工具等都有語法提示功能. 編譯期異常這些工具都有明顯的提示, 根據提示修改即可.
RuntimeException運行時異常: 運行時異常, 其中一部分比如IO異常等是可以通過try...catch手動拋出, 或者通過throws等Java語法處理掉. 而有些是程序運行中意外發成的, 這些異常也就是bug. 下面主要研究的就是bug如何處理.
3. 解決Bug整體思路
程序出Bug的時候, 我們最直接的感受是, 程序報錯了.
初學者這個時候就很慌, 哪里出問題了呢? 我該如何下手呢? 然后直接用眼睛一遍一遍的看代碼, 想看出問題.
這些都是錯誤的做法!!!
如果是幾百行, 上千行代碼, 將很難用眼睛看出問題.
所以解決Bug的整體思路是:
1.找到程序代碼異常出現在第幾行, 也就是哪一行代碼的問題, 導致的Bug.
2.找到問題后, 修改就方便了. 其實改Bug主要是不容易找到Bug在哪里.
4. 發現解決Bug利器 - 日志
看錯誤日志, 雖然都是英文的, 可能有些小伙伴看不懂, 但是建議通讀一遍, 看看是否有提示錯誤出現在第幾行, 很多簡單的問題, 日志上已經指定了哪個類, 第幾行的錯誤.
下面大家看例子:
/**
* @author 健哥
*/
public class TestA {
int a = 1;
int b = 1;
public String sum() {
String total = "結果是:" + (a + b);
return total;
}
public static void main(String[] args) {
TestA a = new TestA();
int total = Integer.parseInt(a.sum());
System.out.println("=======" + total);
}
}
運行結果如下:
這樣大家就可以清楚的看到, 錯誤日志中已經明顯的告訴我們, 問題出在TestA.java這個類的第20行代碼上, 我的第20行代碼是:
int total = Integer.parseInt(a.sum());
原因是他的返回值是字符串并且包含中文, 我們強制轉換類型為Integer, 結果拋出了類型轉換異常.
5. 發現解決Bug利器 - Debug調試工具使用
不管是IDEA集成開發工具, 還是Eclipse開發工具都自帶調試Bug的利器, Debug工具.
但是初學者不會用, 下面健哥帶大家學習Debug工具的使用.
首先就是需要給代碼打斷點, 斷點的作用是決定代碼執行到哪一行暫停下來, 好讓我們詳細看看執行情況. 而初學者恰恰不會打斷點, 搞得很暈, 所以健哥給大家的建議就是初學者, 可以在代碼入口的第一行打斷點.
斷點使用規則:
斷點不可以打在接口上, 只能使用在類上,
斷點不可以打在方法定義行上
斷點不可以打在空行, 注釋行
斷點不可以打在全局變量上
下面標注的都是不可以打斷點的位置:
main方法是程序的入口, 斷點可以打在它下面的第一行上, 如下圖:
運行main方法, 執行代碼, 會自動進入到斷點行, 暫停下來, 接下來可以點擊下圖所示按鈕, 讓代碼一行一行執行. 每點擊一次代碼執行一行, 這樣在哪一行報錯, 就清晰可見了. 方便Bug定位.
在Variables標簽中還可以看到執行后的變量以及對象的值是多少, 每執行一行代碼的時候, 看著代碼腦子里想它的結果運行完這一行是多少, 再看下面監測的數值, 是否匹配, 是否滿足預期, 如果不滿足, 是自己想錯了, 還是代碼執行錯了. 這樣就知道代碼執行的原因了.
開班時間:2021-04-12(深圳)
開班盛況開班時間:2021-05-17(北京)
開班盛況開班時間:2021-03-22(杭州)
開班盛況開班時間:2021-04-26(北京)
開班盛況開班時間:2021-05-10(北京)
開班盛況開班時間:2021-02-22(北京)
開班盛況開班時間:2021-07-12(北京)
預約報名開班時間:2020-09-21(上海)
開班盛況開班時間:2021-07-12(北京)
預約報名開班時間:2019-07-22(北京)
開班盛況Copyright 2011-2023 北京千鋒互聯科技有限公司 .All Right 京ICP備12003911號-5 京公網安備 11010802035720號