scala完整筆記-5萬字一周入門到精通系列_第1頁
scala完整筆記-5萬字一周入門到精通系列_第2頁
scala完整筆記-5萬字一周入門到精通系列_第3頁
scala完整筆記-5萬字一周入門到精通系列_第4頁
scala完整筆記-5萬字一周入門到精通系列_第5頁
已閱讀5頁,還剩147頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

scala完整筆記-5萬字一周入門到精通系列

寫在開篇:

1.scala學(xué)習(xí)前一定要具備了解一些java基本知識,無需精通;如果從未接觸java,

最好熟悉一門編程語言,否則相對還是學(xué)習(xí)起來相對吃力且很難學(xué)懂

2.本篇主要以代碼示例為主,很多概念理論并沒有展開很多篇幅,畢竟不是研究

學(xué)術(shù)亦或是大廠面試專攻,代碼為主的本質(zhì)還是因為知道有什么功能,特點是什

么,知道scala有這個東西,有了印象后便于以后工作中用到時回來ctrl+f搜索

一下關(guān)鍵詞,可以很快看一下代碼示例,再展開使用

3.非常多的代碼并不是都寫在一個文件中,所以在一處寫了如何創(chuàng)建包創(chuàng)建對象

文件的方法等,就不會反復(fù)寫重復(fù)的創(chuàng)建包創(chuàng)建類文件等內(nèi)容

4.如果scala和java有很大區(qū)別的地方會對比代碼,凸顯不同之處

5.scaE許多代碼塊可以簡寫、代碼逐步精簡,對于初步接觸的情況,不建議花

大量時間去研究如何把代碼精簡一步到位,至少先保證代碼邏輯能敲出來,理解

為先,再隨著熟練度提升慢慢提高精簡度

第一章scala入門

第一節(jié)scala概述

1.1.1為什么學(xué)習(xí)scala

作為程序員一定對python不陌生,python無疑成為了最為熱門的語言,如今盤

踞編程語言前三,但這背后原因則是因為人工智能、機器學(xué)習(xí)、區(qū)塊鏈等超級大

概念持續(xù)性的高熱度和不斷增長的關(guān)注度所帶動;

而sea山的發(fā)展趨勢比較雷同python,只是領(lǐng)域不同,大數(shù)據(jù)現(xiàn)在也是一個有著

非常優(yōu)秀的發(fā)展趨勢,而大數(shù)據(jù)當前最火的框架要數(shù)spark和kafka,而這2個

框架又都是scala編寫的,也就是想在大數(shù)據(jù)走的遠,深挖進去就得學(xué)習(xí)scalao

1.1.2scala發(fā)展歷史與作者

Scala語言是一種能夠運行于JVM和.Net平臺之上的通用編程語言,既可用于

大規(guī)模應(yīng)用程序開發(fā),也可用于腳本編程,它由MartinOdersk于2001開發(fā),

2004年開始程序運行在JVM與.Net平臺之上,由于其簡潔、優(yōu)雅、類型安全的

編程模式而受到關(guān)注。(JVM-JavaVirtualMachine[java虛擬機])

在Scala的創(chuàng)建之初,并沒有怎么引起重視,隨著ApacheSpark和ApacheKafka

這樣基于Scala的大數(shù)據(jù)框架的崛起,Scala逐步映入大數(shù)據(jù)從業(yè)者的眼簾。

Scala的擁護者們認為Scala的主要優(yōu)勢是速度和它的表達性。目前使用scala

的作為支撐公司開發(fā)語言的包括Foursquare和Twitter。2009年Twitter把大部

分后臺系統(tǒng)的開發(fā)語言從Ruby換成了Scala

Scala的創(chuàng)建者——MartinOdersk(馬丁?奧德斯基)

馬丁?奧德斯基是編譯器及編程的狂熱愛好者,他希望發(fā)明一種語言,能夠使編

程變得更加高效簡潔。當他接觸到Java語言后,對Java語言產(chǎn)生了極大的

興趣,所以他決定將函數(shù)式編程融入到Java中,由此發(fā)明了兩種語言(Pizza&

Scala)oPizza和Scala極大地推動了Java語言的發(fā)展。

jdk5.0的泛型,for循環(huán)的增強,自動類型轉(zhuǎn)換等,都是從Pizza引入的

新特性。

jdk8.0的類型推斷,Lambda表達式就是從Scala引入的特性。

現(xiàn)在主流的JVM的javac編輯器就是馬丁?奧德斯基編寫的。jdk5.0和jdk

