那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

一文看懂scala和java的區(qū)別

姚小熊27 ? 來源:網(wǎng)絡整理 ? 2018-03-07 18:30 ? 次閱讀

Scala簡介

Scala是一種有趣的語言。它一方面吸收繼承了多種語言中的優(yōu)秀特性,一方面又沒有拋棄Java這個強大的平臺,它運行在Java虛擬機(JavaVirtualMachine)之上,輕松實現(xiàn)和豐富的Java類庫互聯(lián)互通。它既支持面向?qū)ο蟮?a href="http://www.qldv.cn/v/tag/1315/" target="_blank">編程方式,又支持函數(shù)式編程。它寫出的程序像動態(tài)語言一樣簡潔,但事實上它確是嚴格意義上的靜態(tài)語言。Scala就像一位武林中的集大成者,將過去幾十年計算機語言發(fā)展歷史中的精萃集于一身,化繁為簡,為程序員們提供了一種新的選擇。

Java簡介

Java是一門面向?qū)ο缶幊陶Z言,不僅吸收了C++語言的各種優(yōu)點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特征。Java語言作為靜態(tài)面向?qū)ο缶幊陶Z言的代表,極好地實現(xiàn)了面向?qū)ο罄碚摚试S程序員以優(yōu)雅的思維方式進行復雜的編程。

Java具有簡單性、面向?qū)ο蟆⒎植际健⒔研浴踩浴⑵?**立與可移植性、多線程、動態(tài)性等特點。Java可以編寫桌面應用程序、Web應用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應用程序等。

Java的工作原理

一文看懂scala和java的區(qū)別

由四方面組成:

(1)Java編程語言

(2)Java類文件格式

(3)Java虛擬機

(4)Java應用程序接口

當編輯并運行一個Java程序時,需要同時涉及到這四種方面。使用文字編輯軟件(例如記事本、寫字板、UltraEdit等)或集成開發(fā)環(huán)境(Eclipse、MyEclipse等)在Java源文件中定義不同的類[22],通過調(diào)用類(這些類實現(xiàn)了JavaAPI)中的方法來訪問資源系統(tǒng),把源文件編譯生成一種二進制中間碼,存儲在class文件中,然后再通過運行與操作系統(tǒng)平臺環(huán)境相對應的Java虛擬機來運行class文件,執(zhí)行編譯產(chǎn)生的字節(jié)碼,調(diào)用class文件中實現(xiàn)的方法來滿足程序的JavaAPI調(diào)用。

scala和java的區(qū)別

1、對字符串的支持

scala采用三個雙引號“”“支持換行字符串,Java需要采用“+”進行字符串的連接。

2、方法返回值

scala的return是可選的,方法調(diào)用會自動返回最后求值的表達式。如果scala使用了return則需要顯示指定方法的返回值

Java需要顯示的采用return進行值的返回。

3、類和方法修飾符的默認值

scala默認是public,java默認是protected.

4、默認導入的類

scala默認導入java.lang包、scala包、scala.Predef類。

java默認導入java.lang包

5、接口

scala不支持接口interface,采用trait(類似于Java中的抽象類)。

java支持接口

6、類成員和單例對象

scala語言機制上支持單例對象和伴生對象,伴生類。伴生類和伴生對象需要在一個類文件中使用,在使用伴生對象時,系統(tǒng)隱式地調(diào)用apply生成一個伴生實例的對象。

java由類成員,單例對象需要自己實現(xiàn)。

7、方法參數(shù)

scala支持以函數(shù)作為參數(shù),格式為deferror(msg:=》String)表示msg是輸入?yún)?shù),輸出參數(shù)為String的函數(shù)。

java不支持。

scala相對于java存在的優(yōu)勢

相比較與Java,在下覺得Scala最主要的有以下兩點優(yōu)勢:

FP泛型支持

如果用多了Spring中大量的template接口,你就會覺得FP其實還是蠻好用的。

而這僅僅是FP好處的冰山一角。

函數(shù)其實就是一個input-》output(scala也是這么表示一個函數(shù)的),沒有任何副作用,與狀態(tài)無關,由于這種特性,所以函數(shù)式的編程范式在分布式領域有很多好處

對于函數(shù)式編程,我的知識實在是皮毛,但可以這么說,F(xiàn)P相對與OO有哪些優(yōu)勢,Scala對于Java差不多就有哪些優(yōu)勢。

