zoukankan      html  css  js  c++  java
  • Apex基础之Classes

    Apex的Class与Java中的用法类似,Class是objects的模板,objects都是Class的实例,Apex中可以定义外部类和内部类,内部类不能嵌套,只能定义一层,如:

    public class myOuterClass {
        // Additional myOuterClass code here
        class myInnerClass {
        // myInnerClass code here
        }
    }

    上面的类定义中,需要注意:

    1)外部类必须要指定其访问修饰符(access modifiers)

    2)不用指定内部类的访问修饰符,默认访问权限是private

    3)内部类中不能有static修饰的变量和方法

    Apex类定义的模板如下:

    private | public | global
    [virtual | abstract | with sharing | without sharing]
    class ClassName [implements InterfaceNameList] [extends ClassName]
    {
        // The body of the class
    }

    Apex类的访问修饰符

    1)private  指定了private访问权限的类只能在本地使用,只能在声明其定义的代码块中使用,内部类的默认访问权限是private,private只能与内部类的定义一起使用

    2)public   public的类在本application和namespace上可见

    3)global   global的类在任何地方都能被使用,被webService修饰符修饰的方法必须被global修饰,如果一个方法或者内部类被global修饰,那么包含其定义的Class必须也要被global修饰

    4)with sharing 和without sharing修饰符是可选的,指定类的共享模式

    5)virtual   当一个类被virtual修饰,表明其可以被继承和重写,如果一个类没有被virtual修饰,那么其方法就不能被override关键字重写

    6)abstract   抽象类关键字,部分方法只提供方法声明,不提供定义,需要继承该类重写抽象方法

    类变量

    [public | private | protected | global] [final] [static] data_type variable_name [= value]

    类方法

    [public | private | protected | global] [override] [static] data_type method_name
    (input parameters)
    {
        // The body of the method
    }

    方法参数的传递

    对于原始数据类型,作为参数传递给方法时采用值传递的方式,即将实参的值复制并赋值给形参,当时实参形参并不指向相同的内存地址,所以对形参值改变,方法返回时并不能改变实参值;对于非原始数据类型的数据,如collections,采用引用传递,即实参形参引用相同的地址,对形参内存地址中值的改变也会改变实参内存地址中的值,但是如果形参指向了新的内存地址,那么实参对新地址存值的改变不会对实参值产生影响

    构造方法

    Apex类构造方法需要注意的是,下面两个构造方法属于不同的方法

    public class Leads{
        // A constructor with two arguments
        public Leads (String email, Boolean call) {}
        // Though this constructor has the same arguments as the
        // one above, they are in a different order, so this is legal
        public Leads (Boolean call, String email) {}
    }     

    类变量和类方法的访问权限

    1)private    默认访问权限,只能在本类内部使用

    2)protected     在本类的所有内部类中可见,在继承了本类的所有子类中可见,protected修饰符只能用来修饰类变量和类方法

    3)public     在本application和namespace中可见,Apex中的public与Java中的不一样,Apex中的public只在当前application中可见,global应该与Java中的public范围相似

    4)global     可以被外部应用使用,如果一个方法被global修饰,那么其类也要被global修饰

    Initialization Code

    Initialization Code是一个代码块,形如:

    [static] {
        //code body
    }

    Initialization Code先于构造函数被执行,静态代码块用来初始化一些静态成员变量,只在类加载是调用一次

    Apex属性

    Apex属性与C#中的属性用法一样,类似于Apex变量,但是属性可以在数据被赋值和被返回时进行额外的操作,如验证数据,更改其他变量的值,调用方法

    Apex属性定义中包含get、set访问器的代码块,只实现了get访问器的属性是只读的,只实现了set访问器的属性是只写的,两个访问器都实现则属性可读可写,属性的定义形式如下:

    public class BasicClass {
        // Property declaration
        access_modifier return_type property_name {
            get {
                //Get accessor code block
            }
            set {
            //Set accessor code block
            }
        }
    }        

    其中access_modifier是属性的访问权限,可以是private,protected,public,global,属性也可以被static,transient修饰,以实际例子说明:

    public class BasicProperty {
      public integer prop {
        get { return prop; }
        set { prop = value; }
      }
    }

    以下代码调用了上述类中的get、set访问器:

    BasicProperty bp = new BasicProperty();
    bp.prop = 5; // Calls set accessor
    System.assert(bp.prop == 5); // Calls get accessor

    注意:

    1)get访问器有返回值,并以return语句结束;2)不建议在get访问器中改变类状态;3)当给一个属性赋值时,调用set访问器,并将赋值的值传递给set访问器中一个与该属性相同属性的名为value的隐式变量;4)属性不能再接口中定义;5)Apex属性的依据来自C#,更多详情详见C#属性的介绍;

    使用自动属性(Automatic Properties)

    Apex属性的构造器并不一定需要实现代码,可以只通过制定get、set关键字定义自动属性,举例说明:

    public class AutomaticProperty {
      public integer MyReadOnlyProp { get; }
      public double MyReadWriteProp { get; set; }
      public string MyWriteOnlyProp { set; }
    }

    使用静态属性(Static Properties)

    当一个属性的被static修饰,那么其访问器就只能对类中的静态成员进行操作

    Apex属性访问器的访问权限

    访问器的访问权限不能高于Apex属性本身的访问权限

    继承

    继承父类的子类继承了父类的所有方法和属性。此外,子类可以通过在方法定义中使用override关键字来覆盖父类中的虚拟方法(用virtual修饰),与Java一样,一个类只能=继承一个父类,但是可以实现多个接口;例如:

    public virtual class Marker {
      public virtual void write() {
        System.debug('Writing some text.');
      }
      public virtual Double discount() {
        return .05;
      }
    }

    再创建一个实现上述类的子类:

    // Extension for the Marker class
    public class YellowMarker extends Marker {
      public override void write() {
        System.debug('Writing some text using the yellow marker.');
      }
    }
  • 相关阅读:
    ios初级必看视频
    Md5加密
    Jmail发送邮件
    NPOI Helper文档
    jquery 序列化
    mvc DropDownList默认选项
    获取HTML
    EntityFramework Reverse POCO Generator工具
    全选反选
    mvc导出EXCEL
  • 原文地址:https://www.cnblogs.com/qingyaxuan/p/7707394.html
Copyright © 2011-2022 走看看