IDEA断点调试
1、设置断点
选择要设置断点的代码行,在行号的区域后面单击左键即可。
2、开启调试会话
点击Debug按钮开启调试。
IDEA下方出现Debug视图,红色箭头指向的是现在调试程序停留的代码行,方法f2()中程序的第23行。
Frames是程序的方法调用栈区,在这个区域显示了程序执行到断点处所调用过的方法,越下面的方法越早被调用。
3、单步调试
3.1、step over
点击红色箭头指向的按钮,程序向下执行一行,(如果当前行有方法调用,这个方法将被执行完毕返回,然后到下一行)
3.2、step into
点击红色箭头指向的按钮,程序向下执行一行,如果该行有自定义方法,则进入自定义方法的逻辑(不会进入官方类库的方法)。
3.3、force step into
该按钮在调试时能进入任何方法。
3.4、step out
如果在调试的时候,step into / force step into进入了一个方法,并觉得该方法没有问题,你就可以使用step out跳出该方法,返回该方法被调用处的下一行语句,注意:该方法已执行完毕。
3.5、Drop Frame
点击该按钮后,你将返回到当前方法的调用处重新执行,并且所有上下文变量都回到那个时候,只要调用链中还有上级方法,可以跳到其中的任何一个方法。
4、高级调试
4.1、跨断点调试
设置多个断点开始调试。
想移动到下一个断点,点击红色箭头指向的按钮。
4.2、设置变量值
这个功能可以更加快速的跳出循环语句。
4.3、跳到断点处和跳到光标所在行
纠错
1、下面关于Java中包的叙述正确的是 ACD
A、在Java中可以使用import语句导入包
B、在Java中可以使用package语句导入包
C、位于同一个包中的类,不需要导入包就可以直接访问
D、不同的包中可以出现类名相同的类
在Java中package用于定义包,import用于导入包。
2、下列有关抽象类的叙述正确的是 C
A、抽象类中一定含有抽象方法
B、抽象类既能被实例化也能被继承
C、抽象类的声明必须包含abstract关键字
D、抽象类中不能有构造方法
3、下列关于构造函数的说法正确的是 AB
A、方法名必须与类名相同
B、使用new关键字创建对象时,Java虚拟机会自动调用构造函数
C、我们在定义一个类时,必须要声明至少一个构造函数
D、构造函数中不能使用return语句
一个类默认会存在一个无参的构造函数,所以可以不用声明;
构造函数中可以使用return语句,但是只能是return;
4、关于继承,以下说法正确的是 AD
A、Java中只支持单继承,一个类只能继承一个类,但是可以有多个子类
B、一个类如果没有自己写无参构造方法,那么子类将无法继承
C、子类可以当父类用,父类不可以当子类用
D、子类重写父类方法时访问权限不能更低
在继承中,父类的构造方法不能继承,但是子类可以通过super关键字进行调用
子类可以当父类用,叫做多态;父类可以当子类用,应该叫向下转型。
5、下列说法正确的是 ABD
A、实例方法可以直接调用超类的实例方法
B、实例方法可以直接调用超类的类方法
C、实例方法可以直接调用其他类的实例方法
D、实例方法可以直接调用本类的类方法
实例方法调用其他类的实例方法,必须先创建对象,通过对象调用
6、小芳的妈妈每天给她2.5元钱,她都会存起来,但是,每当这一天是存钱的第5天或者5的倍数的话,她都会花去6元钱,请问,经过多少天,小芳才可以存到100元钱。
package org.westos.demo2;
/**
* @author lwj
* @date 2020/5/8 20:36
*/
public class Test {
public static void main(String[] args) {
double sum = 0;
double dayOfMoney = 2.5;
int cost = 6;
int index = 0;
int total = 100;
while (sum < total) {
index++;
sum += dayOfMoney;
if (index % 5 == 0) {
sum -= cost;
}
}
System.out.println(index);
//74
}
}
7、求 s=a+aa+aaa+aaaa+aa...a 的和,其中a是一个数字,例如
2+22+222+2222+2.....2 最大有几个2由键盘录入得到
例如提示用户 请输入你要求和的数字
用户输入的是3
请输入你要的最大的数字个数
用户输入的是5
那么就是求 3+33+333+3333+33333 的和。
我的方法(low)
package org.westos.demo2;
import java.util.Scanner;
/**
* @author lwj
* @date 2020/5/8 20:40
*/
public class Demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要求和的数字:");
int num = sc.nextInt();
System.out.println("请输入你要的最大数字的个数:");
int length = sc.nextInt();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; i++) {
sb.append(num);
}
String s = sb.toString();
int max = Integer.parseInt(s);
int add = add(max);
System.out.println(add);
//37035
}
public static int add(int num) {
if (num / 10 == 0) {
return num;
}
return num + add(num / 10);
}
}
//3
//5
//37035
老师的方法(时间复杂度、空间复杂度小)
class Demo2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要求和的数字:");
int num = sc.nextInt();
System.out.println("请输入你要的最大数字的个数:");
int length = sc.nextInt();
//3 + 33 + 333 + 3333 + 33333
int temp = 0;
//代表每个元素
int sum = 0;
for (int i = 0; i < length; i++) {
temp += num;
sum += temp;
num *= 10;
}
System.out.println(sum);
//37035
}
}