IDEA调试器的使用
一、常用操作

二、通过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());因此在该行处设置断点

可以看到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循环开始之前

多线程中不好观察每个线程的运行情况,因此需要System.out来观察
而在单线程程序中不用打印,在调试器界面就可以看见name数组中所有的值

可以看见这些数字都大于英文字符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]); }
3. 其他操作
如果想查看第25个名字的输出情况

-
不用打System.out,也不需要把调试器下一步25次
对断点右键输入
i == 25
点击下一步,调试器会在断点处停止,也就是
i == 25时停下
想观察某个变量在执行中的情况


浙公网安备 33010602011771号