IDEA调试器的使用

一、常用操作

image-20201209120502148

二、通过Debug调试

随机命名程序

public class Test01 {
    public static void main(String[] args) {
        String[] names = new String[100];
        Random random = new Random(42);
        int n = random.nextInt(100);
        for (int i = 0; i < n; i++) {
            StringBuilder man = new StringBuilder();
            int len = random.nextInt(20)+1;
            for (int j = 0; j < len; j++) {
                man.append((char)random.nextInt());
            }
            names[i] = man.toString();
        }

        for (String name : names) {
            System.out.println(name.toUpperCase());
        }
    }
}

输出

믡쀨㳤뭋
蕭檾ಚ枽韜躙
泸븠坔䀏ꇣჱ뱯?뢃??௜
괖䞌僴奉叝圚翲㑿禙闺ꐲⳘ氂덞麂苮짭緯
ڛ䚶ꏳʱ⏭㸨鈑䍵朣쒶쫊㚧蒇챒
ퟕ삼깯⌿둷뼬ꢛ꧚㲻圊뮵ॹᮃ傻
腤
䃭Ğ톣䇻
ꍝ実郇᪀뗆
?訮Ꙋ侑㒉窠쵝ឩ섹柛꘯嶪יִ땷儔
弐㷛돇戟⌽⸌臆
抾湸∷뇸㸸
ᤇ㰢咴
妹潼呸脡跀ꊻꏅ滧롣킻ྡྷ듶
?ヵ鐾
뵦Ⓔꊦ?㕶畱캾㱌㌃ﴘ톩
聤
鏍?佪Ӧ
刊㐙립䶉啉㐂㊼脽䞪⒥ꓯǬ熓巰
皸֗ᘍ왊䀵Ӕ
靇淛銏ꦢḜ▣泹
廊懫齓鞕및⦝섹辍ㄺꚐ圹서뺂븮⢦ၖ麫
肂肢୰묋괬ꆦ폋勣省卦噕
೧눼ᳳ㆔Ṽ⯞癭ᧀ眒捆㾄ᦃ೪胒槢嚺ᕞ
⭷籗ꪝꗺ㻰苰䋑Ζ≒隗䎆ڼ䆝睈୩뵾딽೾呔
쨗ꁥ࿷꣟櫓
ⴶ녹飋㾽牁?冷
헗啫ᷗ
盧??䪻腜ᜰ䊢鯲玓㏕㝀谫㜅嶐フ
Ꚍ咆㩛丫
Exception in thread "main" java.lang.NullPointerException
	at com.shelton.Test.Test01.main(Test01.java:23)
  • 出现了两个问题
    • 名字全部是乱码
    • 抛出了空指针异常
      • 在调用引用对象的方法时,对象的值为null,会抛出空指针异常

1. 解决空指针异常

IDEA提示在23行出现空指针异常System.out.println(name.toUpperCase());因此在该行处设置断点

image-20201208212801796

可以看到n的值为30,也就是说names数组中剩余70个字符串都为null

而我们的遍历foreach方式会把names数组全部遍历

for (String name : names) {
	System.out.println(name.toUpperCase());
}

因此修改为游标遍历

for (int i = 0; i<n ;i++) {
    System.out.println(name[i].toUpperCase());
}

修改完后解决了抛出空指针异常的问题

2. 解决名字为乱码的问题

为了查看list中全部的名字,因此将断点设置在打印for循环开始之前

image-20201209112605297

多线程中不好观察每个线程的运行情况,因此需要System.out来观察

而在单线程程序中不用打印,在调试器界面就可以看见name数组中所有的值

image-20201208213947128

可以看见这些数字都大于英文字符ASCII码的范围(大写65~90, 小写97~122)

  • 修改了三处代码

    //名字改到合适的长度
    int len = random.nextInt(4) + 3;
    
    for (int j = 0; j < len; j++) {
        //name的字符
        if(j==0){
            //首字母大写
            man.append((char)(random.nextInt(26)+'A'));
        } else {
            man.append((char)(random.nextInt(26)+'a'));
        }
    }
    
    for (int i = 0; i<n ;i++) {
        System.out.println("第"+i+"个名字:\t"+name[i]);
    }
    

    image-20201209112535646

3. 其他操作

如果想查看第25个名字的输出情况

image-20201209113507925

  • 不用打System.out,也不需要把调试器下一步25次

    对断点右键输入i == 25

    image-20201209114241062

    点击下一步,调试器会在断点处停止,也就是i == 25 时停下

想观察某个变量在执行中的情况

image-20201209114705703

posted @ 2020-12-09 12:06  球球z  阅读(225)  评论(0)    收藏  举报