8.0的編譯器就是他編寫的??梢哉f是一個人就能做到整個團隊的工作量。

1.1.3scala和java關(guān)系

scala與java可以無縫鏈接,在互聯(lián)網(wǎng)領(lǐng)域java無疑是最具影響力的語言之一,

良好的社區(qū),規(guī)范優(yōu)美的代碼規(guī)則,都使得java成為近年來互聯(lián)網(wǎng)應(yīng)用最為廣

泛的語言,而scala與java幾乎可以稱作無縫鏈接,通過簡單的import就可以

調(diào)用java中各式各樣的類和方法,同時,scala完成的算法包也是以jar包的形

式出現(xiàn),同樣的語言實現(xiàn)都是經(jīng)過JVM來實現(xiàn)。

1.1.4scala語言特點

?scala是一門以jvm為運行環(huán)境并將面向?qū)ο蠛秃瘮?shù)式編程的最佳特性結(jié)合

在一起的靜態(tài)類型編程語言。

?scala是一門多范式(multi-paradigm)的編程語言,scala支持面向?qū)ο蠛秃瘮?shù)

編程。

?scala源代碼會被編譯為.class文件,然后運行于jvm上,并可以調(diào)用java

類庫,實現(xiàn)兩種語言的無縫對接。

?scala非常簡潔,如三元運算、++、-等。

第二節(jié)scala開發(fā)環(huán)境搭建

1.2.1scala環(huán)境搭建前期準備

因為很多學(xué)習(xí)scala的學(xué)者幾乎多多少少接觸過java的,或者是準備步入大數(shù)

據(jù)行業(yè)相關(guān)的從業(yè)人員,如果從未接觸過java語言并且也未打算從事大數(shù)據(jù)行

業(yè);講道理學(xué)習(xí)scala會相對吃力,不知道JAVA也不參與大數(shù)據(jù)那以后就不會

頻繁用到,意義就小很多。

搭建scala開發(fā)環(huán)境必須電腦上已經(jīng)具備了JAVA環(huán)境,安裝了idea等開發(fā)軟

件[軟件都可以,建議用ide],安裝JAVA環(huán)境和開發(fā)軟件自行準備。

JAVA1.8環(huán)境

#我這里用的是win101.8.0—221版本

IMicrosoftWindows[版本10.0.19041.928]

(c)MicrosoftCorporationo保留所有權(quán)利。

C:\Users\33450>java-version

javaversion"1.8.0_221"

Java(TM)SERuntimeEnvironment(build1.8.0_221-b11)

JavaHotSpot(TM)64-BitServerVM(build25.221-b11,mixedmode)

idea編輯器(自行下載安裝包并破解)

編輯器我用的是IntelliJIDEA2020.1x64

1.2.2scala環(huán)境安裝步驟

(1)開始前首先確保JDK1.8安裝成功且環(huán)境變量沒問題

(2)下載對應(yīng)的Scala安裝文件scala-2.1118.zip

scala官方網(wǎng)站:

找至Hdownload-大版本分scala3和scala2-點下載scala2

其中頁面有一行:Orarevoulookin。forpreviousreleasesofScala?

點擊previousreleases可以找到過往所有版本下載,然后點擊對應(yīng)版本之后進

