Methods 何时在Salesforce中将方法声明为静态

Methods 何时在Salesforce中将方法声明为静态,methods,static,salesforce,Methods,Static,Salesforce,我想知道将一个方法声明为静态的含义是什么。我理解,当声明为静态时,我可以使用该方法,而无需实例化该类。但是我什么时候应该将一个方法声明为静态的,以及当我将一个方法声明为静态的时候会有什么影响呢 提前感谢您对本主题的任何帮助/澄清 在Salesforce的Apex中使用静态方法的原因与Java或其他相关的面向对象语言相同。简而言之,当方法应用于类而不是该类的实例时,请使用static。例如,我将参考以下问题的答案: 在类Car中,可能有一个方法doubleconvertMpgToKpl(doubl

我想知道将一个方法声明为静态的含义是什么。我理解,当声明为静态时,我可以使用该方法,而无需实例化该类。但是我什么时候应该将一个方法声明为静态的,以及当我将一个方法声明为静态的时候会有什么影响呢


提前感谢您对本主题的任何帮助/澄清

在Salesforce的Apex中使用静态方法的原因与Java或其他相关的面向对象语言相同。简而言之,当方法应用于类而不是该类的实例时,请使用
static
。例如,我将参考以下问题的答案:

在类
Car
中,可能有一个方法double
convertMpgToKpl(double
mpg)
这将是静态的,因为人们可能想知道35mpg是什么 即使从来没有人造过汽车,也会皈依。但是空虚
设置里程数(双英里数)
(设置一个特定车辆的效率
Car
)不能是静态的,因为调用该方法是不可想象的 在建造任何
汽车之前

有关更多示例,请参见:

更新: 我意识到,如果您是从Salesforce来学习编程和OO设计,上面的示例可能有点抽象,所以让我用下面的示例重新表述一下:

正如您可能期望的那样,这个类表示世界各地的时区。此类实例(即
时区
对象)表示各个命名时区(例如EST、CST、PST等)。请注意这里的区别——类定义了时区的一般含义(例如,时间偏移量为特定小时数的已定义地球区域),但类的实例(即对象)定义了一个特定时区。例如,PST实例将包含关于自身的数据,如
displayName=“Pacific Standard Time”
offset=-8
,您可以分别通过其实例方法
getDisplayName()
getOffset()
访问这些数据。另一方面,如果您想获得关于时区的一般信息,可以在
TimeZone
类上使用
static
方法。例如,APEX定义了<代码> static > /GoTimeZONE()/<代码>在<代码>时区类中,您可以使用id来查找<代码>时区< /代码>实例。将这一点放在一起,考虑此示例以获得PST:< /P>的显示名称。
TimeZone pst   = TimeZone.getTimeZone('PST');  // static method call
String pstName = pst.getDisplayName();         // instance method call
请注意,第一行是如何获取包含PST特定信息的
时区的实例的,而第二行实际上是如何获取该信息的


希望这能澄清问题,不会让事情变得更混乱。总之,如果您正在访问数据或对某个特定的数据实例(无论是汽车还是时区)执行某些操作,则需要使用实例方法。另一方面,如果您正在访问数据或对整个类别的数据(无论是汽车还是时区)执行某些操作,您将需要使用
静态方法。

感谢您的回复。抱歉太厚了,所以在上面的示例中,对于类Car,我为什么不能将方法setmiliege声明为static?因为这样
setmiliege
就无法访问特定汽车的里程数。为了访问特定汽车的数据,它需要是一个实例方法。如果它是
静态的
,那就意味着里程数是所有汽车在全球共享的,我们知道这是不正确的;希望这能让事情澄清一点。嗨,非常感谢你的解释。我想我终于开始理解实例方法和静态方法之间的区别了。如果我弄错了,请纠正我,但是只有当您想要对整个类进行更改时,才会将方法声明为静态的。这也意味着使用此方法的任何其他类的值都将更新。但是,如果将一个方法简单地声明为“public void myMethod”,那么对该类的任何更改都只会影响该实例,而不会影响整个类。为了真正理解它,我建议创建一些带有静态和实例字段/方法的虚拟类,然后尝试使用该类并查看其行为。例如,尝试直接在类上调用字段/方法(不创建新的
实例)。哪些是编译的,哪些不是?现在尝试使用
new
关键字创建的类实例,并进行相同的练习。拥有实例后,请尝试更新一个实例上的字段,然后从另一个实例读取该字段。使用
static
关键字对该行为有何影响?