scala完整笔记-5万字一周入门到精通系列_第1页
scala完整笔记-5万字一周入门到精通系列_第2页
scala完整笔记-5万字一周入门到精通系列_第3页
scala完整笔记-5万字一周入门到精通系列_第4页
scala完整笔记-5万字一周入门到精通系列_第5页
已阅读5页,还剩147页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

scala完整笔记-5万字一周入门到精通系列

写在开篇:

1.scala学习前一定要具备了解一些java基本知识,无需精通;如果从未接触java,

最好熟悉一门编程语言,否则相对还是学习起来相对吃力且很难学懂

2.本篇主要以代码示例为主,很多概念理论并没有展开很多篇幅,毕竟不是研究

学术亦或是大厂面试专攻,代码为主的本质还是因为知道有什么功能,特点是什

么,知道scala有这个东西,有了印象后便于以后工作中用到时回来ctrl+f搜索

一下关键词,可以很快看一下代码示例,再展开使用

3.非常多的代码并不是都写在一个文件中,所以在一处写了如何创建包创建对象

文件的方法等,就不会反复写重复的创建包创建类文件等内容

4.如果scala和java有很大区别的地方会对比代码,凸显不同之处

5.scaE许多代码块可以简写、代码逐步精简,对于初步接触的情况,不建议花

大量时间去研究如何把代码精简一步到位,至少先保证代码逻辑能敲出来,理解

为先,再随着熟练度提升慢慢提高精简度

第一章scala入门

第一节scala概述

1.1.1为什么学习scala

作为程序员一定对python不陌生,python无疑成为了最为热门的语言,如今盘

踞编程语言前三,但这背后原因则是因为人工智能、机器学习、区块链等超级大

概念持续性的高热度和不断增长的关注度所带动;

而sea山的发展趋势比较雷同python,只是领域不同,大数据现在也是一个有着

非常优秀的发展趋势,而大数据当前最火的框架要数spark和kafka,而这2个

框架又都是scala编写的,也就是想在大数据走的远,深挖进去就得学习scalao

1.1.2scala发展历史与作者

Scala语言是一种能够运行于JVM和.Net平台之上的通用编程语言,既可用于

大规模应用程序开发,也可用于脚本编程,它由MartinOdersk于2001开发,

2004年开始程序运行在JVM与.Net平台之上,由于其简洁、优雅、类型安全的

编程模式而受到关注。(JVM-JavaVirtualMachine[java虚拟机])

在Scala的创建之初,并没有怎么引起重视,随着ApacheSpark和ApacheKafka

这样基于Scala的大数据框架的崛起,Scala逐步映入大数据从业者的眼帘。

Scala的拥护者们认为Scala的主要优势是速度和它的表达性。目前使用scala

的作为支撑公司开发语言的包括Foursquare和Twitter。2009年Twitter把大部

分后台系统的开发语言从Ruby换成了Scala

Scala的创建者——MartinOdersk(马丁•奥德斯基)

马丁•奥德斯基是编译器及编程的狂热爱好者,他希望发明一种语言,能够使编

程变得更加高效简洁。当他接触到Java语言后,对Java语言产生了极大的

兴趣,所以他决定将函数式编程融入到Java中,由此发明了两种语言(Pizza&

Scala)oPizza和Scala极大地推动了Java语言的发展。

jdk5.0的泛型,for循环的增强,自动类型转换等,都是从Pizza引入的

新特性。

jdk8.0的类型推断,Lambda表达式就是从Scala引入的特性。

现在主流的JVM的javac编辑器就是马丁•奥德斯基编写的。jdk5.0和jdk

8.0的编译器就是他编写的。可以说是一个人就能做到整个团队的工作量。

1.1.3scala和java关系

scala与java可以无缝链接,在互联网领域java无疑是最具影响力的语言之一,

良好的社区,规范优美的代码规则,都使得java成为近年来互联网应用最为广

泛的语言,而scala与java几乎可以称作无缝链接,通过简单的import就可以

调用java中各式各样的类和方法,同时,scala完成的算法包也是以jar包的形

式出现,同样的语言实现都是经过JVM来实现。

1.1.4scala语言特点

•scala是一门以jvm为运行环境并将面向对象和函数式编程的最佳特性结合

在一起的静态类型编程语言。

•scala是一门多范式(multi-paradigm)的编程语言,scala支持面向对象和函数