入到下載頁面,一般開發(fā)都在windows或者Mac環(huán)境,下載對應(yīng)版本即可(我

這里使用的是windowsscala-2.11.8.zip)(.

(3)解壓scala-2.1L8.zip

解壓即用,解壓后的文件夾可以剪切到自己習(xí)慣存放程序的目錄,

D:\scala-2.11.8(我直接放置在D盤目錄下,解壓路徑中不能有任何中文名路徑,

最好也不要有空格,畢竟編輯器最后都要配置scala環(huán)境,避免出現(xiàn)不可預(yù)估的

疑難雜癥[例如:D:\新建文件夾\scala-2.11.8]這樣帶中文的路徑不要用)

(4)配置Scala的環(huán)境變量

WIN10是右鍵我的電腦,點擊高級系統(tǒng)設(shè)置-在系統(tǒng)屬性里點高級分頁-下

面有一個環(huán)境變量一在環(huán)境變量中,分當前用戶配置和系統(tǒng)變量配置,直接在

系統(tǒng)變量中新建SCALA配置(環(huán)境變量要大寫SCALA_HOME)

變量名(N):SCALA一HOME

變量值(V):D:\scala-2.11.8

添加完scHa變量配置后,還需要修改PATH變量

X

D:\ProgramFiles\Java\jdk1,8.0_221\bin

D:\apache-maven-3.2.2\bin

C:\ProgramFiles(x86)\CommonFiles\NetSarang

C:\Windows\system32

C:\Windows

C:\Windows\System32\Wbem

C:\Windows\System32\WindowsPowerShell\v1,0\

C:\Windows\System32\OpenSSH\

C:\ProgramFiles(x86)\NVIDIACorporation\PhysX\Common

C:\ProgramRles\NVIDIACorporation\NVIDIANvDLISR

d:\ProgramFiles\Git\cmd

D:\ProgramFiles\TortoiseSVN\bin

C:\ProgramFiles\MySQL\MySQLServer5.5\bin

%SystemRoot%\system32

%SystemRoot%

%SystemRoot%\System32\Wbem

%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\

%*YSTFMRQCT%\*y產(chǎn)em32\OpenSSH\

D:\scala-2.11.8\bin

確定就肖

工Ji」u—:_L.;.LL上L二」

建議把JAVA的PATH位置上移到第一個,這里新增D:\sca山-2.11.8\bin上面

是新增SCALA一HOME是程序目錄,這里加的是把程序目錄中bin目錄下的執(zhí)

行文件配置到系統(tǒng)執(zhí)行文件路徑中去。

1.2.3測試初試scala

如果以上操作都順利完成,可以進入到驗證階段,打開cmd命令行;

MicrosoftWindows[版本10.0.19041,928]

(c)MicrosoftCorporationo保留所有權(quán)利。

E:\tmp>java-version

javaversionM1.8.0_221M

Java(TM)SERuntimeEnvironment(build1.8.0_221-b11)

JavaHotSpot(TM)64-BitServerVM(build25.221-b11,mixedmode)

E:\tmp>scala-version

Scalacoderunnerversion2.11.8--Copyright2002-2016,LAMP/EPFL

E:\tmp>scala

WelcometoScala2.11.8(JavaHotSpot(TM)64-BitServerVM.Java1.8.0_221).

Typeinexpressionsforevaluation.Ortry:help.

scala>

能進入到scala命令行,說明環(huán)境已經(jīng)沒有問題。

根據(jù)java之前的經(jīng)驗,來個小實驗

scala>

scala>varw=10

w:Int=10

scala>vart=20

t:Int=20

scala>varwt=w+t

wt:Int=30

scala>:quit

#退出命令行前面需要加":"

E:\tmp>

現(xiàn)在一切準備就緒,在準備idea開發(fā)環(huán)境之前,需要了解2件事情

第一件:簡單的java和sea山運行流程,有必要知道這個過程

java運行原理

?.java源文件-->編譯器(javac)-->.class字節(jié)碼文件-->JVM(java不同

平臺)->機器指令

Scala運行原理

?.scala源文件->編譯器(scalac)->.class字節(jié)碼文件->JVM(scala

不同平臺)->機器指令

對比一下流程基本一樣,局部不同

第二件:scala能否運行java代碼、java能否運行scaE代碼?(通過實驗來

論證)

新建2個空文件:JavaHelloworld.java、ScalaHelloWorld.scala

剪貼板組織新建郵

<-▼個j>文彳>tmp

名稱修改日期凝大小

★快速訪問

UJavaHelloworldjava2021/6/1914:42JAVA文件1KB

■桌面

_ScalaHelloWorld.scala2021/6/1914:44SCALA文件1KB

,下載

圖他

;圖片

在JavaHelloworld.java文件中編輯內(nèi)容并保存退出

publicclassJavaHelloworld{

publicstaticvoidmain(String[]args){

System.out.println(nHelloworldfromjava");

)

)

在Sea山HelloWorld.scala文件中編輯內(nèi)容并保存退出[不用在意語法,這里只

是驗證結(jié)果]

objectScalaHelloWorld{

defmain(args:Array[String]):Unit={

printlnC'HelloWorldfromscala")

___________}

)

在當前目錄下運行emd命令行

MicrosoftWindows[版本10.0.19041.928]

(c)MicrosoftCorporation0保留所有權(quán)利。

E:\tmp>javacJavaHelloworld.java

E:\tmp>scalacScalaHelloWorld.scala

可以看到

編譯器(javac)編譯JavaHelloworld.java文件->JavaHelloworld.class字節(jié)

碼文件

編譯器(scalac)編譯ScalaHelloWorld.scala文件->默認是

Sea山HelloWorld.class(伴生類)、ScalaHelloWorld$.class(伴生對象所屬類)2

個字節(jié)碼文件

?-▼個]>此電腦>文件存儲(E:)>tmp

名稱修改日期建大小

才快速訪問

.口JavaHelloworld.dass2021/6/1914:49CLASS文件1KB

■桌面

二JavaHelloworldjava2021/6/1914:42JAVA文件1KB

▼■不卜就航

PlScalaHelloWorldJ.dass2021/6/1914:49CLASS文件1KB

j)如,ScalaHelloWorld.class