正因為FP有如此多的優(yōu)勢,所以Java8才引入了FP.從某種程度上來說,Java認可了Scala的做法。

類型系統(tǒng)支持

如果說Java是一種類型安全的語言,那么毫無疑問,Scala的類型更加安全,從某種程度上說,Scala的類型是圖靈完備的,而Java不是。我的一位好朋友在這方面研究的比較深(http://hongjiang.info/scala/),而我對與Scala的類型系統(tǒng)的理解,也還是皮毛。

正是以上這兩點大優(yōu)勢,造成了Scala比Java更加安全,同時又具備靈活性,想象力。

其他語言層面上的優(yōu)勢

在Java中,你是否有時很想繼承多個AbstractClass呢?對不起,Java只支持單繼承

在Scala中,你可以進行mixin(Java8也開始引入defaultmethod了呢)

在Java中,想要一個singleton?要么在staticblock中做,要么利用Enum的單例特性完成,或者其他更糾結(jié)的方法。

在Scala中,只要聲明為object,即為單例。

在Java中,想要延遲加載一個單例?doublecheck吧

在Scala中,只要在object中將變量修飾為lazy即可

在Java中,想要對集合進行一些操作?使用一層一層的for循環(huán)吧

在Scala中,使用collection的一些集合操作,即可獲得如寫SQL般的享受。

在Java中,在并發(fā)中想對Future進行回調(diào)?對不起,F(xiàn)uture不是Listenable(無法支持回調(diào)),除非你使用額外的工具(如guava,spring)

在Scala中,本來就主張異步編程,future和promise的配合讓人非常愉快。

在Java中,要透明擴展一個第三方庫的類怎么辦?包裝,再加一層。

在Scala中,有強大的implicit機制讓你更優(yōu)雅的做到這一點,同時還能保證類型安全(比起Ruby的monkeypatch,要安全得多)

Scala的表達力很強,相同功能的代碼,用Java和Scala的行數(shù)不可同日而語。

這些單單是語言層面上的優(yōu)勢,除此之外,Scala還能無縫結(jié)合Java

盡管羅列了如此多的好處,但Scala有如下劣勢:

語法復雜,學習曲線非常高

國內(nèi)Scala程序員很難找(目前Scala的影響力也在緩慢擴大,比如Scala社區(qū)中的明星Spark的流行也在慢慢拉動Scala的流行,如同rails之于ruby)

社區(qū),生態(tài)還比較小,Scala風格的庫還非常少(但可以和Java很容易的斜街很多時候彌補了這一點)

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    19

    文章

    2974

    瀏覽量

    105135
  • scala
    +關注

    關注

    0

    文章

    42

    瀏覽量

    6453
收藏 人收藏

    評論

    相關推薦

    5 月編程語言榜:C 再度暴漲,Scala 成功上位

    TIOBE 剛剛發(fā)布了 5 月編程語言排行榜。Scala 經(jīng)過長時間的沉淀,本月終于進入了 TIOBE 榜單的前 20 名。Scala種 JVM 上運行的函數(shù)式編程語言,可與 Java
    發(fā)表于 05-08 13:17

    Scala入門到精通——第三十節(jié) Scala腳本編程與結(jié)束語

    高級使用使用Scala進行Linux腳本編程結(jié)束語1. REPL命令行高級使用在使用REPL命令行時,有時候我們需要粘貼的代碼比較大,而普通的粘貼可能會些些問題,比如中文粘貼會出現(xiàn)亂碼、多行代碼粘貼
    發(fā)表于 06-26 17:44

    Java SE、Java EE、Java ME之間的區(qū)別

    本文把JAVA SE、JAVA EE、JAVA ME拿來做下區(qū)別,同時也分享下作者的些成果。
    發(fā)表于 07-11 08:31

    JAVA SE、JAVA EE和JAVA ME有什么區(qū)別

    本文把JAVA SE、JAVA EE、JAVAME拿來做下區(qū)別,同時也分享下作者的些成果。目前的Ja
    發(fā)表于 07-15 07:11

    張圖看懂ERP和MES的區(qū)別分析資料下載

    張圖看懂ERP和MES的區(qū)別
    發(fā)表于 01-04 15:44 ?14次下載

    scala語言主要應用領域詳解

    Scala門多范式的編程語言。本文開始介紹了Scala的概念,其次介紹了Scala的特性,最后闡述了scala語言的主要應用領域。
    的頭像 發(fā)表于 03-07 18:08 ?1.9w次閱讀

    看懂java如何寫接口給別人調(diào)用

    計算機語言分類有很多,如C、C++、C#、Java、Php、Python等等,她們有各自的特性及擅長的領域,但她們各自又不是全能的。在個稍微大型點的項目都會用到多種語言共同完成,那么這些編程語言
    的頭像 發(fā)表于 03-26 18:47 ?5.4w次閱讀

    簡單說明Scala語言與其優(yōu)點

    Scala種有趣的語言,是種多范式的編程語言,其設計的初衷是要集成面向?qū)ο缶幊毯秃瘮?shù)式編程的各種特性。Scala運行在JVM上,兼容現(xiàn)有的J
    發(fā)表于 10-10 09:23 ?6726次閱讀

    看懂PCB助焊層跟阻焊層的區(qū)別與作用資料下載

    電子發(fā)燒友網(wǎng)為你提供看懂PCB助焊層跟阻焊層的區(qū)別與作用資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料、參考設計、用戶指南、解決方案等資料,希望
    發(fā)表于 04-21 08:44 ?32次下載
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>看懂</b>PCB助焊層跟阻焊層的<b class='flag-5'>區(qū)別</b>與作用資料下載

    看懂FPGA芯片投資框架.zip

    看懂FPGA芯片投資框架
    發(fā)表于 01-13 09:06 ?4次下載

    看懂PCB天線、FPC天線的特性.zip

    看懂PCB天線、FPC天線的特性
    發(fā)表于 03-01 15:37 ?33次下載

    javaweb和java有什么區(qū)別

    Javaweb和Java是兩個不同的概念,它們之間存在明顯的區(qū)別。下面將詳細介紹這兩者的區(qū)別,以滿足你關于詳盡、詳實、細致的要求。 Java
    的頭像 發(fā)表于 11-16 10:49 ?3686次閱讀

    看懂BLE Mesh

    看懂BLE Mesh
    的頭像 發(fā)表于 12-06 16:24 ?1549次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>看懂</b>BLE Mesh

    華納云:java web和java有什么區(qū)別java web和java有什么區(qū)別

    Java Web和Java是兩個不同的概念,它們在功能、用途和實現(xiàn)方式上存在區(qū)別,下面將詳細介紹它們之間的區(qū)別。 1. 功能和用途: –
    的頭像 發(fā)表于 07-16 13:35 ?898次閱讀
    華納云:<b class='flag-5'>java</b> web和<b class='flag-5'>java</b>有什么<b class='flag-5'>區(qū)別</b><b class='flag-5'>java</b> web和<b class='flag-5'>java</b>有什么<b class='flag-5'>區(qū)別</b>

    看懂電感、磁珠和零歐電阻的區(qū)別

    電子發(fā)燒友網(wǎng)站提供《看懂電感、磁珠和零歐電阻的區(qū)別.docx》資料免費下載
    發(fā)表于 01-02 14:48 ?1次下載
    大发888注册送58下载| 百家乐中的概率| 娱乐城注册送金| 丽水市| 百家乐官网娱乐皇冠世界杯 | 自贡市| 百家乐官网公试打法| 百家乐官网筹码方形筹码| 海立方百家乐官网赢钱| 皇冠博彩| 云博娱乐城官网注册| 沙湾县| 百家乐官网送彩金网络| 百家乐看点打法| 威尼斯人娱乐城评价| 大发娱乐场下载| 南京百家乐官网赌博现场被抓| 81数理 做生意| 百家乐博百家乐的玩法技巧和规则| 现场百家乐机| 大发888娱乐场下载zhidu| 解析百家乐官网投注法| 百家乐官网推广| 百家乐官网平预测软件| 威尼斯人娱乐城排名| 网上百家乐官网赌博犯法吗| 长沙百家乐官网的玩法技巧和规则| 淘金百家乐现金网| 大发888娱乐城好么| 百家乐官网玩法教学视频| 百家乐官网桌子租| 丰禾国际娱乐| 百家乐官网真人秀| 足球百家乐投注计算| 建德市| 网络百家乐破解平台| 昌黎县| 广东百家乐扫描分析仪| 飞七棋牌游戏下载| 百家乐规则技法| 川宜百家乐官网分析软件|