最近在學習scala編程語言,看了幾章確實很好用,尤其是函數式編程,之前曾了解過haskell函數式編程語言,就深深地喜歡上了,不過在實際應用中,確實很少。scala不一樣,兼容java字節碼,可以理解為Java的一種語法糖,Java的類庫可以無縫使用,工作中更多的用的時Java,這樣學習了scala,就可以在工作中大顯身手。
先來一段hello world程序
object HelloWorld{ def main(args : Array[String]){ println("HelloWorld") } }
按照scala編程的說法,該對象稱之為孤立對象,如果定義了object,又定義class,那么對象叫伴生對象,class稱之為伴生類。
Scala的程序最終是由scalac編譯成java字節碼,由JVM加載執行,所以說學習scala的同時,對比着編譯后的字節碼,就很容易學習,當然我們不會去看字節碼,而是通過反編譯工具查看反編譯后的代碼,這里推薦jd-gui。下載地址:http://jd.benow.ca/
scalac HelloWorld.scala
編譯后會生成兩個scala文件
通過jd-gui反編譯class后,查看文件
//-------------------------------HelloWorld$.class------------------------- import scala.Predef.; public final class HelloWorld$ { public static final MODULE$; static { //創建對象,調用HelloWorld$()構造函數 new (); } public void main(String[] args) { //MODULE$在構造函數中已經指向對象本身 Predef..MODULE$.println("HelloWorld"); } private HelloWorld$() { MODULE$ = this; } }
//-------------------------------HelloWorld.class------------------------- import scala.reflect.ScalaSignature; public final class HelloWorld { public static void main(String[] paramArrayOfString) { // 實際調用HelloWorld$下的println方法 HelloWorld..MODULE$.main(paramArrayOfString); } }
可以看到,最終執行還是java的類和對象組合。