2021/6/1914:49CLASS文件1KB

A至月"QfScalaHelloWorld.scala2021/6/1914:44SCALA文件1KB

*WPS網(wǎng)盤

一..一一

結(jié)論驗證:

#java運行JavaHelloworld成功輸出(注意后而不用跟文件后綴)

E:\tmp>javaJavaHelloworld

Helloworldfromjava

#scala運行ScalaHelloWorld成功輸出

E:\tmp>scalaScalaHelloWorld

HelloWorldfromscala

#采用scala來運行JavaHelloworld成功輸出說明scala可以運行一些java編譯字節(jié)碼文件

E:\tmp>scalaJavaHelloworld

Helloworldfromjava

#采用java運行ScalaHelloWorld報錯說明java不能運行scala編譯字節(jié)碼文件

E:\tmp>javaScalaHelloWorld

Exceptioninthread"main"java.Iang.NoClassDefFoundError:scala/Predef$

atScalaHelloWorld$.main(ScalaHelloWorld.scala:4)

atScalaHelloWorld.main(ScalaHelloWorld.scala)

Causedby:java.Iang.ClassNotFoundException:scala.Predef$

at.URLCIassLoader.findClass(URLCIassLoader.java:382)

atjava.lang.ClassLoader.loadClass(ClassLoader.java:424)

atsun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)

atjava.lang.ClassLoader.loadClass(ClassLoader.java:357)

...2more

E:\tmp>

第三節(jié)idea中scala插件安裝

首先確定ide已經(jīng)安裝并且可以正常使用

默認情況下IDEA不支持Scala的開發(fā),需要安裝Scala插件。在File-Settings

-Plugins查詢Scala點擊Install安裝即可

安裝完Scala插件后,根據(jù)提示重啟idea程序應(yīng)用

第四節(jié)scala第一個demo示例

1.4.1新建一個Maven項目工程

VNewProjectX

Name$cala_wt_test

location:EWscalajrt.test

▼ArtifaaCoordinates

Groupld:com.wangting

Theoftheartifactgroup,usuallyacompanydomain

Mfaaid:scala_wt_test

Thenameoltheartifactwnthinthegroup,uwNynprefectname

Version:1.O-SNAPSHOT

