------------本文会在一些地方和Java进行对比,以便更好理解、学习Scala
为什么要学习scala?
- spark底层是scala ,要想学好spark 我们就必须会scala这门语言
- scala语言有自己的优势,无论是编程的效率还是执行速度
scala语言的介绍:
scala 是一门多范式的编程语言,既面向对象、也是函数式编程。
scala 运行在Java虚拟机上,并兼容现有的Java程序。
scala 源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库
scala环境配置: file----->Settings
下载好之后,重启IDEA
FIle--->New---->Project
Next-------------- 按下图示意指定SDK路径(如果需要SDK文件,可以私信或评论),一直NEXT,一个Scala项目就创建完成了
新建Scala类时,会出现3个选项,选择Object(后续会说为什么)
变量:
变量:修饰的关键字var var a = "abc"
常量:修饰的关键字val val b = "abc"
1.Any是所有类型的超类型,也称为顶级类型。
Any有两个直接子类:AnyVal和AnyRef。
2.AnyVal代表值类型。有9个预定义的非空的值类型分别是:Double、Float、Long、Int、Short、Byte、Char、Unit和Boolean。
Unit是不带任何意义的值类型,它仅有一个实例可以像这样声明:()。所有的函数必须有返回,所以说有时候Unit也是有用的返回类型。
3.AnyRef代表引用类型。所有非值类型都被定义为引用类型。
在Scala中,每个用户自定义的类型都是AnyRef的子类型。
4.Null是所有引用类型的子类型(即AnyRef的任意子类型)。它有一个单例值由关键字null所定义。
5.Nothing是所有类型的子类型,也称为底部类型。没有一个值是Nothing类型的
类型转换:
//1)String 类型转换为Int
val age:String ="123"
println(age.toInt.getClass.getName)
//2)Int 类型转换为String
val b:Int =123
println(b.toString.getClass.getName)
//3)String类型转换为Float类型
val c:String ="123.123"
println(c.toFloat.getClass.getName)
main方法:
/*
* def 定义方法
* main 方法名字
* args 参数的名字
* Array[String] 参数类型,字符串数组
* Unit 没有返回值,相当于java中的void
*/
def main(args: Array[String]): Unit = {
}
Scala是基于Java的,所以,两种语言的很多语法都是类似的,但Scala有一些Java没有的机制:懒加载就是其中一个
懒加载:
Scala中使用关键字lazy来定义惰性变量,实现延迟加载(懒加载)。惰性变量只能是不可变变量(就是常量---val),并且只有在调用惰性变量时,才会去实例化这个变量
lazy val 变量名:数据类型 = 值
插值器:
字符串插值允许使用者将变量引用直接插入处理过的字面字符中。
var name = "小明"
var age = 18
var height = 1.808764
println("姓名是"+name +",年龄是"+age+",身高是"+height)
//s插值器 将字符串中变量替换为变量的值
println(s"姓名是 ${name}")
//f插值器 将小数格式化输出
println(f"身高是${height}%.2f")
println(f"姓名是${name} ,年龄是${age} ,身高是${height}%.2f")
//raw插值器 输出字符串原样,不进行转义
println(raw"a\nb\n\tc")
Scala语言接受键盘输入(Java键盘输入的是Scanner,在类中也可以使用,会自动识别为Java代码):
println("请输入姓名:")
val int = Console.readLine()
println("您的姓名是:"+int)