以前都是只学习Hive和数仓的基本知识,却忘记了数仓的另一个重要的利器Spark.工欲善其事必先利其器,为了学好spark,我们先要学习好scala
Scala中的常量:
学习scala也是为了我们日后学习spark打好基础,今天开始就跟着我来学习scala吧。
scala中的常量:整型,浮点型,字符串型,布尔,空
//输出整形
print(2)
//输出字符串类型
print("i love you")
//输出字符类型
print('a')
//输出布尔类型
print(true)
//输出空值
print(null)
定义变量
如何在scala中定义常量呢?
在Java中,我们定义一个整型 int a = 2
在Scala中,定义常量不再是int
首先先说一下定义常量的格式
var/val 变量名:变量类型 = 初始值
var/val 变量名 = 初始值
上面两个定义变量的方式有一些不同,下面那个没有说明类型,因为idea会帮助我们自动识别类型。
同样都是定义常量,将"tom"这个字符串赋值给不同的变量,我们用上面的两种方法都成功的定义了string类型的变量。
既然成功对变量进行了定义,那么var是什么?val又是什么
var修饰的可以修改的变量
val修饰的是不可以修改的变量
上面我们想要修改val修饰的变量,没等编译时期报错,idea就已经给我们提示了错误,val修饰的变量不能被修改。
定义字符串
上面讲了如果定义,下面讲解如果定义字符串。
定义字符串的方法有三种
- 使用双引号
- 使用插值表达式
- 使用三引号
//使用双引号
var d_name = "tom"
//使用插值表达式
var d_name = "tom"
print(s"name =${d_name} ")
看下面一个图片,我们在一个字符串前面加上s,它会变成什么类型
首先我们定义了ss,然后通过模式匹配判断他是什么类型,如果是string那么就会返回后面的语句。其实最终匹配出来是string类型。
var 变量名 = s"${变量}字符串" 这个同样也是字符串
命名规范
在Scala中也有命名规范,在我前几篇博客当中就有关于SQL的命名规范。
- 必须由”大小写英文字母,下划线,数字,$“这个四部分任意组成
- 数字不能开头
- 不能和Scala中的关键字重名
Tips:
- Scala中的所有类型都是用首字母大写
- 整形使用的是Int而不是Integer
- scala变量可以不写类型,让scala编译器自己推断
- Scala中默认的整型是Int,默认的浮点类型是Double
Scala中的层次类型
从上面的图中可以看到,Any是最高的层次,Any是所有类型的父类
AnyVal是所有数值类型的父类
AnyRef是所有对象类型的父类
Null是ValRef的子类,null是所有对象类型的子类
nothing是所有类的子类,不能直接创建nothing实例的类型,nothing可以在方法抛出异常的时候返回。
提出来一个问题,下面这段代码是否会报错
val b:Int = null
从上面的图上来看,Null是对象类型的子类,但不是数值类型的子类,是会报错的。
来看一下报错信息
b已经是被定义成了Int类型,不能再被定义成null了。
Null类型不能被转换成Int类型。
类型转换
所谓类型转换就是类型小的转换为类型大的。
类型转换分为:值类型的转换和引用类型的转换
自动类型转换
范围小的数据类型自动转换为范围大的数据类型。
scala编译器自动转换为Double类型。Int + Double = Double
自动转换类型从小到大排序:
Byte,Short,Char,->Int->Long->Float->Double
Byte和Short和Char是等价的。
下面放一下错误的例子
var d:Byte =a+1
强制类型转换
将范围大的类型转换为范围小的数据类型
var/val 变量名:数据类型 = 值.toxxx
var d = 2.3 Double类型 var a = d.toInt 将2转换为Int类型
值类型和String类型的转换
- 值类型转换成String类型
var d :String = 12.toString
2.String类型转换成Int类型
var d:Int = "123".toInt 123
最后拿一个例子进行收尾总结