课程章节介绍
各位同学,大家好!
今天我们来看一个很基础但又特别重要的知识点——在Apex里怎么声明变量和方法,以及当你把数据传给方法时,里面到底发生了什么。
好,先说变量。
想要在Apex里创建一个变量,你需要告诉系统几件事:
第一,可选的修饰符,比如public(公开)、final(不可变)或者static(静态)。这些不是必须的,有需要才加。
第二,就是这个变量要存什么类型的数据,是整数Integer,还是字符串String,又或是自定义的对象。
第三,给变量起个名字,然后可以选择性地给它一个初始值。
比如,你可以写:
`public Integer count = 0;`
意思就是声明一个公开的整数变量叫count,初始值0。很简单对吧。
再来看方法。
方法就像是一个能执行特定任务的小工具箱。声明它的时候,同样也要逐步告诉系统你的意图:
先是可选的修饰符,常见的有public、protected(受保护)、override(覆盖)、static等等。接着就是方法的返回数据类型,也就是说这个方法执行完后,会还给调用者一个什么类型的结果。如果它只是去干活,不返回任何东西,那就用关键字 `void` 来表示没有返回值。
然后就是参数了。参数要写在括号里,每个参数前面都得带数据类型,多个参数用逗号隔开。Apex规定一个方法的输入参数最多可以到32个,这对绝大多数场景都够用了。
最后,用一对花括号把方法的主体逻辑包起来,告诉它具体做什么。
举个例子:
`public Integer add(Integer a, Integer b) { return a + b; }`
这个add方法接收两个整数,计算它们的和,然后返回一个整数结果。
好,现在大家重点要理解的是参数传递时的行为,这点很多初学者容易搞混。
Apex在这里分两种情况:
第一种,原始数据类型,也就是Integer、String、Boolean、Date这些。当你把它们作为参数传给方法时,传递的是值的副本。也就是说,方法内部对这个参数做的任何修改,都只活在方法内部,外面原始的那个变量的值并不会跟着变。这叫做“按值传递”。
第二种,非原始类型,比如sObject(像Account、Contact这些)、List(列表)、Map这些。它们传递的是引用,你可以理解成把“遥控器”交给了方法,而不是把整个对象复制一份。
这样你就拥有了操作原数据的权力——在方法里面,你可以直接修改这个对象里的字段值,比如改一改Account的Name、Phone,这些改动是会影响到外部的。
但这里有一个重要的限制:你不能把方法里的这个参数引用完全指向一个新的对象。什么意思呢?假设方法接收到一个Account对象,你可以在里面更新它的字段,但不能把它重新赋值为另一个新new出来的Account对象,如果你这么做了,那也只是改变了局部这个遥控器的指向,并不会影响到外部原来的引用。
那我们来想一个场景:你写了个方法,传入一个Account列表,你想给列表里每个账户的Rating设成‘Hot’,这个完全没问题,因为你在修改字段。但如果你在方法内部新创建一个空列表,然后把参数指向这个空列表,想让外边的引用也变空,这是做不到的。非基元类型是引用传递,但只允许你修改内容,不允许你替换引用本身。
这样一来,在日常开发中,你就能很清楚地知道,什么时候需要小心别在方法里不小心改了对象,什么时候可以利用这个特性去批量更新数据。
好了,今天就先讲到这儿。变量声明的格式、方法定义的要素,以及参数传递的两种行为,你只要动手写几个例子,马上就能掌握了。下次我们继续深入Apex其他好玩的地方。
关键词
Apex
Salesforce
Developer Guide