版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 44725-2024盲文出版物版式
- 挂名法人与实际控制人协议书范本版3篇
- 2024年度企业间版权转让保密协议3篇
- 2024年度租赁合同中租赁物的描述与租赁期限的具体规定3篇
- 二零二四年环保设施设计与施工合同
- 乘法课件教学课件
- 无产证房屋买卖合同书
- 2024年度设备租赁合同租赁设备及租赁期限详细规定
- 人教版九年级化学第四单元自然界的水3水的组成教学课件
- 顾问合作协议书范本
- 国有企业纪检监察课件
- 公司“119”消防宣传月活动实施方案
- GB∕T 36655-2018 电子封装用球形二氧化硅微粉中α态晶体二氧化硅含量的测试方法
- 新部编(统编)人教版六年级上册语文期末复习全册分单元知识考点梳理
- 大马大马告诉我
- 电感耦合等离子体质谱仪分析(水质)原始记录
- 高考冲刺主题班会——勇往直前无畏风雨课件(17张PPT)
- 融优学堂人工智能(北京大学)章节测验答案
- 植物源农药的提取分离和结构鉴定基础
- 银行年度金融消费者权益保护工作自评报告
- (项目管理)项目管理硕士(MPM)项目
评论
0/150
提交评论