课程章节介绍
大家好,今天我们来讲一讲Apex里静态成员和实例成员的区别,这个概念如果搞清楚了,写出来的代码会更干净、更高效。
首先,Apex里你可以有静态的方法、静态的变量,还能写静态的初始化代码块。但是注意一点:类本身不能是静态的,只有类里面的成员才能标成静态。而且这些静态的东西,只能放在最外层的类里,内部类是放不了静态成员的。
那么静态成员到底有什么特点呢?它们跟类绑在一起,而不是跟某个具体的对象绑在一起。意思就是说,哪怕你用这个类 new 了好几个对象,静态变量也只有一个副本,被所有这些对象共享。比如你有一个记录总数的静态变量,不管哪个对象去改它,大家看到的都是同一个数值。这个变量什么时候初始化呢?在类第一次被加载到内存的时候,只初始化一次。在同一个事务里,静态变量的值会一直保留着,直到事务结束。一旦事务结束,下个事务再进来,静态变量就重置了,重新开始。
再来看实例成员,它们就是跟每个具体的对象绑定的。每当你 new 一个对象,实例变量就会重新创建一份,每个对象都有自己独立的值。每次实例化对象的时候,实例初始化代码块都会运行,而且它是在构造函数之前执行的,你可以用它来做一些对象创建时的准备工作。
另外还有静态初始化代码块,它是用 static 关键字包裹的一段代码,也在类第一次被使用的时候运行,而且这辈子只运行这么一次。通常用来做一些一次性的设置,比如加载一些静态配置。
总结一下关键点:静态的东西,属于类,全局共享一份,在事务里持久,跨事务重置;实例的东西,属于对象,每创建一个对象就生成一份,跟着对象走。把这两者区分清楚,你在设计代码时就能更好地控制数据的作用范围和生命周期了。
这样讲,是不是清晰了很多呢?如果有疑问,随时提出来我们再讨论。
关键词
Apex
Salesforce
Developer Guide