2.1 变量是程序的基本组成单位
举一个简单的例子
object boke_demo01 { def main(args: Array[String]): Unit = { var a: Int = 10 //定义一个整型变量,取名 a,并赋初值 10 var b: Int = 12 //定义一个整型变量,取名 b,并赋初值 12 b = 9 //给变量b 赋 9 println("a=" + a) //输出语句,把变量 a 的值输出 println("b=" + b) //把变量 b 的值输出 } }
2.2 变量的介绍
2.2.1 概念
变量相当于内存中一个数据存储空间的表示,可以把变量看作是一个房间的门牌号,通过门牌号我们可以找到对应的房间,而通过变量名可以访问到变量(值)。
2.2.2 变量使用的基本步骤
1) 声明/定义变量(Scala要求变量声明时初始化)
2) 使用
2.3 Scala变量的基本使用
2.3.1 快速入门
object boke_demo01 { def main(args: Array[String]): Unit = { var age: Int = 9 var sal: Double = 9.9 var name: String = "Jack" var ifPass: Boolean = true //在scala中,小数默认为Double ,整数默认为Int var score: Float = 22.9f println(s"${age} ${ifPass}") } }
示意图
2.4 Scala变量使用说明
2.4.1 变量声明基本语法
var | val 变量名 [: 变量类型] = 变量值
2.4.2 注意事项
1) 声明变量时,类型可以省略(编译器自动推导, 即类型推导)
2) 类型确定后,就不能修改,说明Scala是强数据类型语言
3) 在声明/定义一个变量时,可以使用var或val来修饰,var修饰的变量可以改变,val修饰的变量不可改变
4) val修饰的变量在编译后,等同于加上final
5) var 修饰的对象引用可以改变,val修饰的则不可改变,但对象的状态(值)却是可以改变的(比如: 自定义对象、数组、集合等)
6) 变量声明时,需要初始值
2.5 程序中+号的使用
1) 当左右两边都是数值型时,则做加法运算
2) 当左右两边有一方为字符串,则做拼接运算
2.6 数据类型
1) Scala与Java有着相同的数据类型,在Scala中数据类型都是对象,也就是说Scala没有Java中的原生类型
2) Scala数据类型分为两大类 AnyVal(值类型)和AnyRef(引用类型),注意不管是AnyVal还是AnyRef都是对象
3) 相对于Java的类型系统,Scala更要复杂些,也正是这复杂多变的类型系统才让面向对象编程和函数式编程完美的融合在了一起
2.6.1 Scala数据类型体系
对上面图的小结和整理
1) 在Scala中有一个根类型Any,它是所有类的父类
2) Scala中一切皆为对象,分为两大类 AnyVal(值类型)和AnyRef(引用类型),它们都是Any的子类
3) Null类型是Scala的特别类型,它只有一个值null,它是bottom class,是所有AnyRef类型的子类
4) Nothing类型也是bottom class,它是所有类的子类,在开发中通常可以将Nothing类型的值返回给任意变量或者函数,这里抛出异常使用很多
object boke_demo01 { def main(args: Array[String]): Unit = { println(sayHello) } /*比如开发中,我们有一个方法,就会异常中断,这时就可以返回Nothing 即当我们Nothing做返回值,就是明确说明该方法没有没有正常返回值*/ def sayHello: Nothing = { throw new Exception("抛出异常") } }
5) 在Scala中仍然遵守,低精度的值,向高精度的值自动转换(implicit conversion)隐式转换
var num_one = 1.7 //默认为 double var num_two = 1.9f //这是 float //num_two = num_one ,error ,修改 num_two = num_one.toFloat
2.6.2 Scala数据类型列表
2.7 整数类型
2.7.1 基本介绍
Scala的整数类型就是用于存放整数值的,比如 9,22,123等等
2.7.2 整型的类型
2.7.3 整型的使用细节
1) Scala各整数类型有固定的表数范围和字段长度,不受具体OS的影响,以保证Scala程序的可移植性
2) Scala的整型常量/字面量默认为Int类型,声明Long类型常量/字面量时,须后加“l”或者“L”
3) Scala程序中变量常声明为Int类型,除非不足以表示大数,才使用Long
4) 案例
object boke_demo01 { def main(args: Array[String]): Unit = { println("Long的最大值:" + Long.MaxValue + "~" + Long.MinValue) var a = 10 //a Int var b = 10l //b Long var c = 9223372036854775807l //说 9223372036854775807 超过 Int } }
2.8 浮点类型
2.8.1 基本介绍
Scala的浮点类型可以表示一个小数,比如 9.9f,22.9,0.6等等
2.8.2 浮点类型的分类
2.8.3 浮点类型使用细节
1) 与整数类型类似,Scala浮点类型也有固定的表数范围和字段长度,不受具体OS的影响
2) Scala的浮点类型常量默认为Double类型,声明Float类型常量时,须后加“f”或者“F”
object boke_demo01 { def main(args: Array[String]): Unit = { var num1:Float = 1.2345678912f var num2:Double = 1.2345678912 println("num1=" + num1 + "n" +"num2=" + num2) /* 运行结果: num1=1.2345679 num2=1.2345678912 */ } }
3) 浮点型常量有两种表示形式
十进制数形式:如5.21,521.0f,.521等 (必须有小数点)
科学计数法形式:如5.21e2 = 5.21 乘以10的2次方,5.21E-2 = 5.21 除以10的2次方
4) 通常情况下,应该使用Double类型,因为它比Float类型更精确(小数点后大致7位)
2.9 字符类型(Char)
2.9.1 基本介绍
字符类型可以表示单个字符,字符类型是Char,16位无符号Unicode字符(2个字节),区间值为U+0000到U+FFFF
2.9.2 案例演示
object boke_demo01 { def main(args: Array[String]): Unit = { var char1: Char = 99 //当我们输出一个char类型是,它会输出该数字对应的字符(码值表 unicode)//unicode 码值表包括ascii println("char1=" + char1) // c //char可以当做数字进行运行 var char2: Char = 'c' var num = 10 + char2 println("num=" + num) // 109 //原因和分析 //1. 当把一个计算的结果赋值一个变量,则编译器会进行类型转换及判断(即会看范围+类型) //2. 当把一个字面量赋值一个变量,则编译器会进行范围的判定 // var c2: Char = 'c' + 1 error // var c3: Char = 99 + 1 error // var c4: Char = 100 true } }
2.9.3 字符类型使用细节
1) 字符常量是使用单引号( ' ' )括起来的单个字符,例如:var a1 = 'a', var a2 = '张', var a3 = '20'
2) Scala也允许使用转义字符 '' 来将其后的字符转变为特殊字符型常量,例如:var a4 = 'n' ('n'表示换行符)
3) 可以直接给Char赋一个整数,然后输出时,会按照对应的Unicode字符输出
4) Char类型是可以进行运算的,相当于一个整数,因为它都对应有Unicode码
2.10 布尔类型(Boolean)
2.10.1 基本介绍
布尔类型也叫Boolean类型,Boolean类型数据只允许取值true或false,布尔类型占一个字节
布尔类型适用于逻辑运算,一般用于程序流程控制 [后面详解]
2.11 Unit类型、Null类型和Nothing类型
2.11.1 基本说明
2.11.2 使用细节案例
1) Unit类型用来标识过程,也就没有明确返回值的函数。由此可见,Unit类似于Java里的void。Unit直邮一个实例,(),这个实例也没有实质的意义
2) Null类只有一个实例对象,null,类似于Java中null的引用。null可以赋值给任意引用类型(AnyRef),但是不能赋值给值类型(AnyVal,比如:Int,Float,Char, Boolean,Long,Double,Byte,Short)
3) Nothing,可以作为没有正常返回值的方法的返回类型,非常直观的告诉你这个方法不会正常返回,而且由于Nothing是其它任意类型的子类,它还能跟要求返回值的方法兼容
4) 代码案例
object boke_demo01 { def main(args: Array[String]): Unit = { val res = sayHello() println("res=" + res) //Null类只有一个实例对象,null,类似于Java中的null引用。null可以赋值给任意引用类型(AnyRef) //但是不能赋值给值类型(AnyVal: 比如 Int, Float, Char, Boolean, Long, Double, Byte, Short) val dog: Dog = null //错误 // val char1: Char = null // println("ok~~~") } //Unit等价于java的void,只有一个实例值() def sayHello(): Unit = { } class Dog { } }
2.12 值类型转换
2.12.1 值类型隐式转换
当Scala程序在进行赋值或者运算时,精度小的数据类型自动转换为精度大的数据类型这个就是自动类型转换(隐式转换)
数据类型按精度(容量)大小排序为
自动类型转换细节说明
1)
2)
3)
4)
5)
- 还没有人评论,欢迎说说您的想法!