PreviotKtW7/toiog.(3dEteneV\vt33A602157

內(nèi)容可以自定義,一般不影響實驗,但還是注意工程存儲路徑以及Groupld等

不要有中文和空格

1.4.2工程項目配置Scala框架

在AddFrameworksSupport窗口中,選擇Scala,并且在右側(cè)Uselibrary中

配置seala目錄,第一次引入框架,Uselibary看不到,需要選擇你的Scala安

裝目錄,然后工具就會自動識別,就會顯示userlibary

1?

Pleaseselectthedesiredtechnologies.

Thiswilldownloadallneodedlibrariesan<JcreateFacetsir?projectconfiguration.

.Tiles2integration

Uselibrary:1^scala-sdk-2.11.8

I—I-Springd>

SpringBatch

1-Blibrarywillbeu&?ci

JSpringDotaJPA

SpringIntegration

SpringMVU

JSpringSecurity

*7c,SpringWebServices

SpringWebFlow

DMServer

i(jGoogleWebToolkit

IGroovy

iOHitacmatc

1fXJavaEEPersistence

ZZOSGi

I~1、Play2.x

?5Scala

用.SQLSupport

,Tap??stry

WcbScrvicesClient

https7/blog.c^ln.net/wt^^^8fo2157

1.4.3運行一個hello案例

1.4.3-1創(chuàng)建項目的源文件目錄

右鍵點擊main目錄->New->點擊Diretory->新建代碼目錄->命名scala

右鍵點擊scala目錄,MarkDirectoryas選項->選擇Sourcesroot,觀察文

件夾顏色發(fā)生變化。

當scala目錄和java目錄顏色相同時,配置成功

1.4.3-2在scala包下,創(chuàng)建包com.wangting.chapterOl包名和Hello類

右鍵點擊scala目錄->New->Package->輸入com.wangting.chapterOl->

點擊OK。

右鍵點擊com.wangting.chapterOl->New->ScalaClass->Kind項選擇

Object->Name項輸入HellOo

1.4.3-3編寫輸出HelloScala案例

在類中中輸入main,然后回車可以快速生成main方法;

在main方法中輸入

//scala

println("helloidedfromscalacode")

//java

System.out.println("helloideafromjavacode")

scalawttectsrcmaincomwanglingchaptcrOItdHello.sc?la

Qmpomocml(scala_wt_test)QHell。.381aj*Array.scab

packagecom.wangling.chapterOl

?objectHello{

?jova?defmain(args:Array[String]):Unit={

■}resourcess■〃scald

▼Bisc?la

▼Blcom.wangt>ng.chapter01printlnC'helloiQqd-fromscalacode")

_________________?Hello

?BitestSystem.out.println(i1i;,

?-target

9)

UIpomjcml

華scala_wt_testjml

?HillExternalGbr?rie4

。ScratchesandConsoles

Heimain(args:ArrayfString])

Run:Hello

?"D:\ProgramFiles\Java\jdkl.8.0_221\bin\java.exe*'...

helloidedfromscalacode

=5helloideafromjavacode

:a

#Processfinishedwithexitcode0

/wt334502157

從上面執(zhí)行結(jié)果來看,System.out.printlnC'helloideafromjavacode")再次驗證

Java中部分代碼也是可以在Scala中直接運行。

void關(guān)鍵詞〃表示返回值,但是不遵循面向?qū)ο笳Z法,所以sea山中廢棄了,

但是scala引入了Unit類型,表示沒有返回值

object關(guān)鍵詞〃從語法角度講,語法表示聲明了一個伴生對象,Scala是純面向

對象的,去除了java中的static關(guān)鍵字,通過伴生對象模擬static效果

ScalaHelloWorld〃伴生對象的名稱

def關(guān)鍵詞〃標識聲明一個方法

main〃方法的名稱

args〃參數(shù)名稱

Array[String]〃參數(shù)類型,在Scala語言中,口表示泛型;聲明參數(shù)的時候,args

名稱在前,參數(shù)類型在后,名稱和類型之間用冒號分隔

Unit〃返回值類型為空,相當于java語言中的void關(guān)鍵字;Unit是一個類型,

當前類型只有一個實例0

1.4.5javastatic的作用回顧

1、修飾成員變量

給變量加上static關(guān)鍵字后,此變量變?yōu)槿肿兞?,JVM在加載時會直接將此變

量加載到方法區(qū)里而不是堆里,無論哪一個方法修改了此變量,此變量就會改變,

可以讓對象共享屬性。并且,當再次new該類的對象時,static修飾的類成員不

會被再次初始化,在程序運行過程中,static只會在第一次new時被初始化,當

然final另當別論

2、修飾成員方法

static修飾成員方法最大的作用,就是可以使用"類名.方法名"的方式操作方法,

避免了先要new出對象的繁瑣和資源消耗

3、靜態(tài)代碼塊

當new一個類對象時,static修飾的成員變量首先被初始化,隨后是普通成員,

最后調(diào)用Person類的構(gòu)造方法完成初始化。也就是說,在創(chuàng)建對象時,static

修飾的成員會首先被初始化。并且,當再次new該類的對象時,static修飾的類

成員不會被再次初始化,在程序運行過程中,static只會在第一次new時被初始

4、靜態(tài)導(dǎo)包

靜態(tài)導(dǎo)包用法,將類的方法直接導(dǎo)入到當前類中,從而直接使用“方法名”即可調(diào)

用類方法,更加方便

1.4.6伴生對象

scala里面沒有static關(guān)鍵字。那么如果想實現(xiàn)static的效果要怎么做呢?那就

可以使用伴生對象來實現(xiàn)。

在同一個scala文件中定義一個類,同時定義一個同名的。bject,那么它們就是

伴生類和伴生對象的關(guān)系,可以互相直接訪問私有的fieldo

?伴隨類產(chǎn)生的一個對象

?當我們對源文件進行編譯之后,默認會生成兩個字節(jié)碼文件,一個是伴生類,

另一個是伴生對象所屬類(帶有$符)

其實真正的伴生對象是伴生對象所屬類中創(chuàng)建的單例的對象

?如果不想默認生成伴生類,可以手動生成,要求伴生類名稱和伴生對象名稱

一致

實例代碼(嘗試理解)

packagecom.wangting.chapterOI

//object創(chuàng)建一個伴生對象

objectHello{

defmain(args:Array[String]):Unit={

//scala

println("helloidedfromscalacode")

//java

System.out.println("helloideafromjavacode")

//測試伴生對象

println(newStudent().name)

println(Student.bzr)

)

)

