更新時(shí)間:2018-09-18 來源:黑馬程序員JavaEE培訓(xùn)學(xué)院 瀏覽量:
一、Debug課程引言
我們?cè)趯懗绦虻臅r(shí)候,會(huì)經(jīng)常出現(xiàn)一些問題也叫bug(如程序運(yùn)行報(bào)錯(cuò),結(jié)果與預(yù)期不符等),面對(duì)這些問題,特別是對(duì)于初學(xué)者而言,會(huì)有很大的困擾,在解決問題的過程中會(huì)消耗大量的時(shí)間,因?yàn)闆]有掌握解決問題的方式。
所以我覺得有必要開發(fā)一套課來提高大家解決問題的能力,因?yàn)椴还軐?duì)于現(xiàn)在學(xué)習(xí)而言,還是對(duì)于日后的工作而言,解決bug是一個(gè)非常重要的能力。因?yàn)閎ug無處不在,可以說bug是伴隨我們開發(fā)的伴侶,只有我們能征服這些bug,才能征服開發(fā)工作。
二、Bug分類
程序中的錯(cuò)誤大致分為兩種,編譯時(shí)錯(cuò)誤和運(yùn)行時(shí)錯(cuò)誤。
1. 編譯時(shí)錯(cuò)誤
這種問題基本都是一些語法錯(cuò)誤,哪里有紅色波浪線,哪里就有問題。
a. 類名,方法名,變量名寫錯(cuò)了
b. 標(biāo)點(diǎn)符號(hào)寫錯(cuò)了
c. 括號(hào)不匹配
d. 修改了代碼,沒有保存
e. 方法中少了return語句
以上這些問題都是最最最最最最基本的語法格式問題,必須知道怎么解決,這不是我們此次課程的重點(diǎn)。
2. 運(yùn)行時(shí)錯(cuò)誤
程序運(yùn)行時(shí)出現(xiàn)的bug才是我們課程的重點(diǎn)。
程序運(yùn)行時(shí)出現(xiàn)錯(cuò)誤的原因就比較復(fù)雜了,有下面幾種情況
a. 程序不能正常執(zhí)行,報(bào)錯(cuò)(如NullPointerException)
b. 程序可以正常執(zhí)行,但結(jié)果不對(duì)
上述這些bug出現(xiàn)的原因就比較復(fù)雜,特別是那種看起來沒問題,執(zhí)行也沒報(bào)錯(cuò),但是結(jié)果就是不對(duì)的代碼,很頭疼。這個(gè)時(shí)候就需要我們用到專業(yè)的Debug工具來調(diào)試程序。
三、Debug應(yīng)用
為了讓大家能夠熟悉debug調(diào)試工具,提高解決bug的能力,在基礎(chǔ)班的各個(gè)階段分別設(shè)置一個(gè)有bug案例,用debug調(diào)試的方式來查找問題。
有句老話叫“授人以魚不如授人以漁”,通過學(xué)習(xí)這些案例,希望大家以后遇到問題首先能夠自己解決。大家畢業(yè)之后工作了,拿著別人的工資,那個(gè)時(shí)候遇到了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
/*
* 分析以下需求,并用代碼實(shí)現(xiàn)(循環(huán),if):
(1)打印1到100之內(nèi)的整數(shù),但數(shù)字中包含9的要跳過
(2)每行輸出5個(gè)滿足條件的數(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í)行結(jié)果如下:在38和40之間多了一個(gè)空行
.....省略......
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();
}
}
打印結(jié)果為:
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)
本文版權(quán)歸黑馬程序員JavaEE學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
首發(fā):http://java.itheima.com/