日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

scala语言的底层是java实现的_Scala学习笔记一(与Java、Jvm的关系以及程序执行流程分析)...

發布時間:2025/4/5 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 scala语言的底层是java实现的_Scala学习笔记一(与Java、Jvm的关系以及程序执行流程分析)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、Scala語言與Java、Jvm的關系分析

Scala語言是馬丁奧德斯基接觸Java語言后,針對Java語言的特點,將函數式編程語言的特點融合到Java中,由此發明的。Scala語言和Java語言的;聯系是十分緊密的。現在主流的JVM的Javac編譯器就是馬丁奧德斯基編寫的,包括JDK1.5和JDK1.8。那么Scala和Java以及JVM之間有什么樣的聯系呢?我們來分析一下,如下圖所示:

可以看出Scala語言編譯的范圍要大于Java語言的編譯范圍,也就是說有的Java程序可以通過Scalac編譯形成字節碼,然后通過Scala運行器運行想要的class文件,因為Scala語言包含了部分Java語法。

但是Java編譯器是無法,編譯Scala程序然后用Java運行器執行的,因為Scala擁有自己一些特有的語法,這是Java編譯器和運行器所顧及不到的。

同時Scala語言也有自己的類庫SDK,這些類庫可能會用到JDK提供的相關類庫,主要是使用JDK對其進行進一步的包裝形成SDK。

Scala語言的Scalac編譯和Scala運行器文件都在Scala安裝目錄的bin文件夾下。

總結一下Scala語言的特點:

(1)Scala是一門以Java虛擬機(JVM)為運行環境并將面向對象和函數式編程的最佳特性結合在一起的靜態類型編程語言。

(2)Scala 是一門多范式 (multi-paradigm) 的編程語言,Scala支持面向對象和函數式編程。

(3)Scala源代碼(.scala)會被編譯成Java字節碼(.class),然后運行于JVM之上,并可以調用現有的Java類庫,實現兩種語言的無縫對接。

(4)scala 單作為一門語言來看, 非常的簡潔高效 。

(5)Scala 在設計時,馬丁·奧德斯基是參考了Java的設計思想,可以說Scala是源于java,同時馬丁·奧德斯基也加入了自己的思想,將函數式編程語言的特點融合到JAVA中, 因此學習過Java,只要在學習Scala的過程中,搞清楚Scala和java相同點和不同點,就可以快速的掌握Scala這門語言。

二、Scala程序執行流程分析

Scala語言的源代碼文件的后綴名是.scala,編寫完源代碼然后經過Scalac編譯器編譯會生成兩個.class文件,下面來分析一下具體的執行過程。先編寫一個最簡單的Scala程序:

object TestScala {

def main(args: Array[String]): Unit={

println("hello,scala,idea...")

}

}

1.object表示一個伴生對象,這里可以簡單的理解就是一個對象

2.TestScala就是對象名字,它底層真正對應的類名是TestScala$,對象是TestScala$類型的一個靜態對象MODULE$

3.def表示是一個方法,這是一個關鍵字

4.main表示方法名字,表示程序執行的入口

5.args:Array[String]表示形參,scala的特點是將參數名寫在前面,類型在后

6.Array[String]表示類型是一個數組

7.? ?:Unit=表示該函數的返回值為空

8.println?打印輸出

9.當我們編寫一個object TestScala,底層會生成兩個.class文件分別是TestScala和TestScala$,對上面這兩個.class文件進行反編譯,如下所示:

TestScala

public final classTestScala

{public static voidmain(String[] paramArrayOfString)

{

TestScala$.MODULE$.main(paramArrayOfString);

}

}

TestScala$

public final classTestScala$

{public static finalMODULE$;static{new();

}public voidmain(String[] args)

{

Predef..MODULE$.println("hello,scala,idea...");

}private TestScala$() { MODULE$ = this; }

}

10.scala在運行時的流程如下:

(1)先從TestScala的main開始執行

(2)然后調用TestScala$類的主方法TestScala$.MODULE$.main

(3)即執行了TestScala$類中的main方法,打印輸出了“hello,scala,idea...”,可以理解為我們在main中寫的代碼放在了TestData$的main方法中,在底層執行scala編譯器做了一個包裝。

我們可以通過Java程序來模擬上面Scala程序的執行過程,如下所示:

public classTestScala {public static voidmain(String[] paramArrayOfString) {

TestScala$.MODULE$.main(paramArrayOfString);

}

}final classTestScala$ {public static finalTestScala$ MODULE$;static{

MODULE$= newTestScala$();

}public voidmain(String[] args)

{

System.out.println("hello,scala,idea...");

}//private TestScala$() { MODULE$ = this; }

}

只要以后看到有 object objectName,應該有這樣一個認識:

1、object objectName對應的是一個objectName$的一個靜態對象MODULE$

2、在我們的程序中,是一個單例

Scala程序開發的注意事項:

Scala源文件以 “.scala" 為擴展名。

Scala程序的執行入口是main()函數。

Scala語言嚴格區分大小寫。

Scala方法由一條條語句構成,每個語句后不需要分號(Scala語言會在每行后自動加分號),這也體現出Scala的簡潔性。如果在同一行有多條語句,除了最后一條語句不需要分號,其它語句需要分號。

總結

以上是生活随笔為你收集整理的scala语言的底层是java实现的_Scala学习笔记一(与Java、Jvm的关系以及程序执行流程分析)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。