断点定位

断点定位

请问,断点定位在哪一句,或者哪几句,才能遍历输出的每一句?


想要看清楚,程序的运行顺序,哪一句,先显示;哪一句,后显示。


相关程序

Code2_14

public class Code2_14 {
	// 创建Code类的构造块(构造块)
	{
		System.out.println("Code构造块");
	}

	// 创建Code类的静态代码块(静态代码块)
	static {
		System.out.println("Code的静态代码块");
	}

	// 创建Code类的构造方法(构造方法)
	public Code2_14() {
		System.out.println("Code的构造方法");
	}
}

CodeBlock2_14

public class CodeBlock2_14 {
	// 创建CodeBlock的构造块
	{
		System.out.println("CodeBlock的构造块");
	}

	// 创建CodeBlock的静态代码块
	static {
		System.out.println("CodeBlock的静态代码块");
	}

	// 创建CodeBlock的构造方法
	public CodeBlock2_14() {
		System.out.println("CodeBlock的构造方法");
	}

	public static void main(String[] args) {
		// 编写代码测试运行优先顺序,运行结果参见效果图

		System.out.println("CodeBlock的主方法");
		System.out.println("产生Code类实例对象");
		Code2_14 cd = new Code2_14();
		System.out.println("产生CodeBlock类实例对象");
		CodeBlock2_14 cb = new CodeBlock2_14();
	}
}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小黑 2022-07-06 10:29:21

同学你好,可以将断点定位在CodeBlock2_14类中的静态代码块中的System.out.println("CodeBlock的静态代码块");,然后程序以Dbug的方式运行,然后按键盘上的F8,可以在控制台中观察程序的输出语句,就可以清楚程序的运行顺序。

祝学习愉快!

  • 提问者 EllaAzure #1

    请问,

    1、为什么定位在System.out.println("CodeBlock的静态代码块");,就能从头运行程序?


    2、编译器按下debug,再按step into(F5),单步只前进了3步,也显示了3句,就停止了,为什么?↓

    https://img1.sycdn.imooc.com//climg/62c512cf0830eb6014400860.jpg


    3、编译器按下debug,再按step over(F6),单步只前进了2步,就完全显示出了9句,为什么?↓

    https://img1.sycdn.imooc.com//climg/62c512f308c67cde14400860.jpg


    4、编译器按下debug,再按键盘上F8,就直接显示了9句,为什么?↓

    https://img1.sycdn.imooc.com//climg/62c5131c0830d57014400860.jpg


    2022-07-06 12:46:01
  • 好帮手慕小黑 回复 提问者 EllaAzure #2

    同学你好~

    1. 定位在System.out.println("CodeBlock的静态代码块");,就能从头运行程序,原因是 static的特点:(1)static静态代码块会随着类的加载而加载,所以可以显示出所有输出语句。

    step into:单步执行,遇到方法就进入并且继续单步执行(简而言之,进入方法)。

    step over:在单步执行时,在方法内遇到方法时不会进入方法内单步执行,而是将方法整个执行完再停止,也就是把方法整个作为一步。(简而言之,越过方法,但方法会执行)。

    step out:当单步执行到方法内时,用step out就可以执行完方法余下部分,如果程序中有多个断点,会跳到下一个断点,如果没有断点会将程序执行完毕。

    2.对于第二个问题,老师的操作步骤如下:

    (1)编译器按下debug,此时debug在第11行;

    (2)按step into(F5),会进入PrintStream源码,当源码之行结束,会在控制台输出静态代码中的语句;

    (3)按两次step into(F5),控制台输出主方法中的语句;

    (4)当在CodeBlock2_14类中的第24行时,按多次step into(F5),就会进入到Code2_14类中的静态代码块,输出静态代码块语句;

    (5)按step into(F5),会进入构造代码块,输出构造代码块语句;

    (6)直到程序debug完没有出现同学说的停止。

    如果同学按照老师的步骤依然出现停止的情况,请同学详细描述同学的步骤。

    3.对于第三个问题,在debug时,在第11行停止,按step over(F6)此时执行完静态代码块,然后按step over(F6),因为没有断点,所以会将代码中所有构造方法执行完,并不会进入到方法中。

    4.对于第四个问题,在debug时,程序会跳到下一个断点,如果没有断点程序就会运行完毕。

    祝学习愉快!

    2022-07-06 16:57:29
  • 提问者 EllaAzure 回复 好帮手慕小黑 #3

    还是第2个问题,我的操作步骤如下,


    1、编译器按下debug,停留在第11行,按下step into(F5),输出“CodeBlock的静态代码块”;


    2、按step into(F5),跳至第22行System.out.println,输出“CodeBlock的主方法”;


    3、按step into(F5),跳至第23行System.out.println,输出“产生Code类实例对象”;


    4、按step into(F5),跳至第24行Code2_14 cd = new Code2_14(); 


    不管再按哪个键,都是无效的,其它应该输出语句也不会出现,调试就结束了!为什么? ↓


    https://img1.sycdn.imooc.com//climg/62c65b6908de5e6914400860.jpg

    2022-07-07 12:07:02
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师