在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

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

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

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

Scala簡介

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

Java簡介

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

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

Java的工作原理

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

由四方面組成:

(1)Java編程語言

(2)Java類文件格式

(3)Java虛擬機(jī)

(4)Java應(yīng)用程序接口

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

scala和java的區(qū)別

1、對字符串的支持

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

2、方法返回值

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

Java需要顯示的采用return進(jìn)行值的返回。

3、類和方法修飾符的默認(rèn)值

scala默認(rèn)是public,java默認(rèn)是protected.

4、默認(rèn)導(dǎo)入的類

scala默認(rèn)導(dǎo)入java.lang包、scala包、scala.Predef類。

java默認(rèn)導(dǎo)入java.lang包

5、接口

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

java支持接口

6、類成員和單例對象

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

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

7、方法參數(shù)

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

java不支持。

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

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

FP泛型支持

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

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

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

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

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

類型系統(tǒng)支持

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

語法復(fù)雜,學(xué)習(xí)曲線非常高

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

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

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

    關(guān)注

    19

    文章

    2974

    瀏覽量

    105144
  • scala
    +關(guān)注

    關(guān)注

    0

    文章

    42

    瀏覽量

    6454
收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

    高級使用使用Scala進(jìn)行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語言主要應(yīng)用領(lǐng)域詳解

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

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

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

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

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

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

    電子發(fā)燒友網(wǎng)為你提供看懂PCB助焊層跟阻焊層的區(qū)別與作用資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計(jì)、用戶指南、解決方案等資料,希望
    發(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ū)別。下面將詳細(xì)介紹這兩者的區(qū)別,以滿足你關(guān)于詳盡、詳實(shí)、細(xì)致的要求。 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是兩個不同的概念,它們在功能、用途和實(shí)現(xiàn)方式上存在區(qū)別,下面將詳細(xì)介紹它們之間的區(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èi)下載
    發(fā)表于 01-02 14:48 ?1次下載
    主站蜘蛛池模板: 午夜美女写真福利写视频 | 久久国产精品久久久久久 | 欧美三级一级 | 最新版天堂资源中文官网 | 亚洲色图第一页 | 亚洲一成人毛片 | 一色屋精品免费视频 视频 一色屋免费视频 | 加勒比日本在线 | 爱插综合网 | 色我网站 | 亚洲www网站 | 久久国产乱子伦精品免费强 | 国产美女激情视频 | 男人视频在线 | 亚洲免费国产 | 濑亚美莉vs黑人欧美视频 | 丁香六月激情婷婷 | 日本三级免费观看 | 四虎884 | tube 69sex 第一次 | 91视频污污版 | 四虎影院观看视频在线观看 | 黄色在线播放网站 | 手机视频在线播放 | 男男小说高h | 国漫在线观看 | 99伊人 | h视频在线观看免费网站 | 国产精品福利在线观看免费不卡 | 久久精品综合 | 国产欧美精品午夜在线播放 | 韩国黄色三级视频 | 九九精品国产兔费观看久久 | 国产久热精品 | 亚洲午夜久久久久国产 | 在线看黄色的网站 | 女人本色高清在线观看wwwwww国产 | 中文字幕一区二区三区视频在线 | 欧美一卡二卡科技有限公司 | 久精品在线观看 | 天天干干天天 |