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.');
}
}
總結
以上是生活随笔為你收集整理的Apex基础之Classes的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SPI接口比IIC速度快的理解
- 下一篇: 把自1970年1月1日以来的秒数转化成年