1、 为什么要学习scala?
- 在线计算 spark scala ,a.spark 底层是scala ,我们需要看源码
b.scala 基于java ,开发效率高,运行速度快
2、 scala的介绍
- scala 是一门多范式的编程语言,即面向对象也是函数式编程
面向对象:万物皆对象 封装 实例对象 类 继承
函数式编程: 面向过程 函数当成编程
3、 scala语言和Java语言对比
相同点:
-
java和scala可以无缝混编,它们都是基于jvm
-
二者可以相互调用
不同点:
1、 类型自动推断,并如果写类型化,是写在变量名的后面
2、val var
3、支持函数式编程
4、构造器不一样
5、java中可以自动默认值,scala中必须手动给默认值
6、scala 不需要分号,但是java 必须要有
7、get set 方法自己实现
age:相当于java中的getter方法
age_$eq:相当于java中set方法
8、java中的放回只用return scala 中没有return
5、main方法讲解
main(static=object)
- 语法
关键字 方法名 (参数):返回值类型={
方法体
}
def main(args: Array[String]): Unit = {
}
6、常量和变量
-
定义
常量:是在运行的过程中,其值不会发生变化的量 例如:数值3 字母A 修饰的关键字val
变量:是在运行的过程中,其值可以发生变化的量 例如:时间,年龄 修饰的关键字var -
scala中的数据数据类型
any是所有类型的超类,也成为顶级类型
anyVal (值类型) :
int short byte long double string char boolean Uint (9个)
长度:4 2 1 8 8 4 2 1 空
anyRef(引用类型) :
List map option yourclass …
注意:java类型中没有和scala中Nothing对应的类型 -
懒加载
- scala 中使用lazy 关键字修饰变量,就是惰性变量,实现延迟加载
注意:惰性变量只能是常量,并且只有在调用惰性变量时,才会去实例化这个变量 - 案例演示
- scala 中使用lazy 关键字修饰变量,就是惰性变量,实现延迟加载
//正常的
var str = {
println("helloworld")
}
//懒加载的形式
lazy val str1 = {
println("helloworld")
}
//调用这个变量
str1
- 好处
使用在比较耗时的业务中,如网络IO 磁盘IO 场景:
9、 差值器
scala中有三种插值器
- 在任何字符串前面加上s,就可直接在字符串中使用变量了
val name:String="cat"
println(s"she is name is ${name}")
- f 插值器: 保留小数点后两位
val height=1.23568
println(f"身高是${height}%.2f")
- raw插值器:是输入字符串原样,不进行转义
输出结果:
补充知识:
访问修饰符
private:一个类的内部可用
protected:自己类 子类也可以被访问(这个比java更加严格,java同一个包的其他类也可以访问)
public:如果没有指定修饰符 ,这样的成员在任何地方都可以被访问
注意:
如果不指定的情况下,就是public
类型转换
- String 类型转换为Int
val age:String ="123"
println(age.toInt.getClass.getName)
- Int 类型转换为String
val b:Int =123
println(b.toString.getClass.getName)
- String类型转换为Float类型
val c:String ="123.123"
println(c.toFloat.getClass.getName)