〃定義類

classStudent{

varname:String=_

varage:Int=_

//staticbzr:String

)

〃定義同名伴生對象

objectStudent{

varbzr:String="wangt"

代碼運行結(jié)果

helloidedfromscalacode

helloideafromjavacode

null

wangt

Processfinishedwithexitcode0

*/

第五節(jié)scala查看關(guān)聯(lián)源碼

下載官網(wǎng)上scala-sources-2.11.8.tar.gz源碼包,解壓出來的目錄放在

D:\scala-2.11.8\lib目錄下,注意解壓后是目錄,并非是一個jar包

放置到對應(yīng)lib目錄后,CTRL+鼠標點擊Array,可以跳轉(zhuǎn)至源碼,如果沒有

跳轉(zhuǎn),看一下代碼窗口右上角是否有提示,AttachSources...的提示,點一下關(guān)

聯(lián)即可

第二章變量和數(shù)據(jù)類型

第一節(jié)注釋

Scala注釋使用和Java完全一樣

2.1.1單行注釋

在內(nèi)容前加〃

DONOTEDIT,CHANGESWILLBELOST

Thisauto-generatedcodecanbemodifiedinscala.tools.cmd.gen.

Afterwards,runningtools/codegen-anyvalsregeneratesthissourcefile.

2.1.2多行注釋

包含在/*和*/之間

*多行注釋的內(nèi)容不能用于生成一個開發(fā)者文檔

*而文檔注釋的內(nèi)容可以生產(chǎn)?個開發(fā)者文檔

7

2.1.3文檔注釋

包含在/**和7之間

**'Unit'isasubtypeof[[scala.AnyVal]].Thereisonlyonevalueoftype

*'Unit',anditisnotrepresentedbyanyobjectintheunderlying

*runtimesystem.AmethodwithreturntypeUnit'isanalogoustoaJava

?methodwhichisdeclared'void'.

7

文檔注釋可以通過scaladoc命令把文檔注釋中的內(nèi)容生成文檔,并輸出到

HTML文件中,方便記錄程序信息

2.1.4idea編輯中代碼規(guī)范

(1)使用一次tab操作,實現(xiàn)縮進,默認整體向右邊移動,用sh用+tab整體向

左移動

(2)使用CTRL+ALT+L快捷鍵用來進行代碼格式化,常規(guī)的一些格式自動優(yōu)

(3)運算符兩邊習(xí)慣性各加一個空格。例如:2+4*5->2+4*5

(4)一行最長不超過80個字符,超過的請使用換行符"\"展示,盡量保持格式

優(yōu)雅

第二節(jié)變量和常量

2.2.1java變量回顧

常量:在程序執(zhí)行的過程中,其值不會被改變的變量

變量類型變量名稱=初始值

final常量類型常量名稱=初始值

packagecom.wangting.testl;

publicclasstest{

publicstaticvoidmain(String[]args){

inta=10;

//final修飾的變量不可改變關(guān)鍵詞表示b不能被修改,定義成b=20,不能再賦新的值

finalintb=20;

System.out.println(a);

System.out.println(b);

System.out.println(M===============,');

a=100;

//b=200;如果這里定義b=200會報錯

System.out.println(a);

System.out.println(b);

//輸出內(nèi)容

10

20

100

20

*/

2.2.2scala變量基本語法

var變量名[:變量類型]=初始值

val常量名[:常量類型人初始值

【注意】:

(1)能用常量的地方不用變量

(2)聲明變量時,類型可以省略,編譯器自動推導(dǎo),即類型推導(dǎo)

(3)類型確定后,就不能修改,說明Scala是強數(shù)據(jù)類型語言。

(4)變量聲明時,必須要有初始值

(5)在聲明/定義一個變量時,可以使用var或者val來修飾,var修飾的變量

可改變,val修飾的變量不可改。

packagecom.wangting.chapter02

objectTest_Var{

defmain(args:ArrayfString]):Unit={

//聲明變量時,類型可以省略,編譯器自動推導(dǎo),即類型推導(dǎo)

varw:lnt=100

vart=100

printin(w)

println(t)

println("==========")

〃Scala是強數(shù)據(jù)類型語言,類型確定后,就不能修改

//w=Mwang"#這樣會報錯,因為已經(jīng)申明了w是Int類型,不能再賦值String

//變量聲明時,必須要有初始值

//varwt#這樣會報錯,沒有初始值

〃在聲明一個變量時,可以使用var或者val來修飾,var修飾的變量可改變,val修飾的變量不可改變

varwang=50

//val修飾的變量不可改變

valting=50

println(wang)

println(ting)

wang=500

println(wang)

//ting=500#如果這里定義ting=500會報錯

println("==========")

//var修飾的對象引用可以改變

//val修飾的對象則不可改變

//但對象的狀態(tài)(值)卻是可以改變的。(比如:自定義對象、數(shù)組、集合等等)

//p1是var修飾的,p1的屬性可以變,而且p1本身也可以變

varp1=newPerson()

="wangt_p1"

println()

println(pl)

p1=null

printin(p1)

//p2是val修飾的,則p2本身就不可變(即p2的內(nèi)存地址不能變)

〃但P2的屬性是可以變,因為屬性并沒有用val修飾。

valp2=newPerson()

=Mwangt_p2"

println()

//p2=null#這樣會報錯,因為p2是val修飾的

printin(p2)

}

)

classPerson{

varname:String="wangt"

//輸出內(nèi)容

100

100

50

50

500

wangt_p1

com.wangling.chapter02.Person@1888ff2c

null

wangtJD2

com.wangting.chapter02.Person@35851384

Processfinishedwithexitcode0

7

第三節(jié)標識符的命名規(guī)范

Scala對各種變量、方法、函數(shù)等命名時使用的字符序列稱為標識符。即:凡是

自己可以起名字的地方都叫標識符。

命名規(guī)則

Scala中的標識符聲明,基本和Java是一致的,但是細節(jié)上會有所變化

(1)以字母或者下劃線開頭,后接字母、數(shù)字、下劃線

(2)以操作符開頭,且只包含操作符(+-*/#!等)

(3)用反引號''包括的任意字符串,即使是Scala關(guān)鍵字(39個)也可以

?package,import,class,object,trait,extends,with,type,for

?private,protected,abstract,sealed,final,implicit,lazy,override

?try,catch,finally,throw

?if,else,match,case,do,while,for,return,yield

?def,val,var

?this,super

?new

?true,false,null

packagecom.wangting.chapter02

objectTestName{

defmain(args:Array[String]):Unit={

/**以字母或者下劃線開頭,后接字母、數(shù)字、下劃線?/

varwt:String="wt"〃正確

println(wt)

varwt1234:String="wt1234"〃正確

println(wt1234)

//var1234wt:String="wt"〃錯誤,因為不能數(shù)字開頭

//varw-t:String="wt"〃錯誤,不能用-代表減號,scala中代表函數(shù)

//varwt:String="wt"〃錯誤,不能有空格

varwj:String="wt"〃正確

printin(w_t)

var_wt:String="wt"〃正確

printinLwt)

varlnt:String=*,wt_lnf〃正確,一般不推薦(因為在Scala中Int是預(yù)定義的字符,不是關(guān)鍵字)

println(lnt)

//var_:String="wt"〃錯誤,因為下劃線單獨使用不可以作為標識符,因為—被認為是一個方法

/**以操作符開頭,且只包含操作符(+?*/#!等)*/

var+-*/?#:String=,,wt_+-7!#n〃正確,一般不推薦使用

println(+-7!#)

//var+-7!#1234:String="wt"〃錯誤,如果操作符開頭,那后面必須都是操作符才可以

/**用反撇號包括的任意字符串,即使是Scala關(guān)鍵字(39個〉也可以7

//varif:String="wt"〃錯誤,不能直接用關(guān)鍵詞

var'if:String=//正確,使用反撇號把關(guān)鍵詞包起來可以,一般不推薦使用

printingif)

〃輸出內(nèi)容

第四節(jié)字符串輸出

基本語法

(1)字符串,通過+號連接

(2)printf用法:字符串,通過%傳值。

(3)字符串模板(插值字符串):通過${}獲取變量值;

注意:要使得${}變量引用生效時,開頭需要加“s”;否則會作為普通字符串輸出

packagecom.wangting.chapter02

objectTestCharType{

defmain(args:Array[String]):Unit={

varname:String="wangt”

varage:Int=30

〃字符串,通過+號連接

println(name+M_666_"+age)

println("===============")

//printf用法字符串,通過%傳值

printf("姓名=%$;年齡=%d",name,age)

println()

prinHn("===============")

〃多行字符串,在Scala中三個雙引號包圍多行字符串

〃應(yīng)用scala的stripMargin方法,在scala中stripMargin默認是T作為連接符

〃在多行換行的行頭前面加一個T符號即可JDEA回車后會自動加

varjay=

|久未放晴的天空

|依舊留著你的笑容

|哭過卻無法掩埋歉疚

|風(fēng)箏在陰天擱淺

I想念還在等待救援

I我拉著線復(fù)習(xí)你給的溫柔

|""".stripMargin

println(jay)

println("===============")

〃如果需要對變量進行運算,那么可以加${}實現(xiàn)

varwt=

sH"H

|歌名:擱淺

|演唱:周杰倫

|作詞:宋健彰作曲:周杰倫

|鋼琴:周杰倫編曲:鐘興民

|周杰倫年齡是:${age+10)

|""".stripMargin

println(wt)

println("===============")

valwt2=s"name=${name}"

println(wt2)

}

}

〃輸出內(nèi)容

/*

wangt_666_30

姓名=wangt;年齡=30

久未放晴的天空

依舊留著你的笑容

哭過卻無法掩埋歉疚

風(fēng)箏在陰天擱淺

想念還在等待救援

我拉著線復(fù)習(xí)你給的溫柔

歌名:擱淺

演唱:周杰倫

作詞:宋健彰作曲:周杰倫

鋼琴:周杰倫編曲:鐘興民

周杰倫年齡是:40

name=wangt

7

第五節(jié)鍵盤輸入

在編程中,需要接收用戶輸入的數(shù)據(jù),就可以使用鍵盤輸入語句來獲取

基本語法:

Stdin.readLine。、Stdin.readShort。、Stdin.readDouble。等等…

packagecom.wangting.chapter02

importscala.io.Stdln

objectTestinput{

defmain(args:Array[String]):Unit={

printlnf'請輸入角色名:")

varname=Stdln.readLine()

printing請輸入角色等級:")

varlevel=Stdln.readShort()

printing請輸入需要充值的金幣數(shù)量:")

vargold=Stdin.readDouble()

println("=====本次充值信息=====")

printing游戲角色:"+name)

println("當前角色等級:"+level)

printing充值金幣數(shù):"+gold)

//輸出內(nèi)容

請輸入角色名:

飄飄

請輸入角色等級:

100

請輸入需要充值的金幣數(shù)量:

600000

=====本次充值信息=====

游戲角色:飄飄

當前角色等級:100

充值金幣數(shù):600000.0

第六節(jié)數(shù)據(jù)類型

2.6.1java數(shù)據(jù)類型

基本

類型關(guān)鍵字字節(jié)大小描述

數(shù)

整數(shù)8最大存儲數(shù)據(jù)量是255,存放的數(shù)據(jù)范圍是

byte1字節(jié)

類型位T28~127之間。

整數(shù)16最大數(shù)據(jù)存儲量是65536,數(shù)據(jù)范圍是

short2字節(jié)

類型位-32768^32767之間。

整數(shù)32最大數(shù)據(jù)存儲容量是2的32次方減1,數(shù)據(jù)范圍

int4字節(jié)

類型位是負的2的31次方到正的2的31次方減I0

整數(shù)64最大數(shù)據(jù)存儲容量是2的64次方減1,數(shù)據(jù)范圍

long8字節(jié)

類型位為負的2的63次方到正的2的63次方減1。

浮點32數(shù)據(jù)范圍在3.4e-45~1.4e38,直接賦值時必須在

float4字節(jié)

類型位數(shù)字后加上f或F。

浮點64數(shù)據(jù)范圍在4.9e-324~l.8e308,賦值時可以加d

double8字節(jié)

類型位或D也可以不加。

字符16

char2字節(jié)存儲Unicode碼,用單引號賦值。

型位

只有true和

布爾

booleanfalse兩個取

包裝類:基本類型的包裝類主要提供了更多的實用操作,這樣更容易處理基本類

型。所有的包裝類都是final的,所以不能創(chuàng)建其子類,包裝類都是不可變對象

基本類型包裝類

byteByte

shortShort

charCharacter

基本類型包裝類

intInteger

longLong

floatFloat

doubleDouble

booleanBoolean

2.6.2scala數(shù)據(jù)類型

Scala與Java有著相同的數(shù)據(jù)類型,Scala數(shù)據(jù)類型都是對象,Scala中沒有類

似Java中那樣的原始類型

Scala基本數(shù)據(jù)類型有:Byte,Short,Int,Long和Char

整數(shù)類型加上Float和Double成為數(shù)值類型

此外還有String類型,除String類型在java.lang包中定義,其它的類型都

定義在包scala中。

比如Int的全名為scala.lnto實際上Scala運行環(huán)境自動會載入包scala和

java.lan

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論