1.断点调试
一个实际需求
- 在开发中,新手程序员在查找错误时,这时老程序员就会温馨提示,可以用断点调试,一步一步地看源码执行的过程,从而发现错误所在
- 重要提示:在断点调试过程中,是运行状态,是以对象的运行类型来执行的
断点调试介绍
- 断点调试是指在程序的某一行设置一个断点,调试时,程序运行到这一行就会停住,然后就可以一步一步往下调试,调试的过程中可以看各个变量当前的值,出错的话,调试到出错的代码行即显示错误,停下,进行分析从而找到这个Bug
- 断点调试时程序员必须掌握的技能
- 断点调试也能帮助我们查看Java底层源代码的执行过程,提高程序员的Java水平
断点调试的快捷键
- F7 跳入 F8 跳过 shift+F8 跳出 F9 resume执行到下一个断点
- F7:跳入方法内 F8:逐行执行代码 shift+F8:跳出方法
断点调试的应用案例
package com.logic.debug_;public class Debug01 {public static void main(String[] args) {//演示逐行执行代码int sum = 0;for (int i = 0; i < 5; i++) {sum += i;System.out.println("i = " + i);System.out.println("sum = " + sum);}System.out.println("退出for循环...");}
}
package com.logic.debug_;public class Debug02 {public static void main(String[] args) {//看一下数组越界的异常int[] arr = {1, 10, -1};for (int i = 0; i <= arr.length; i++) {System.out.println(arr[i]);}System.out.println("退出for循环...");}
}
package com.logic.debug_;import java.lang.reflect.Array;
import java.util.Arrays;public class Debug03 {public static void main(String[] args) {int[] arr = {1, -1, 10, -20, 100};//我们看看Arrays.sort方法底层实现->Debug//演示如何追源码 看看Java设计者是怎么实现的//小技巧 将光标放在某个变量上 可以看到最新的数据Arrays.sort(arr);for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + "\t");}}
}
package com.logic.debug_;import java.lang.reflect.Array;
import java.util.Arrays;//演示执行到下一个断点,同时支持动态的下断点/去断点
public class Debug04 {public static void main(String[] args) {int[] arr = {1, -1, 10, -20, 100};Arrays.sort(arr);for (int i = 0; i < arr.length; i++) {System.out.println(arr[i] + "\t");}System.out.println("hello100");System.out.println("hello200");System.out.println("hello300");System.out.println("hello400");System.out.println("hello500");System.out.println("hello600");System.out.println("hello700");}
}
package com.logic.debug_;//使用断点调试的方法 追踪下一个对象创建的过程 Person[name age constructor]
//使用断点调试 查看动态绑定机制的如何工作
public class DebugExercise {public static void main(String[] args) {//创建对象的流程//1.加载Person类信息//2.初始化 默认初始化 显式初始化 构造器初始化//3.返回对象的地址Person person = new Person(20, "logic");System.out.println(person);}
}class Person {public String name;public int age;public Person(int age, String name) {this.age = age;this.name = name;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}
}
package com.logic.poly_.dynamic_;public class DynamicBinding {public static void main(String[] args) {A a = new B();System.out.println(a.sum());System.out.println(a.sum1());}
}class A {public int i = 10;public int sum() {return getI() + 10;}public int sum1() {return i + 10;}public int getI() {return i;}
}class B extends A {public int i = 20;// public int sum() {
// return i + 20;
// }public int getI() {return i;}
// public int sum1() {
// return i + 10;
// }
}