17、IDEA断点调试、测试题


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
    }
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM