快学Scala第一天

以前都是只学习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会帮助我们自动识别类型。

快学Scala第一天

 

        同样都是定义常量,将"tom"这个字符串赋值给不同的变量,我们用上面的两种方法都成功的定义了string类型的变量。

        既然成功对变量进行了定义,那么var是什么?val又是什么

        var修饰的可以修改的变量

        val修饰的是不可以修改的变量

快学Scala第一天

 

        上面我们想要修改val修饰的变量,没等编译时期报错,idea就已经给我们提示了错误,val修饰的变量不能被修改。

定义字符串

                上面讲了如果定义,下面讲解如果定义字符串。

        定义字符串的方法有三种

  1. 使用双引号
  2. 使用插值表达式
  3. 使用三引号
//使用双引号 
var d_name = "tom" 
//使用插值表达式 
var d_name = "tom" 
print(s"name =${d_name} ")

        看下面一个图片,我们在一个字符串前面加上s,它会变成什么类型

快学Scala第一天

 

        首先我们定义了ss,然后通过模式匹配判断他是什么类型,如果是string那么就会返回后面的语句。其实最终匹配出来是string类型。

var 变量名 = s"${变量}字符串" 这个同样也是字符串

命名规范

        在Scala中也有命名规范,在我前几篇博客当中就有关于SQL的命名规范。

  1. 必须由”大小写英文字母,下划线,数字,$“这个四部分任意组成
  2. 数字不能开头
  3. 不能和Scala中的关键字重名

Tips:

  1. Scala中的所有类型都是用首字母大写
  2. 整形使用的是Int而不是Integer
  3. scala变量可以不写类型,让scala编译器自己推断
  4. Scala中默认的整型是Int,默认的浮点类型是Double

Scala中的层次类型

快学Scala第一天

 

        从上面的图中可以看到,Any是最高的层次,Any是所有类型的父类

        AnyVal是所有数值类型的父类

        AnyRef是所有对象类型的父类

        Null是ValRef的子类,null是所有对象类型的子类

        nothing是所有类的子类,不能直接创建nothing实例的类型,nothing可以在方法抛出异常的时候返回。

提出来一个问题,下面这段代码是否会报错

                val b:Int = null

从上面的图上来看,Null是对象类型的子类,但不是数值类型的子类,是会报错的。

        来看一下报错信息

快学Scala第一天

 

        b已经是被定义成了Int类型,不能再被定义成null了。

        Null类型不能被转换成Int类型。

类型转换

        所谓类型转换就是类型小的转换为类型大的。

        类型转换分为:值类型的转换和引用类型的转换

自动类型转换

范围小的数据类型自动转换为范围大的数据类型。

快学Scala第一天

 

        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类型的转换

  1.  值类型转换成String类型

        var d :String = 12.toString

        2.String类型转换成Int类型

        var d:Int = "123".toInt 123

最后拿一个例子进行收尾总结

快学Scala第一天

快学Scala第一天 

 

上一篇:任何JVM项目中使用(前提是添加Scala


下一篇:大三寒假学习 spark学习 Scala面向对编程 模式匹配