网站排名优化工薪待遇,网络营销课程设计总结,郑州发布官网,会计公司一、变量声明 #xff08;一#xff09;简单说明 Scala中变量的声明使用关键字val和var。val类似Java中的final变量#xff0c;也就是常量#xff0c;一旦初始化将不可修改#xff1b;var类似Java中的非final变量#xff0c;可以被多次赋值#xff0c;多次修改。 val - …一、变量声明 一简单说明 Scala中变量的声明使用关键字val和var。val类似Java中的final变量也就是常量一旦初始化将不可修改var类似Java中的非final变量可以被多次赋值多次修改。 val - value - 值 var - variable - 变量 二利用val声明变量 1、声明方式 val 变量名[: 数据类型] 变量值 定义变量比较灵活可以指定数据类型也可以不指定数据类型由Scala根据赋的值自行判断数据类型 在声明变量上Scala兼具Java和Python的特点。Java是静态语言声明变量必须指定数据类型Python是动态语言声明变量不需要指定数据类型。 2、案例演示 声明一个val字符串变量name其实定义的是一个常量
上述代码中的第二行为执行第一行的输出信息从输出信息中可以看出该变量类型由Scala自动推断为String。
当然也可以在声明变量时指定数据类型与Java不同的是数据类型需要放到变量名的后面这使得面对复杂的数据类型时更易阅读。
由于val声明的变量是不可修改的若对声明的变量name进行修改则会报错
因此如果希望变量可以被修改can be mutated就需要使用var声明。
三利用var声明变量 1、声明方式 var 变量名[: 数据类型] 变量值 2、案例演示 声明一个var字符串变量message然后利用print函数输出其值
对var变量message重新赋值再输出其值
四换行输入语句续行 如果需要换行输入语句那么只需要在换行的地方按回车键解析器会自动在下一行以竖线进行分割
如果要输入多行字符串得使用三引号
去掉多行字符串的前导空格
用双引号是无法实现多行字符串
Scala跟Java一样没有像Python那样用\作为续行符
五同时声明多个变量 Scala还可以将多个变量放在一起进行声明将一个数值同时赋给多个变量
Scala不能一次对多个变量赋不同的值
注意Java也可以将多个变量放在一起进行声明但是各个变量是独立赋值的
注意Python只能将可迭代的数据赋给多个变量
六总结变量的声明 1、变量必须初始化 定义变量需要初始化否则会报错。
注意Java里可以先声明变量然后再赋值
2、定义变量可以不指定数据类型 定义变量时可以不指定数据类型系统会根据初始化值自动推断变量的类型。
注意Java声明变量必须指定类型
3、鼓励优先使用val常量 Scala中鼓励优先使用val常量除非确实需要对其进行修改才使用var变量。 4、语句不需要写结束符 Scala语句不需要写结束符除非同一行代码使用多条语句时才需要使用分号隔开。
二、数据类型 一Scala类型层次结构 在Scala中所有的值都有一个类型包括数值和函数。如下图所示说明了Scala的类型层次结构
AnyVal - Any Value AnyRef - Any Reference 1、Any类型 Any是Scala类层次结构的根也被称为超类或顶级类。Scala执行环境中的每个类都直接或间接地从该类继承。该类中定义了一些通用的方法例如equals()、hashCode()和toString()。Any有两个直接子类AnyVal和AnyRef。 2、AnyVal类型 AnyVal表示值类型有9种预定义的值类型它们是非空的Double、Float、Long、Int、Short、Byte、Char、Unit和Boolean。Unit是一个不包含任何信息的值类型和Java语言中的void等同用作不返回任何结果的方法的结果类型。Unit只有一个实例值写成()。 3、AnyRef类型 AnyRef表示引用类型。所有非值类型都被定义为引用类型。Scala中的每个用户定义类型都是AnyRef的子类型。AnyRef对应于Java中的java.lang.Object。 4、案例演示 定义一个类型为List[Any]的变量listlist中包括字符串、整数、字符、布尔值和函数由于这些元素都属于对象Any的实例因此可以将它们添加到list中。
遍历列表元素并显示其数据类型
获取列表前三个元素构成的子列表
将列表反序原列表不变
二基本数据类型 1、基本类型表 序号 类型 说明 值 1 Byte 字节型 34 2 Short 短整型 127 3 Int 整型 43423 4 Long 长整型 3452342L 5 Char 字符型 ‘a’, ‘\n’ 6 String 字符串 “Courage” “”“I love Scala very much.”“” 7 Float 浮点型 34.67F 8 Double 双精度 34534.454, 45.34242D 9 Boolean 布尔型 true, false 2、简要说明 1 String在java.lang包下其余类型在scala包下由于Scala会自动导入java.lang和scala包因此这些类型可以在程序中直接使用。 2其实scala中并没有真正意义上的基本类型如Java的基本类型)以上十种基本类型都是类。 3在Scala中基本数据类型与其它类的区别在于其对象都以直接量形式体现直接量与Java中基本相同。 4String类型的““用法在String直接量中可以使用””“…”的语法将一段内容直接包括起来使其内容中可以包含任意字符而不需转义此时可在每行前使用管道符|控制缩进格式在字符串上调用stripMargin来使字符串在|处对齐。
直接输出三引号字符串
利用.stripMargin与管道符“|”来调整字符串输出格式
3、基本类型的富包装器 九个基本类型提供的方法比较有限为了拓展其功能Scala提供了对应九个富包装器其实也是九个类这九个类的直接量在需要时可以自动被转换为其对应的富包装类来调用富包装类提供的额外方法。 序号 类型 富包装器 1 Byte scala.runtime.RichByte 2 Short scala.runtime.RichShort 3 Int scala.runtime.RichInt 4 Long scala.runtime.RichLong 5 Char scala.runtime.RichChar 6 String scala.runtime.RichString 7 Float scala.runtime.RichFloat 8 Double scala.runtime.RichDouble 9 Boolean scala.runtime.RichBoolean 三数据类型转换 1、值类型的转换 Scala中的值类型可以按下图的方式转换且转换是单向的
将Long值赋给Float类型变量在这种情况下会丢失一些精度因此会弹出一个警告可以利用.toFloat方法解决这个问题
如果将Float类型转换成Long类型就会报错不能自动从Float类型转换成Long类型但是可以调用方法来实现
2、引用类型的转换 此外Scala还可以将引用类型转换为其子类型。 Nothing是所有类型的子类在Scala类层级的最低端。Nothing没有对象因此没有具体值但是可以用来定义一个空类型类似于Java中的标示性接口如Serializable用来标识该类可以进行序列化。举个例子如果一个方法抛出异常异常的返回值类型就是Nothing虽然不会返回。 Null是所有引用类型AnyRef的子类所以Null可以赋值给所有的引用类型但不能赋值给值类型这个和Java的语义是相同的。Null有一个唯一的单例值null。