1. 声明值和变量
1.1 常量声明
// val 不可变,在声明时就必须初始化,之后不能再赋值
val aa = "hello"
// aa: String = hello
// scala 具有类型自动推断功能,可根据右边的值进行变量类型推断
1.2 变量声明
import java.lang._ // "_"表示所有
// var 可变,在声明时也须初始化
var bb: java.lang.String = "11"
或
var bb: String = "11"
2. 基本数据类型和操作
与java不同,scala中的数据类型都是“类”,并且都是包Scala的成员。比如 Int -> scala.Int,其中比较特别的是String -> java.lang.String
2.1 字面量(literal)
val i = true
val i = 'A'
2.2 操作符
2.1 基本操作符
操作符就是方法(+,-,*等) ,即所有操作符都是函数!!!
a 方法 b <=> a.方法(b)
object T1 {
def main(args: Array[String]): Unit ={
var res = 5+3
var res2 = (5).+(3)
println(res2)
}
}
2.2 富包装类
scala 中每个基本数据类型都有一个对应的富包装类(位于scala.runtime包中)
如 Int -- > RichInt, String -- > RichString
当一个基本数据类型的对象调用其富包装类提供的方法,scala会自动通过隐式转换将该对象转换为对应的富包装类型,然后再调用相应的方法。
var a = 5
var b = 2
var res3 = a.max(b)
// 5
var res4 = a min b
// 2
3. Range
创建一个从1到5的数值序列,包含区间终点5,步长为1。
println(1 to 5)
或
println(1.to(5))
// Range(1, 2, 3, 4, 5)
变形
println(1 until 5)
// Range(1, 2, 3, 4)
println(1 to 5 by 2)
// Range(1, 3, 5)
println(0.1f to 1.0f by 0.2f)
// NumericRange(0.1, 0.3, 0.5, 0.7, 0.9)
val pt = LocalDate.parse("2021-08-31", DateTimeFormatter.ofPattern("yyyy-MM-dd"))
(1 to 3).map(pt.plusDays(_)).foreach(println)
// 2021-09-01
// 2021-09-02
// 2021-09-03
4. 控制台输入输出语句
import io.StdIn._
var i = readInt()
var res = readLine("please input your name:\n")
// 格式化输出
printf("name:%s, age:%d\n", "kk", 25)
// name:kk, age:25
5. 读写文件&异常处理
scala 不支持java中“受检查异常”
import java.io.PrintWriter
import java.io.{FileNotFoundException,IOException}
import scala.io.{Source,BufferedSource}
object T1 {
// 读文件
def read_file(file_name: String): Unit ={
var f:BufferedSource = null
try {
f = Source.fromFile(file_name)
val lines = f.getLines()
for(line <- lines)
println(line)
} catch {
case ex: FileNotFoundException =>
println(ex.getMessage)
case ex: IOException =>{
println(ex.getMessage)
}
} finally {
f.close()
}
}
// 写文件
def write_file(file_name: String): Unit ={
var f:PrintWriter = null
try {
f = new PrintWriter("out.txt")
for(i <- 1 to 5 by 2)
f.println(i) // 写入文件
} catch {
case ex: FileNotFoundException =>
println(ex.getMessage)
case ex: IOException =>{
println(ex.getMessage)
}
} finally {
f.close()
}
}
def main(args: Array[String]): Unit ={
var file_name = "out.txt"
write_file(file_name)
read_file(file_name)
}
}
7. 控制结构
7.1 if 条件表达式
val x = -3
if(x>0){
println("正数")
}else if(x==0){
println("0值")
}else{
println("负数")
}
注意:Scala 中if表达式的值可以赋值给变量
var x = if(3>0){
"非负数"
}else{
"负数"
}
println(x)
7.2 while 循环
7.2.1 while
var i = 1
var sum = 0
while(i<=100){
sum += i
i += 1
}
println(sum)
7.2.2 do while
var i = 1
var sum = 0
do {
sum += i
i += 1
} while(i<=100)
println(sum)
7.3 for 循环
"变量<-表达式"被称为生成器。
如果要过滤出一些满足指定条件的结果,需使用到“守卫(guard)”表达式。
for(i <- 1 to 5 if i%2==0)
println(i)
// 2 4
// 双重循环
for(i <- 1 to 5 if i%2==0; j<-1 to 5 if j%2!=0)
println(i+"\t"+j)
或
for(i <- 1 to 5 if i%2==0)
for(j<-1 to 5 if j%2!=0)
println(i+"\t"+j)
for 推到式
for结构可以在每次执行的时候创造一个值,然后将包含了所有产生值的集合作为for循环表达式的结果返回。
var r = for(i <- 1 to 5) yield{
println(i); i}
println(r)
// Vector(1, 2, 3, 4, 5)