为什么要学习Scala
因为在线计算需要Spark和Scala,Spark的底层是Scala,Scala基于Java
开发效率高,运行速度快
Scala的介绍
Scala是一门多范式的编程语言,既是面向对象也是函数式编程
函数式编程:可以把函数当成一个变量去传递给一个方法
什么是多范式
多范式:多种形态编程 常见的有过程式 函数式 泛型编程
Scala语言和Java语言的对比
相同点:
- Scala和Java可以无缝混编
- 它们都是基于jvm
- 它们可以互相调用
不同点:
- Scala类型自动推断
- val标识常量 var标识变量
- 支持函数式编程
- 构造器不一样
- Java中可以自动默认值,Scala中必须手动给默认值
- Scala不需要分号,但是Java必须有
- get set方法要自己实现
- scala中没有return
Scala懒加载
lazy val a = {println(12312)}
Scala中使用lazy关键字修饰变量,就是惰性变量,实现延迟加载
注意:惰性变量只能是常量,并且只有在调用惰性变量时,再回去实例化这个变量,一般使用在比较耗时的应用
Scala差值器
-
s差值器 调用变量
val name = "aaa" println(s"asfa:$name")
-
f差值器
val height = 1.73568 println(f"身高是${height}%.2f")
-
raw差值器 原样输出
println(raw"a\nb\b\tc")
Scala访问修饰符
- private:一个类的内部使用
- protected:自己类和子类可以访问,比java更加严格,java同一个包可以在不同的类使用
- public:如果没有指定修饰符,这样的成员在任何地方都可以使用
Scala类型转换
值一定是可以进行转换的,如下:
val a = "123"
a.toInt.getClass.getName
Scala技能练习
- 统计三个班的成绩情况,每个班有五名同学,每位同学的成绩自己输入,求出每个班的平均分和所有班级的平均分?
var aa = 0
for (c <- 1 to 3){
println("请输入第"+c+"个班级")
val banji = readChar()
println("请输入五位同学的成绩")
var count = 0
var b = 0;
for (a <- 1 to 5){
val sorce = readInt()
count+=sorce
b+=1
}
println(banji+"班同学的平均成绩是:"+count/b)
aa+=b
}
println("三个班平均分数为"+aa/3+"分")
- 100个以内的数求和,求出和大于20 的当前数
var sum = 0
var c :Boolean = true
for (a <- 1 to 100 if c == true){
sum+=a
if(sum>=20){
println(a)
c = false
}
}
println(sum)
- 打印出九九乘法表
for (a <- 1 to 9; b <- 1 to a) printf(a + "*" + b + "=" + a * b + {if(a==b)"\n" else "\t"})
- 在Scala中如何获取字符串“Hello”的首字符和尾字符
val a = "Hello"
printf(a.take(1))
printf(a.takeRight(1))