Apex的静态和实例变量、方法和初始化代码

特点

静态方法、变量和初始化代码具有这些特性

  • 与一个类相关联。
  • 只允许在外部类。
  • 仅在加载类时被初始化。
  • 不会作为Visualforce页面的视图状态的一部分传输。

实例方法、成员变量和初始化代码具有这些特征

  • 与特定对象相关联。
  • 没有定义修饰符。
  • 是用声明它们的类中实例化的每个对象创建的。

使用静态变量和方法

触发器中定义的静态变量不会在同一事务中的不同触发器上下文之间保留其值,例如在插入前和插入后调用之间。相反,在类中定义静态变量,以便触发器可以访问这些类成员变量并检查它们的静态值。

例如,使用该类的触发器可以选择性地使触发器的第一次运行失败。

public class P { 
   public static boolean firstRun = true; 
}
trigger T1 on Account (before delete, after delete, after undelete) { 
       if(Trigger.isBefore){
          if(Trigger.isDelete){
             if(p.firstRun){
                 Trigger.old[0].addError('Before Account Delete Error');
                  p.firstRun=false;
              } 
           }
        }
}

类静态变量不能通过该类的实例访问,如果类MyClass有一个静态变量myStaticVariable,并且myClassInstance是MyClass的实例,则为myClassInstance.myStaticVariable不是合法表达式。

实例方法也是如此。如果myStaticMethod()是静态方法,则为myClassInstance.myStaticMethod()不合法。正确方法是使用类MyClass引用这些静态标识符:MyClass.myStaticVariable和MyClass.myStaticMethod()。

局部变量名在类名之前计算。如果局部变量与类同名,则局部变量将隐藏同名类上的方法和变量。例如,如果注释掉String行,则此方法有效。但如果包含String行,则该方法无法编译,因为Salesforce报告该方法不存在或签名不正确。

public static void method() {
String Database = '';
Database.insert(new Account());
}

内部类的行为类似于静态Java内部类,但不需要static关键字。内部类可以像外部类一样具有实例成员变量,但并没有指向外部类实例的隐式指针(使用this关键字)。

使用实例变量和方法

实例方法和成员变量由类的实例(即对象)使用。实例成员变量在类内声明,但不在方法内声明。实例方法通常使用实例成员变量来影响方法的行为。
假设您希望有一个类来收集二维点并将其绘制在图形上。以下骨架类使用成员变量保存点列表,使用内部类管理二维点列表。

public class Plotter {

    // This inner class manages the points
    class Point {
        Double x;
        Double y;

        Point(Double x, Double y) {
             this.x = x;
             this.y = y;
        }
        Double getXCoordinate() {
             return x;
        }

        Double getYCoordinate() {
             return y;
        }
    }

    List points = new List();

    public void plot(Double x, Double y) {
        points.add(new Point(x, y));
    }
    
    // The following method takes the list of points and does something with them
    public void render() {
    }
}

使用初始化代码

你可能感兴趣的:(Salesforce,开发语言)