**断点调试的作用:**监控变量、快速发现问题。
本次用到的是加薪的例子:
员工加薪:
员工一年最多只能申请加薪四次,
加薪后的工资不能高于20000元
package case_learning;
public class Employee {
private int salary = 3000;//设置基本工资为3000
private int appealCount = 0;//申请加薪的次数
public void addSalary(int alpha) //加薪的方法,参数为申请的加薪金额
{
//this区分对象是局部/全局 /"++this……"方法addSalary被调用一次,申请就增加一次
if(this.salary+alpha<20000&&++this.appealCount<=4)
{
this.salary += alpha;
System.out.println("加薪申请成功!当前薪水:"+this.salary);
}
else
{
System.out.println("加薪申请失败!");
}
}
public static void main(String[] args) {
Employee emp = new Employee();
emp.addSalary(5000);
emp.addSalary(5000);
emp.addSalary(5000);
emp.addSalary(5000);
}
}
超出薪资限额
加薪申请成功!当前薪水:8000
加薪申请成功!当前薪水:13000
加薪申请成功!当前薪水:18000
加薪申请失败!
更改申请金额:
public static void main(String[] args) {
Employee emp = new Employee();
emp.addSalary(2000);
emp.addSalary(2000);
emp.addSalary(2000);
emp.addSalary(2000);
emp.addSalary(2000);
}
超出申请次数:
加薪申请成功!当前薪水:5000
加薪申请成功!当前薪水:7000
加薪申请成功!当前薪水:9000
加薪申请成功!当前薪水:11000
加薪申请失败!
但是
更改申请金额如下的时候:
public static void main(String[] args) {
Employee emp = new Employee();
emp.addSalary(5000);
emp.addSalary(5000);
emp.addSalary(5000);
emp.addSalary(5000);
emp.addSalary(1000);
}
结果为:
加薪申请成功!当前薪水:8000
加薪申请成功!当前薪水:13000
加薪申请成功!当前薪水:18000
加薪申请失败!
加薪申请成功!当前薪水:19000
在申请第四次超出限额失败后第五次依然可以成功
于是,出现了bug
断点调试,在这里右击鼠标插入断点:
点击这个小虫子
点击执行会出现:
然后按F6,会依次出现:
按F6第一次:
第二次:
第三次:
第四次:(未执行)
第五次:(本会失败)
原因是在第四次执行的时候,这条代码的后半部分并没有跑(出现了逻辑表达式的短路问题 “false&&” 短路语句,前面一个条件错误,后一个条件不执行)
if(this.salary+alpha<20000&&++this.appealCount<=4)
只需要把加薪方法中的代码改为:
public void addSalary(int alpha) //加薪的方法,参数为申请的加薪金额
{
//this区分对象是局部/全局 /"++this……"方法addSalary被调用一次,申请就增加一次
//if(this.salary+alpha<20000&&++this.appealCount<=4)
if (++this.appealCount>4)
{
System.out.println("到达最大申请次数,加薪失败!");
return; //终止
}
if(this.salary+alpha<20000)
{
this.salary += alpha;
System.out.println("加薪申请成功!当前薪水:"+this.salary);
}
else
{
System.out.println("加薪申请失败!");
}
}
运行结果:
加薪申请成功!当前薪水:8000
加薪申请成功!当前薪水:13000
加薪申请成功!当前薪水:18000
加薪申请失败!
到达最大申请次数,加薪失败!
可以再次按上面断点调试的方法走一遍运行过程(自行完成)
注意:第一次写完代码的时候务必要使用断点调试跑一边流程
java、js、存储过程皆可使用断点调试。