一、Scala概述
Scala 是一门多范式(multi-paradigm)的编程语言,其运行在 Java 虚拟机上,并兼容现有的 Java 程序。Scala 源代码被编译成 Java 字节码,所以它可以运行于 JVM 之上,并可以调用现有的 Java 类库。所以说安装Scala之前需要安装Java。
二、Scala变量和数据类型
由于Scala和Java有着很多相似之处,所以在很多方面没有改动。
1. 注释
单行注释 //
多行注释 /* */
2. 变量和常量
val a:Int = 15 通过val关键字声明一个常量
var b = 20 通过var关键字声明一个变量
对比:
1. var修饰的变量可以重新赋值 val修饰的常量不可以重新赋值
2. val定义常量需要指定类型,var定义变量则不需要指定类型 会自动推断类型
3. 用标识符声明变量
在Scala中可以用操作符来声明一个变量,但是要求这个变量名只能全是操作符
val +*/-! = "2333"
println(+*/-!)
4. 控制台输入
键盘输入 StdId 用来输入和Java Scanner一样
val i = StdIn.readLine()
5. 文件读入
// 文件读入 传入路径
Source.fromFile("E:\\Scala\\学习笔记.txt").foreach(print)
// 文件写入 直接用Java的类就行
val writer = new PrintWriter(new File("E:\\Scala\\111.txt"))
writer.write("Hello Scala from")
writer.close()
6. 用反引号引起来的可以作为变量
// 通过反引号引起来的包含关键字 都可以用作变量
val `if` = 15
println(`if`)
9. 转换成
// 通过先赋值后转成Int类型的方式 这样就会自动成ascall码
val c1: Char = 'a'
val n1: Int = c1
println(n1)
val c2:Char = (n1 + 1).toChar
println(c2)
10. 数据类型系统
在Scala中的数据类型,any是任何类的父类,nothing是任何类的子类,StringOps放到了 值对象的下面,在Java中String属于引用一类的。
11. 空对象
在Scala中有三种空状态
1. null 代表空引用
2. Unit Unit代表没有返回值,和Void类一样,会返回()
3. nothing 代表引用和值都没有 多见于报错
nothing是任何类的子类,但是不能将空引用去赋值给一个变量。
12. 强制类型转换
通过 toInt方法进行强制转换转换
val age: Int = "10".toInt
三、运算符
1. scala的 '==' 是判断值是否相等,并非判断引用是否相等,eq方法判断引用是否相等。
val a1: String = "aaa"
val a2: String = new String("aaa")
// scala里面直接会对比值 并非去对比引用
println(a1 == a2) // true
// 这样判断引用是否相等
println(a1.eq(a2)) // false
2. 运算操作
val a3: Int = 20
val a4: Int = 10
println(a3 + a4)
println(a3.+(a4)) // 实际上是有一个叫做 '+' 的方法 和直接相加的效果一样 运算符底层就是去调用方法
println(11.2 toInt) // 这样就是直接调用toInt方法 用空格作为间隔 但是需要导入包import scala.language.postfixOps
四、流程控制
1. if分支
// 多分支判断结果返回
val pop: String = if(x < 11){
"2333" // 这里是直接返回这个值 省去了return
}else if(x == 0){
"0000"
}else{
"8888"
}
2. 循环
while和do...while循环和Java一样,在这里不再说明。主要介绍for循环
// for循环 和py类似 for..in 这里的in换成了<- to代表着范围 从哪到哪
// to 是会包含最后一个数 until不会包含 by代表步长的意思
for(i <- 0 to 9 by 2 ){
println(i)
}
// 使用range的伴生对象进行循环
for(i <- Range(1, 10)){ // 使用range的伴生对象 不会打印10出来
println(i)
}
// 集合遍历
for(i <- Array(1, 10)){
println(i)
}
// 当i不等于2的时候才会执行
for(i <- 1 to 5 if i != 2) {
println(i)
}
// 通过yield可以将for循环的变量进行返回并组成一个集合
val value = for (i <- 1 to 5) yield i
println(value)
3. 退出循环
// 这样声明一个可以break的循环体
Breaks.breakable(
for(i <- Array(1, 10)){
if(i == 10){
Breaks.break() // 这样退出循环
}
}
)