上QQ阅读APP看书,第一时间看更新
1.2.1 断点和放行
先简单介绍一下Debug,为了形象地表达,笔者比较喜欢打比方。断点就相当于哨兵,他在某行看守,一旦程序运行到这里,他马上吹哨喊“停”,然后程序就乖乖地一动不动。之后由五位放行官“下、蓝、红、出、至”来放行程序。在面板中图标依次为,说明如下:
下:执行完本行,停在下一行。
蓝:如有可进入的方法,则进入(非系统)。
红:如有可进入的方法,则进入(含系统)。
出:直至当前所处的方法出栈。
至:直至运行到当前光标位。
例如,在MyHomePage实例化处加上断点(哨兵),Debug模式运行后程序会停在这里,并且将此行高亮显示,模拟器的界面一片空白;
为了探究MyHomePage构造函数的运行情况,此时可以使用蓝放行官(简称“蓝放”)。下面是两次蓝放的情况,第一次进入构造方法,此时成员变量title并未被赋值。第二次执行没有任何跳转,但title被赋值了。
这说明Dart语法对于{this.属性}在构造时会根据入参进行自动赋值。而且这种形式支持在使用时通过属性名进行传参,如MyHomePage(属性名:入参)。这是Dart的一颗很甜的语法糖,对比Java、C++等对成员变量的初始化,可谓优雅很多。
另外一点,super(key:key)是什么?继续蓝放会走入父类的构造,很明显是将key成员变量交给父类,即StatefulWidget,之后StatefulWidget传给了Widget,Widget进行key的接收。这里的super是使用父类构造函数对成员变量进行初始化: