A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 武汉分校-小舞 黑马粉丝团   /  2017-9-1 10:16  /  1792 人查看  /  5 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

一、Debug课程引言
我们在写程序的时候,会经常出现一些问题也叫bug(如程序运行报错,结果与预期不符等),面对这些问题,特别是对于初学者而言,会有很大的困扰,在解决问题的过程中会消耗大量的时间,因为没有掌握解决问题的方式。
所以我觉得有必要开发一套课来提高大家解决问题的能力,因为不管对于现在学习而言,还是对于日后的工作而言,解决bug是一个非常重要的能力。因为bug无处不在,可以说bug是伴随我们开发的伴侣,只有我们能征服这些bug,才能征服开发工作。

二、Bug分类
程序中的错误大致分为两种,编译时错误和运行时错误。
1.   编译时错误
这种问题基本都是一些语法错误,哪里有红色波浪线,哪里就有问题。
a.        类名,方法名,变量名写错了
b.        标点符号写错了
c.         括号不匹配
d.        修改了代码,没有保存
e.        方法中少了return语句
以上这些问题都是最最最最最最基本的语法格式问题,必须知道怎么解决,这不是我们此次课程的重点。

2.   运行时错误
                   程序运行时出现的bug才是我们课程的重点。
程序运行时出现错误的原因就比较复杂了,有下面几种情况
a.        程序不能正常执行,报错(如NullPointerException)
b.        程序可以正常执行,但结果不对

上述这些bug出现的原因就比较复杂,特别是那种看起来没问题,执行也没报错,但是结果就是不对的代码,很头疼。这个时候就需要我们用到专业的Debug工具来调试程序。


三、Debug应用
为了让大家能够熟悉debug调试工具,提高解决bug的能力,在基础班的各个阶段分别设置一个有bug案例,用debug调试的方式来查找问题。
有句老话叫“授人以鱼不如授人以渔”,通过学习这些案例,希望大家以后遇到问题首先能够自己解决。大家毕业之后工作了,拿着别人的工资,那个时候遇到了bug,谁能帮你解决,只能自己想办法解决。
1.   Debug案例1
//基本类型作为参数
    public static void show(int a){
       a=a+1;
    }
   
    //引用类型作为参数
    public static void show(int[] arr){
       arr[0]+=1;
    }
2.   Debug案例2
/*
     * 分析以下需求,并用代码实现(循环,if)
       (1)打印1100之内的整数,但数字中包含9的要跳过
       (2)每行输出5个满足条件的数,之间用空格分隔
       (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("");
           }
       }
}

执行结果如下:3840之间多了一个空行
.....省略......
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出现的次数
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)

5 个回复

正序浏览
感谢辛苦整理分享
回复 使用道具 举报
谢谢分享
回复 使用道具 举报
很有用,值得学习,感谢楼主分享
回复 使用道具 举报
dvb发刚回家更换
回复 使用道具 举报
武汉小姐姐,哪一期的呢
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马