Scala學習筆記(5)-類和方法

來源:互聯網
上載者:User

標籤:

Scala裡的類和方法的概念都是差不多的,這裡只列出Scala重要的一些概念:

1.Public是Scala的預設存取層級,可以省略不寫。

2.Scala裡方法參數的一個重要特徵是它們都是val,不是var(參數是val的理由是val更容易講清楚,你不需要多看代碼以確定是否val被重新賦值,而var則不然。)如果你想在方法裡面給參數重新賦值,結果是編譯失敗。

3.如果方法沒有發現任何顯式的返回語句,Scala將返回方法中最後一個計算得到的值。

4.對於方法來說推薦的風格實際是避免顯式的尤其是多個返回語句。代之以把每個方法當作是建立傳回值的運算式。這種哲學將鼓勵你製造很小的方法,把較大的方法分解為多個更小的方法。另一方面,設計選擇取決於設計內容,Scala使得編寫具有多個,顯式的return的方法變得容易,如果那的確是你期望的。

5.帶有大括弧但沒有等號的,在本質上當作是顯式定義結果類型為Unit的方法。

def g() { "this String gets lost too" }

當你去掉方法體前面的等號時,它的結果類型將註定是Unit。不論方法體裡麵包含什麼都不例外,因為Scala編譯器可以把任何類型轉換為Unit。例如,如果方法的最後結果是String,但方法的結果類型被聲明為Unit,那麼String將被轉變為Unit並失去它的值。

def f(): Unit = "this String gets lost"

6.Singleton對象

Scala比Java更物件導向的一個方面是Scala沒有靜態成員。替代品是,Scala有單例對象:singleton object。除了用object關鍵字替換了class關鍵字以外,單例對象的定義看上去就像是類定義。

就如第一章裡的小例子一樣:

object Demo {//一個單例對象   def main(args: Array[String]): Unit = {     println("hello scala")   } }

當單例對象與某個類共用同一個名稱時,他被稱作是這個類的伴生對象:companion object。你必須在同一個源檔案裡定義類和它的伴生對象。類被稱為是這個單例對象的伴生類:companion class。類和它的伴生對象可以互相訪問其私人成員。

類和單例對象間的一個差別是,單例對象不帶參數,而類可以。因為你不能用new關鍵字執行個體化一個單例對象,你沒機會傳遞給它參數。每個單例對象都被作為由一個靜態變數指向的虛構類:synthetic class的一個執行個體來實現(虛構類的名字是對象名加上一個貨幣符號。如單例對象ChecksumAccumulator的虛構類是ChecksumAccumulator$),因此它們與Java靜態類有著相同的初始化文法。單例對象會在第一次被訪問的時候初始化。

不與伴生類共用名稱的單例對象被稱為孤立對象:standalone object。由於很多種原因你會用到它,包括把相關的功能方法收集在一起,或定義一個Scala應用的進入點。(上面的小例子就是一個孤立對象)

7.Scala隱式引用了包java.lang和scala的成員,和名為Predef的單例對象的成員,到每個Scala源檔案中。Predef,被放置在包scala中,包含了許多有用的方法。例如,當在Scala源檔案中寫pringln的時候,你實際調用了Predef的println。(Predef.pringln運轉並調用Console.println,做實際的工作。)當你寫assert,你是在調用Predef.assert。

8.Scala裡,你可以任意命名.scala檔案,而不用考慮裡面放了什麼Scala類或代碼。這點與Java不同,java要求類名與檔案名稱相同。

Scala編譯器 scalac xxx.scala

Scala快速編譯器 fsc xxx.scala  //第一次執行fsc時,會建立一個綁定在你電腦連接埠上的本機伺服器後台進程。

停止fsc後台進程可執行fsc –shutdown

9.Application特質

Scala提供了一個特質,scala.Application,可以節省你一些手指的輸入工作。

使用這個特質的方法是,首先在你的單例對象名後面寫上“extends Application” 。然後代之以main方法,你可以把想要放在main方法裡的代碼直接放在單例對象的大括弧之間。就這麼簡單。之後可以像對其它程式那樣編譯和運行。

import ChecksumAccumulator.calculate object Demo extends Application {//一個單例對象     println("hello scala")}

這種方式之所以能奏效是因為特質Application聲明了帶有合適的簽名的main方法,並由你的單例對象繼承,使它可以像個Scala程式那樣用。大括弧之間的代碼被收集進了單例對象的主構造器:primary constructor,並在類被初始化時被執行。

繼承自Application比寫個顯式的main方法要短,不過它也有些缺點。首先,如果想訪問命令列參數的話就不能用它,因為args數組不可訪問。第二,因為某些JVM執行緒模式裡的局限,如果你的程式是多線程的就需要顯式的main方法。最後,某些JVM的實現沒有最佳化被Application特質執行的對象的初始化代碼。因此只有當你的程式相對簡單和單線程情況下你才可以繼承Application特質。


Scala學習筆記(5)-類和方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.