本人在作接口测试的时候,须要用一个公共类来把全部的执行的代码,而后这个公共类有hsot和hosttype等属性来区分各个测试环境,而后在去不一样的地方取用例和请求接口。在给这些属性复制的时候,我是经过不一样测试环境新建不一样的配置文件,而后执行每一个环境的时候让只加载须要测试的环境的配置文件来实现管理测试环境的。中间遇到了一些坑,主要就是对java代码执行循序,特别是在main方法以前的代码执行顺序了解不深刻致使的,中间有多个继承关系也有点扰乱了思路。下面分享一下本身这个错误的复现步骤。java
首先放一下一个单独的类的代码执行顺序,下面是代码:编程
package practice; public class Cbc { public static Cbc cbc = new Cbc(); public static void main(String[] args) { System.out.println("进入程序入口了!"); } public Cbc() { System.out.println("我是Cbc构造方法!"); } static { System.out.println("我是Cbc静态代码块!"); } }
下面是执行结果:json
我是Cbc构造方法! 我是Cbc静态代码块! 进入程序入口了!框架
这个就比较简单了,先执行静态变量赋值,而后执行静态代码块,而后再去执行main方法。 下面是多个继承的状况,Cba继承于Bbc,Bbc继承于Abc,三个类的代码都是类似的,分享以下:性能
package practice; public class Cbc extends Bbc{ public static Cbc cbc = new Cbc(); public static void main(String[] args) { System.out.println("进入程序入口了!"); } public Cbc() { System.out.println("我是Cbc构造方法!"); } static { System.out.println("我是Cbc静态代码块!"); } } class Bbc extends Abc { public static Bbc bbc = new Bbc(); public Bbc() { System.out.println("我是Bbc构造方法!"); } static { System.out.println("我是Bbc静态代码块!"); } } class Abc { public static Abc abc = new Abc(); public Abc() { System.out.println("我是Abc构造方法!"); } static { System.out.println("我是Abc静态代码块!"); } }
下面是执行结果:测试
我是Abc构造方法! 我是Abc静态代码块! 我是Abc构造方法! 我是Bbc构造方法! 我是Bbc静态代码块! 我是Abc构造方法! 我是Bbc构造方法! 我是Cbc构造方法! 我是Cbc静态代码块! 进入程序入口了!命令行
能够看出来,先执行Abc,再去执行Bbc,再去执行Cbc。 知道了这个逻辑,就能够作一些事情,好比Abc有一个int对象num的值是1,是公用默认的,可是我想再某一个特殊(Cbc)状况下使用num值是2,那么我能够Bbc里面对num从新赋值,使得我在使用Cbc这个状况下时候,num值是2,而在其余状况时,num的值依然是1。3d
下面是测试代码:code
public class Cbc extends Bbc { public static void main(String[] args) { System.out.println("进入程序入口了!"); System.out.println("num的值:" + num); } } class Bbc extends Abc { static { num = 2; } } class Abc { public static int num = 1; }
下面是执行结果:对象
进入程序入口了! num的值:2