编程。

•scala源代码会被编译为.class文件,然后运行于jvm上,并可以调用java

类库,实现两种语言的无缝对接。

•scala非常简洁,如三元运算、++、-等。

第二节scala开发环境搭建

1.2.1scala环境搭建前期准备

因为很多学习scala的学者几乎多多少少接触过java的,或者是准备步入大数

据行业相关的从业人员,如果从未接触过java语言并且也未打算从事大数据行

业;讲道理学习scala会相对吃力,不知道JAVA也不参与大数据那以后就不会

频繁用到,意义就小很多。

搭建scala开发环境必须电脑上已经具备了JAVA环境,安装了idea等开发软

件[软件都可以,建议用ide],安装JAVA环境和开发软件自行准备。

JAVA1.8环境

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

IMicrosoftWindows[版本10.0.19041.928]

(c)MicrosoftCorporationo保留所有权利。

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环境安装步骤

(1)开始前首先确保JDK1.8安装成功且环境变量没问题

(2)下载对应的Scala安装文件scala-2.1118.zip

scala官方网站:

找至Hdownload-大版本分scala3和scala2-点下载scala2

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

点击previousreleases可以找到过往所有版本下载,然后点击对应版本之后进

入到下载页面,一般开发都在windows或者Mac环境,下载对应版本即可(我

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

(3)解压scala-2.1L8.zip

解压即用,解压后的文件夹可以剪切到自己习惯存放程序的目录,

D:\scala-2.11.8(我直接放置在D盘目录下,解压路径中不能有任何中文名路径,

最好也不要有空格,毕竟编辑器最后都要配置scala环境,避免出现不可预估的

疑难杂症[例如:D:\新建文件夹\scala-2.11.8]这样带中文的路径不要用)

(4)配置Scala的环境变量

WIN10是右键我的电脑,点击高级系统设置-在系统属性里点高级分页-下

面有一个环境变量一在环境变量中,分当前用户配置和系统变量配置,直接在

系统变量中新建SCALA配置(环境变量要大写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产em32\OpenSSH\

D:\scala-2.11.8\bin

确定就肖

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

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

是新增SCALA一HOME是程序目录,这里加的是把程序目录中bin目录下的执

行文件配置到系统执行文件路径中去。

1.2.3测试初试scala

如果以上操作都顺利完成,可以进入到验证阶段,打开cmd命令行;

MicrosoftWindows[版本10.0.19041,928]

(c)MicrosoftCorporationo保留所有权利。

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命令行,说明环境已经没有问题。

根据java之前的经验,来个小实验

scala>

scala>varw=10

w:Int=10

scala>vart=20

t:Int=20

scala>varwt=w+t

wt:Int=30

scala>:quit

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

E:\tmp>

现在一切准备就绪,在准备idea开发环境之前,需要了解2件事情

第一件:简单的java和sea山运行流程,有必要知道这个过程

java运行原理

・.java源文件-->编译器(javac)-->.class字节码文件-->JVM(java不同

平台)->机器指令

Scala运行原理

•.scala源文件->编译器(scalac)->.class字节码文件->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文件中编辑内容并保存退出

publicclassJavaHelloworld{

publicstaticvoidmain(String[]args){

System.out.println(nHelloworldfromjava");

)

)

在Sea山HelloWorld.scala文件中编辑内容并保存退出[不用在意语法,这里只

是验证结果]

objectScalaHelloWorld{

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

printlnC'HelloWorldfromscala")

___________}

)

在当前目录下运行emd命令行

MicrosoftWindows[版本10.0.19041.928]

(c)MicrosoftCorporation0保留所有权利。

E:\tmp>javacJavaHelloworld.java

E:\tmp>scalacScalaHelloWorld.scala

可以看到

编译器(javac)编译JavaHelloworld.java文件->JavaHelloworld.class字节

码文件

编译器(scalac)编译ScalaHelloWorld.scala文件->默认是

Sea山HelloWorld.class(伴生类)、ScalaHelloWorld$.class(伴生对象所属类)2

个字节码文件

«-▼个]>此电脑>文件存储(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网盘

一..一一

结论验证:

#java运行JavaHelloworld成功输出(注意后而不用跟文件后缀)

E:\tmp>javaJavaHelloworld

Helloworldfromjava

#scala运行ScalaHelloWorld成功输出

E:\tmp>scalaScalaHelloWorld

HelloWorldfromscala

#采用scala来运行JavaHelloworld成功输出说明scala可以运行一些java编译字节码文件

E:\tmp>scalaJavaHelloworld

Helloworldfromjava

#采用java运行ScalaHelloWorld报错说明java不能运行scala编译字节码文件

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>

第三节idea中scala插件安装

首先确定ide已经安装并且可以正常使用

默认情况下IDEA不支持Scala的开发,需要安装Scala插件。在File-Settings

-Plugins查询Scala点击Install安装即可

安装完Scala插件后,根据提示重启idea程序应用

第四节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

内容可以自定义,一般不影响实验,但还是注意工程存储路径以及Groupld等

不要有中文和空格

1.4.2工程项目配置Scala框架

在AddFrameworksSupport窗口中,选择Scala,并且在右侧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创建项目的源文件目录

右键点击main目录->New->点击Diretory->新建代码目录->命名scala

右键点击scala目录,MarkDirectoryas选项->选择Sourcesroot,观察文

件夹颜色发生变化。

当scala目录和java目录颜色相同时,配置成功

1.4.3-2在scala包下,创建包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

从上面执行结果来看,System.out.printlnC'helloideafromjavacode")再次验证

Java中部分代码也是可以在Scala中直接运行。

void关键词〃表示返回值,但是不遵循面向对象语法,所以sea山中废弃了,

但是scala引入了Unit类型,表示没有返回值

object关键词〃从语法角度讲,语法表示声明了一个伴生对象,Scala是纯面向

对象的,去除了java中的static关键字,通过伴生对象模拟static效果

ScalaHelloWorld〃伴生对象的名称

def关键词〃标识声明一个方法

main〃方法的名称

args〃参数名称

Array[String]〃参数类型,在Scala语言中,口表示泛型;声明参数的时候,args

名称在前,参数类型在后,名称和类型之间用冒号分隔

Unit〃返回值类型为空,相当于java语言中的void关键字;Unit是一个类型,

当前类型只有一个实例0

1.4.5javastatic的作用回顾

1、修饰成员变量

给变量加上static关键字后,此变量变为全局变量,JVM在加载时会直接将此变

量加载到方法区里而不是堆里,无论哪一个方法修改了此变量,此变量就会改变,

可以让对象共享属性。并且,当再次new该类的对象时,static修饰的类成员不

会被再次初始化,在程序运行过程中,static只会在第一次new时被初始化,当

然final另当别论

2、修饰成员方法

static修饰成员方法最大的作用,就是可以使用"类名.方法名"的方式操作方法,

避免了先要new出对象的繁琐和资源消耗

3、静态代码块

当new一个类对象时,static修饰的成员变量首先被初始化,随后是普通成员,

最后调用Person类的构造方法完成初始化。也就是说,在创建对象时,static

修饰的成员会首先被初始化。并且,当再次new该类的对象时,static修饰的类

成员不会被再次初始化,在程序运行过程中,static只会在第一次new时被初始

4、静态导包

静态导包用法,将类的方法直接导入到当前类中,从而直接使用“方法名”即可调

用类方法,更加方便

1.4.6伴生对象

scala里面没有static关键字。那么如果想实现static的效果要怎么做呢?那就

可以使用伴生对象来实现。

在同一个scala文件中定义一个类,同时定义一个同名的。bject,那么它们就是

伴生类和伴生对象的关系,可以互相直接访问私有的fieldo

•伴随类产生的一个对象

•当我们对源文件进行编译之后,默认会生成两个字节码文件,一个是伴生类,

另一个是伴生对象所属类(带有$符)

其实真正的伴生对象是伴生对象所属类中创建的单例的对象

•如果不想默认生成伴生类,可以手动生成,要求伴生类名称和伴生对象名称

一致

实例代码(尝试理解)

packagecom.wangting.chapterOI

//object创建一个伴生对象

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"

代码运行结果

helloidedfromscalacode

helloideafromjavacode

null

wangt

Processfinishedwithexitcode0

*/

第五节scala查看关联源码

下载官网上scala-sources-2.11.8.tar.gz源码包,解压出来的目录放在

D:\scala-2.11.8\lib目录下,注意解压后是目录,并非是一个jar包

放置到对应lib目录后,CTRL+鼠标点击Array,可以跳转至源码,如果没有

跳转,看一下代码窗口右上角是否有提示,AttachSources...的提示,点一下关

联即可

第二章变量和数据类型

第一节注释

Scala注释使用和Java完全一样

2.1.1单行注释

在内容前加〃

DONOTEDIT,CHANGESWILLBELOST

Thisauto-generatedcodecanbemodifiedinscala.tools.cmd.gen.

Afterwards,runningtools/codegen-anyvalsregeneratesthissourcefile.

2.1.2多行注释

包含在/*和*/之间

*多行注释的内容不能用于生成一个开发者文档

*而文档注释的内容可以生产•个开发者文档

7

2.1.3文档注释

包含在/**和7之间

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

*'Unit',anditisnotrepresentedbyanyobjectintheunderlying

*runtimesystem.AmethodwithreturntypeUnit'isanalogoustoaJava

・methodwhichisdeclared'void'.

7

文档注释可以通过scaladoc命令把文档注释中的内容生成文档,并输出到

HTML文件中,方便记录程序信息

2.1.4idea编辑中代码规范

(1)使用一次tab操作,实现缩进,默认整体向右边移动,用sh用+tab整体向

左移动

(2)使用CTRL+ALT+L快捷键用来进行代码格式化,常规的一些格式自动优

(3)运算符两边习惯性各加一个空格。例如:2+4*5->2+4*5

(4)一行最长不超过80个字符,超过的请使用换行符"\"展示,尽量保持格式

优雅

第二节变量和常量

2.2.1java变量回顾

常量:在程序执行的过程中,其值不会被改变的变量

变量类型变量名称=初始值

final常量类型常量名称=初始值

packagecom.wangting.testl;

publicclasstest{

publicstaticvoidmain(String[]args){

inta=10;

//final修饰的变量不可改变关键词表示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);

//输出内容

10

20

100

20

*/

2.2.2scala变量基本语法

var变量名[:变量类型]=初始值

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

【注意】:

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

(2)声明变量时,类型可以省略,编译器自动推导,即类型推导

(3)类型确定后,就不能修改,说明Scala是强数据类型语言。

(4)变量声明时,必须要有初始值

(5)在声明/定义一个变量时,可以使用var或者val来修饰,var修饰的变量

可改变,val修饰的变量不可改。

packagecom.wangting.chapter02

objectTest_Var{

defmain(args:ArrayfString]):Unit={

//声明变量时,类型可以省略,编译器自动推导,即类型推导

varw:lnt=100

vart=100

printin(w)

println(t)

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

〃Scala是强数据类型语言,类型确定后,就不能修改

//w=Mwang"#这样会报错,因为已经申明了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修饰的对象则不可改变

//但对象的状态(值)却是可以改变的。(比如:自定义对象、数组、集合等等)

//p1是var修饰的,p1的属性可以变,而且p1本身也可以变

varp1=newPerson()

="wangt_p1"

println()

println(pl)

p1=null

printin(p1)

//p2是val修饰的,则p2本身就不可变(即p2的内存地址不能变)

〃但P2的属性是可以变,因为属性并没有用val修饰。

valp2=newPerson()

=Mwangt_p2"

println()

//p2=null#这样会报错,因为p2是val修饰的

printin(p2)

}

)

classPerson{

varname:String="wangt"

//输出内容

100

100

50

50

500

wangt_p1

com.wangling.chapter02.Person@1888ff2c

null

wangtJD2

com.wangting.chapter02.Person@35851384

Processfinishedwithexitcode0

7

第三节标识符的命名规范

Scala对各种变量、方法、函数等命名时使用的字符序列称为标识符。即:凡是

自己可以起名字的地方都叫标识符。

命名规则

Scala中的标识符声明,基本和Java是一致的,但是细节上会有所变化

(1)以字母或者下划线开头,后接字母、数字、下划线

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

(3)用反引号''包括的任意字符串,即使是Scala关键字(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={

/**以字母或者下划线开头,后接字母、数字、下划线•/

varwt:String="wt"〃正确

println(wt)

varwt1234:String="wt1234"〃正确

println(wt1234)

//var1234wt:String="wt"〃错误,因为不能数字开头

//varw-t:String="wt"〃错误,不能用-代表减号,scala中代表函数

//varwt:String="wt"〃错误,不能有空格

varwj:String="wt"〃正确

printin(w_t)

var_wt:String="wt"〃正确

printinLwt)

varlnt:String=*,wt_lnf〃正确,一般不推荐(因为在Scala中Int是预定义的字符,不是关键字)

println(lnt)

//var_:String="wt"〃错误,因为下划线单独使用不可以作为标识符,因为—被认为是一个方法

/**以操作符开头,且只包含操作符(+・*/#!等)*/

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

println(+-7!#)

//var+-7!#1234:String="wt"〃错误,如果操作符开头,那后面必须都是操作符才可以

/**用反撇号包括的任意字符串,即使是Scala关键字(39个〉也可以7

//varif:String="wt"〃错误,不能直接用关键词

var'if:String=//正确,使用反撇号把关键词包起来可以,一般不推荐使用

printingif)

〃输出内容

第四节字符串输出

基本语法

(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中三个双引号包围多行字符串

〃应用scala的stripMargin方法,在scala中stripMargin默认是T作为连接符

〃在多行换行的行头前面加一个T符号即可JDEA回车后会自动加

varjay=

|久未放晴的天空

|依旧留着你的笑容

|哭过却无法掩埋歉疚

|风筝在阴天搁浅

I想念还在等待救援

I我拉着线复习你给的温柔

|""".stripMargin

println(jay)

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

〃如果需要对变量进行运算,那么可以加${}实现

varwt=

sH"H

|歌名:搁浅

|演唱:周杰伦

|作词:宋健彰作曲:周杰伦

|钢琴:周杰伦编曲:钟兴民

|周杰伦年龄是:${age+10)

|""".stripMargin

println(wt)

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

valwt2=s"name=${name}"

println(wt2)

}

}

〃输出内容

/*

wangt_666_30

姓名=wangt;年龄=30

久未放晴的天空

依旧留着你的笑容

哭过却无法掩埋歉疚

风筝在阴天搁浅

想念还在等待救援

我拉着线复习你给的温柔

歌名:搁浅

演唱:周杰伦

作词:宋健彰作曲:周杰伦

钢琴:周杰伦编曲:钟兴民

周杰伦年龄是:40

name=wangt

7

第五节键盘输入

在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取

基本语法:

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请输入需要充值的金币数量:")

vargold=Stdin.readDouble()

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

printing游戏角色:"+name)

println("当前角色等级:"+level)

printing充值金币数:"+gold)

//输出内容

请输入角色名:

飘飘

请输入角色等级:

100

请输入需要充值的金币数量:

600000

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

游戏角色:飘飘

当前角色等级:100

充值金币数:600000.0

第六节数据类型

2.6.1java数据类型

基本

类型关键字字节大小描述

整数8最大存储数据量是255,存放的数据范围是

byte1字节

类型位T28~127之间。

整数16最大数据存储量是65536,数据范围是

short2字节

类型位-32768^32767之间。

整数32最大数据存储容量是2的32次方减1,数据范围

int4字节

类型位是负的2的31次方到正的2的31次方减I0

整数64最大数据存储容量是2的64次方减1,数据范围

long8字节

类型位为负的2的63次方到正的2的63次方减1。

浮点32数据范围在3.4e-45~1.4e38,直接赋值时必须在

float4字节

类型位数字后加上f或F。

浮点64数据范围在4.9e-324~l.8e308,赋值时可以加d

double8字节

类型位或D也可以不加。

字符16

char2字节存储Unicode码,用单引号赋值。

型位

只有true和

布尔

booleanfalse两个取

包装类:基本类型的包装类主要提供了更多的实用操作,这样更容易处理基本类

型。所有的包装类都是final的,所以不能创建其子类,包装类都是不可变对象

基本类型包装类

byteByte

shortShort

charCharacter

基本类型包装类

intInteger

longLong

floatFloat

doubleDouble

booleanBoolean

2.6.2scala数据类型

Scala与Java有着相同的数据类型,Scala数据类型都是对象,Scala中没有类

似Java中那样的原始类型

Scala基本数据类型有:Byte,Short,Int,Long和Char

整数类型加上Float和Double成为数值类型

此外还有String类型,除String类型在java.lang包中定义,其它的类型都

定义在包scala中。

比如Int的全名为scala.lnto实际上Scala运行环境自动会载入包scala和

java.lan

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论