每个值都是对象
对象的数据类型和行为由类(Class)和特征(Trait,类似于interface)描述
利用特征实现混入式多重继承
函数式编程
每个函数都是一个值
支持高阶函数、柯里化(currying)、样例类(case class)及模式匹配……
Scala是静态类型语言
扩展性:隐式类、字符串插值
scala注释使用和java完全一样
使用tab操作,实现操作
ctrl+alt+L进行格式化
运算符两边习惯性各加一个空格
一行最长不超过80个字符
shift +enter 下一行
ctrl +alt +enter 上一行
常量:在程序执行过程中,其值不会被改变的变量
java:
变量类型 变量名称 = 初始值 int a = 1;
final 变量类型 变量名称 = 初始值 final int b =1
scala:
var 变量名[:变量类型] =初始值 var a:Int = 1
val 常量名[:常量类型] =初始值 val b:Int = 1
注意:能用常量的地方不用变量
Any:所有类型的超类(顶级类型)
AnyVal:表示值类型的超类
AnyRef:表示引用类型的超类,对应java.lang.Object
Unit:表示无值,类似Java中的void
Nothing:所有类型的子类
Null:表示null或空引用
s插值器:允许将变量引用、表达式直接插入字面字符中
val name = "tom"
println(s"hello,$name")
println(s"1+1=${1+1}")
f插值器:生成简单的格式化串,所有的变量引用都应当后跟一个printf-style格式的字符串,如%d,%s,%f(整数、字符串、单精度)
val height = 1.9d
val name = "tom"
println(f"$name%s is $height%2.3f meters")
%2.3f 2:整数加小数最小两位 3:保留三位小数
raw插值器
println(s"a\nb")
println(raw"a\nb")
if和if…else
val a = 10
if (a > 5) {
println("max five")
}
if (a > 5) {
println("max five")
}else if(a == 5){
println("equal five")
} else {
println("min five")
}
条件语句返回值
Scala任何表达式都要返回值
val a = 10
val b=if(a==10) a+1 else a
println(b)
单行表达式可以省略{} 输出结果:11
代码块{…}也是表达式,返回值是最后一个表达式的结果
val x = 10
val y = {
println("hello")
x + 1
x + 5
}
println(y)
输出结果:
hello
15
val x = 1
val y = {
x+1;print("我是代码块");x+4
}
println(y)
输出结果:我是代码块5
while
var num:Int = 0
while (num < 100) {
println(num)
num = num + 1
}
do…while
var num:Int = 0
do {
println(num)
num = num + 1
}while(num < 5)
for 循环
to 双闭区间 until 左闭右开
val num:Int = 10
for (i <- 1 to num){
println(i)
}
for (i <- 1 until num){
println(i)
}
中断
import scala.util.control.Breaks._
val num:Int = 10
breakable(
for (i <- 1 to num){
if(i == 5) break
println(i)
}
)
for循环过滤
多个条件用;隔开
val num = 10
for (i <- 1 to num; if i%2==0;if i>5){
println(i)
}
for循环返回值
for循环中的yield会把当前的元素记下来,保存在集合中,循环结束后将返回给该集合。也称for推导式
val num = 10
val ints = for (i <- 1 to num;if i%2==0;if i>5) yield i
println(ints)
for (elem <- ints) {
println(elem)
}
println(ints(0))
val itor = ints.iterator
while (itor.hasNext) {
println(itor.next())
}
存储固定大小的元素
数组索引从0开始
//创建方式一
val s1 = new Array[String](3)
s1(0)="wanqing"
s1(1)="zhaoqi"
s1(2)="wangcheng"
//创建方式二
//调用Array的伴生对象中的apply()返回Array实例,相当于构造
val s2 = Array("aaa","bbb","ccc")
//创建方式三区间数组
val s3 = Array.range(1,10,2)
println(s1.length)
for (elem <- s3) {
println(elem)
}
元组
可以包含不同类型的元素
最多支持22个元素
使用下划线访问元素
var tp1 = ("mike",1,"zzzz")
println(tp1._1)