scala是基于JVM的多范式编程语言(函数式的面向对象语言)
兼容java(可以访问java类库)
静态类型,支持类型推断和模式匹配
环境
java版本 1.8
scala版本 2.11.12(下载地址:https://www.scala-lang.org/download/2.11.12.html)
IDEA 版本2020.3.2(要下载和IDEA版本一致的scala插件)
scala定义变量
val/var 变量名:变量类型 = 初始值(用val的,不可重新赋值,用var可以)(或者使用类型推断来定义变量(val/var 变量名 = 初始值))
插值表达式(s"name = ${name}")
"""中间的内容,换行,空格也可以"""
惰性赋值(lazy val/var 变量名 = 表达式)
当有一些变量保存的数据较大,而且这些数据又不需要马上加载到JVM中,就用惰性赋值(用到时加载)
(数据类型 Unit 相当于java的void,Nothing是所有类型的子类,一般结合异常来使用)
接受键盘输入(stdIn.readxxx)
scala的条件表达式有返回值,java没有(val result = if(condition == 1) 1 else 0)
块表达式
val a = {
print("1+1")
1+1 //最后一行作为a的值
}
for循环
val num = 1 to 10
for(i <- num, j <- 1 to 5){
}
守卫
for(i <- 2 to 12 if i%3==0) print(i) //打印能被三整除
for推导式,yield生成集合
val name = for(i<-1 to 10) yeild i * 10
如果要使用break,continue,需要引用相应的包
break:
breakable{
for(i <- 1 to 10)
if(i == 5) break() else print(i)
}
continue
for(i <- 1 to 10){
breakable{
if(i == 5) break() else print(i)
}
}
方法
def 方法名(参数名:参数类型,参数名:参数类型) : [return type] = {
方法体
}
lazy 不能修饰var
函数
val getSum = (a:Int,b:Int) => a + b
val res = getSum(1,2)
伴生对象和伴生类实现了静态方法和普通方法等的分离
当object修饰的单例对象名和类名重复时,他就是伴生对象
apply免new
单例对象可以继承类
变量重写时不能重写var修饰的变量
方法重写
scala除了抽象方法,还有抽象字段