更新時間:2018-09-18 來源:黑馬程序員JavaEE培訓學院 瀏覽量:
一、Debug課程引言
我們在寫程序的時候,會經(jīng)常出現(xiàn)一些問題也叫bug(如程序運行報錯,結果與預期不符等),面對這些問題,特別是對于初學者而言,會有很大的困擾,在解決問題的過程中會消耗大量的時間,因為沒有掌握解決問題的方式。
所以我覺得有必要開發(fā)一套課來提高大家解決問題的能力,因為不管對于現(xiàn)在學習而言,還是對于日后的工作而言,解決bug是一個非常重要的能力。因為bug無處不在,可以說bug是伴隨我們開發(fā)的伴侶,只有我們能征服這些bug,才能征服開發(fā)工作。
二、Bug分類
程序中的錯誤大致分為兩種,編譯時錯誤和運行時錯誤。
1. 編譯時錯誤
這種問題基本都是一些語法錯誤,哪里有紅色波浪線,哪里就有問題。
a. 類名,方法名,變量名寫錯了
b. 標點符號寫錯了
c. 括號不匹配
d. 修改了代碼,沒有保存
e. 方法中少了return語句
以上這些問題都是最最最最最最基本的語法格式問題,必須知道怎么解決,這不是我們此次課程的重點。
2. 運行時錯誤
程序運行時出現(xiàn)的bug才是我們課程的重點。
程序運行時出現(xiàn)錯誤的原因就比較復雜了,有下面幾種情況
a. 程序不能正常執(zhí)行,報錯(如NullPointerException)
b. 程序可以正常執(zhí)行,但結果不對
上述這些bug出現(xiàn)的原因就比較復雜,特別是那種看起來沒問題,執(zhí)行也沒報錯,但是結果就是不對的代碼,很頭疼。這個時候就需要我們用到專業(yè)的Debug工具來調(diào)試程序。
三、Debug應用
為了讓大家能夠熟悉debug調(diào)試工具,提高解決bug的能力,在基礎班的各個階段分別設置一個有bug案例,用debug調(diào)試的方式來查找問題。
有句老話叫“授人以魚不如授人以漁”,通過學習這些案例,希望大家以后遇到問題首先能夠自己解決。大家畢業(yè)之后工作了,拿著別人的工資,那個時候遇到了bug,誰能幫你解決,只能自己想辦法解決。
1. Debug案例1
//基本類型作為參數(shù)
public static void show(int a){
a=a+1;
}
//引用類型作為參數(shù)
public static void show(int[] arr){
arr[0]+=1;
}
2. Debug案例2
/*
* 分析以下需求,并用代碼實現(xiàn)(循環(huán),if):
(1)打印1到100之內(nèi)的整數(shù),但數(shù)字中包含9的要跳過
(2)每行輸出5個滿足條件的數(shù),之間用空格分隔
(3)如:1 2 3 4 5
*/
public static void function3(){
int count=0;
for(int i=1;i<100;i++){
if(!(i%10==9||i/10%10==9)){
System.out.print(i+" ");
count++;
}
if(count%5==0){
System.out.println("");
}
}
}
執(zhí)行結果如下:在38和40之間多了一個空行
.....省略......
34 35 36 37 38
40 41 42 43 44
.....省略......
3. Debug案例3
public class Fu {
int a;
public Fu() {
a=20;
show();
}
public void show(){
System.out.println(a);
}
}
public class Zi extends Fu{
int a;
public Zi() {
a=20;
}
public void show(){
System.out.println(a);
}
public static void main(String[]args){
Zi z=new Zi();
z.show();
}
}
打印結果為:
0
20
4. Debug案例4
下面字符串中”java”出現(xiàn)的次數(shù)
“sunjavahpjavaokjavajjavahahajavajavagoodjava”
String s ="sunjavahpjavaokjavajjavahahajavajavagoodjava";
int count = 0;
int index=0;
while (s.indexOf("java") != -1) {
index = s.indexOf("java", index);
if (index != -1) {
index = index + 1;
count++;
}
}
System.out.println(count);
5. Debug案例5
public static void main(String[] args) {
getDir(newFile("C:\\"));
}
/*
* 打印輸出指定目錄下所有的.java文件(包含子目錄)
*/
public static void getDir(File dir){
File[] files = dir.listFiles();
for(File f:files){
if(f.isDirectory()){
getDir(f);
}else{
if(f.getName().endsWith(".java")){
System.out.println(f);
}
}
}
}
Exception in thread "main" java.lang.NullPointerException
atcn.itcast.demo1.Demo4.getDir(Demo4.java:15)
atcn.itcast.demo1.Demo4.getDir(Demo4.java:17)
atcn.itcast.demo1.Demo4.getDir(Demo4.java:17)
atcn.itcast.demo1.Demo4.main(Demo4.java:7)
本文版權歸黑馬程序員JavaEE學院所有,歡迎轉載,轉載請注明作者出處。謝謝!
首發(fā):http://java.itheima.com/