
120、类构建器与析构器那天半夜被电话叫醒,说某个批量导数据的程序突然崩了,报错信息指向一个自定义类的方法。我远程连上去一看,问题出在类被实例化之后,内部一个计数器完全没有初始化,导致后续所有累加逻辑全乱套。代码是上一个同事写的,他把初始化动作放在了一个普通的method里,每次调用前手动执行,但只要有人漏调一次,数据就错得离谱。这种问题最容易在交接代码时爆发——你根本不知道哪些“约定俗成”的步骤被新来的人忽略了。当时我就在想,如果当时类里写了个constructor,哪会有这破事。ABAP里类的构建器(constructor)不是可选项,它是你类生命周期里第一道防线。它分两种,实例构建器(instance constructor,方法名constructor)和静态构建器(class constructor,方法名class_constructor)。先说实例构建器,它在你每次CREATE OBJECT的时候自动触发,不管你是直接在代码里建对象,还是通过CREATE OBJECT带参数,它都会先跑一遍。这就逼着你把那些“必须一上来就好的东西”放在里面,比如状态初始化、内部表清空、默认值设定。别为了省事把初始化逻辑塞到一个单独的初始化方法里,然后指望所有人都记得调——现实会教你做人。静态构建器class_constructor只在整个程序里对某个类触发一次,具体来说,是当这个类的静态属性、静态方法或者某个实例第一次被访问时,ABAP运行时环境会先把它执行掉。注意,如果是通过类属性或者方法访问,甚至还没创建实例,静态构建器也会被调用。这个机制特别适合