![276ba475196afeee48782bf87bbf2407.png](https://i-blog.csdnimg.cn/blog_migrate/1807c74403748f87956eeb99c46f3ebe.jpeg)
变量和数据类型
2.1 注释
用于注解说明解释程序的文字就是注释,注释提高了代码的阅读性。
注释是一个程序员必须要具有的良好编程习惯。将自己的思想通过注释先整理出来,再用代码去体现。
1)基本语法
(1)单行注释://
(2)多行注释:/* */
(3)文档注释:/**
*
*/
2)案例实操
package com.atguigu.chapter03
object TestNotes {
def main(args: Array[String]): Unit = {
//(1)单行注释://
println("dalang")
//(2)多行注释:/* */
/*
println("dalang")
println("jinlian")
*/
//(3)文档注释:/**
//*
//*/
/**
* println("qingge")
println("qingge")
println("qingge")
*/
}
}
3) 代码规范
(1)使用一次tab操作,实现缩进,默认整体向右边移动,用shift+tab整体向左移
(2)或者使用ctrl + alt + L来进行格式化
(3)运算符两边习惯性各加一个空格。比如:2 + 4 * 5。
(4)一行最长不超过80个字符,超过的请使用换行展示,尽量保持格式优雅
2.2 标识符的命名规范
Scala对各种变量、方法、函数等命名时使用的字符序列称为标识符。即:凡是自己可以起名字的地方都叫标识符。
1)命名规则
Scala中的标识符声明,基本和Java是一致的,但是细节上会有所变化,有以下四种规则:
(1)以字母或者下划线开头,后接字母、数字、下划线
(2)以操作符开头,且只包含操作符(+ - * / # !等)
(3)第一种和第二种拼接,第一种在前,二者以下划线分隔
(4)用反引号`....`包括的任意字符串,即使是关键字(39个)也可以
2)案例实操
hello // ok
hello12 // ok
1hello // error
h-b // error
x h // error
h_4 // ok
_ab // ok
Int // ok , 因为在Scala Int是预定义的字符,不推荐
Float // ok
_ // error ,单独一个下划线不可以作为标识符
Abc // ok
+*- // ok
+a // error
$a // ok , 但不要让scala的标识符出现$,因为scala编译器会使用$
3)Scala关键字(39个)
• package, import, class, object, trait, extends, with, type, for
• private, protected, abstract, sealed, final, implicit, lazy, override
• try, catch, finally, throw
• if, else, match, case, do, while, for, return, yield
• def, val, var
• this, super
• new
• true, false, null
2.3 变量
1)基本语法
var | val 变量名 [: 变量类型] = 变量值
说明:在Scala中声明一个变量时,可以不指定类型,编译器根据值确定
2)案例实操
(1)声明变量时,类型可以省略(编译器自动推导,即类型推导)
(2)类型确定后,就不能修改,说明Scala是强数据类型语言。
(3)变量声明时,需要初始值
package com.atguigu.chapter03
object TestVar {
def main(args: Array[String]): Unit = {
//(1)声明变量时,类型可以省略(编译器自动推导,即类型推导)
var age = 18
age = 30
//(2)类型确定后,就不能修改,说明Scala是强数据类型语言。
// age = "tom" // 错误
//(3)变量声明时,需要初始值
// var name //错误
}
}
(4)在声明/定义一个变量时,可以使用var或者val来修饰,var修饰的变量可改变,val修饰的变量不可改。
object TestVar {
def main(args: Array[String]): Unit = {
var num1 = 10 // 可变
val num2 = 20 // 不可变
num1 = 30 // 正确
//num2 = 100 //错误,因为num2是val修饰的
}
}
(5)val修饰的变量在编译后,等同于加上final通过反编译看下底层代码
object TestVar {
var num1 = 10 // 可变
val num2 = 20 // 不可变
def main(args: Array[String]): Unit = {
num1 = 30 // 正确
//num2 = 100 //错误,因为num2是val修饰的
}
}
通过反编译软件,得到对应的底层的.class是
public final class TestVar$
{
public static final MODULE$;
private int num1;
private final int num2;
(6)var修饰的对象引用可以改变,val修饰的则不可改变,但对象的状态(值)却是可以改变的。(比如:自定义对象、数组、集合等等)
object TestVar {
def main(args: Array[String]): Unit = {
// p1是var修饰的,p1的属性可以变,而且p1本身也可以变
var p1 = new Person()
p1.name = "dalian"
p1 = null
// p2是val修饰的,则p2的属性可以变,但是p2本身不可变(即p2的内存地址不能变)
val p2 = new Person()
p2.name="xiaolian"
// p2 = null // 错误的,因为p2是val修饰的
}
}
class Person{
var name : String = "jinlian"
}
2.4 字符串输出
1)基本语法
(1)字符串,通过+号连接
(2)printf用法:字符串,通过%传值。
(3)字符串,通过$引用
2)案例实操
package com.atguigu.chapter02
object TestCharType {
def main(args: Array[String]): Unit = {
var name: String = "jinlian"
var age: Int = 18
//(1)字符串,通过+号连接
println(name + " " + age)
//(2)printf用法字符串,通过%传值。
printf("name=%s age=%dn", name, age)
//(3)字符串,通过$引用
println(s"name=$name age=$age")
println(
s"""
name=${name}
age=${age}
"""
)
}
}
2.5 键盘输入
在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。
1)基本语法
StdIn.readLine()、StdIn.readShort()、StdIn.readDouble()
2)案例实操
需求:可以从控制台接收用户信息,【姓名,年龄,薪水】。
import scala.io.StdIn
object TestInput {
def main(args: Array[String]): Unit = {
// 1 输入姓名
println("input name:")
var name = StdIn.readLine()
// 2 输入年龄
println("input age:")
var age = StdIn.readShort()
// 3 输入薪水
println("input sal:")
var sal = StdIn.readDouble()
// 4 打印
println("name=" + name)
println("age=" + age)
println("sal=" + sal)
}
}
2.6 数据类型关系
![34bfb3920c0492819f245ddffd56ee28.png](https://i-blog.csdnimg.cn/blog_migrate/29ce2f7c20a5611f0636f7da69ae00dd.png)
Scala数据类型关系总结
1)Scala中一切数据都是对象,都是Any的子类。
2)Scala中数据类型分为两大类:数值类型(AnyVal)、引用类型(AnyRef),不管是值类型还是引用类型都是对象。
3)Scala数据类型仍然遵守,低精度的值类型向高精度值类型,自动转换(隐式转换)
4) Scala特殊的类型之Null,它只有一个实例就是Null,它是所有引用类型(AnyRef)的子类。
5)Scala特殊类型之Nothing,是所有数据类型的子类,主要在一个函数没有正常返回值使用,因为这样我们可以把抛出的返回值,返回给任何的变量或者函数。
2.7 整数类型(Byte、Short、Int、Long)
Scala的整数类型就是用于存放整数值的,比如12,30,3456等等。
1)整型分类
数据类型
描述
Byte [1]
8位有符号补码整数。数值区间为 -128 到 127
Short [2]
16位有符号补码整数。数值区间为 -32768 到 32767
Int [4]
32位有符号补码整数。数值区间为 -2147483648 到 2147483647
Long [8]
64位有符号补码整数。数值区间为 -9223372036854775808 到 9223372036854775807 = 2的(64-1)次方-1
2)案例实操
(1)Scala各整数类型有固定的表数范围和字段长度,不受具体操作的影响,以保证Scala程序的可移植性。
object TestDataType {
def main(args: Array[String]): Unit = {
// 正确
var n1:Byte = 127
var n2:Byte = -128
// 错误
// var n3:Byte = 128
// var n4:Byte = -129
}
}
(2)Scala的整型,默认为Int型,声明Long型,须后加‘l’或‘L’
object TestDataType {
def main(args: Array[String]): Unit = {
var n5 = 10
println(n5)
var n6 = 9223372036854775807L
println(n6)
}
}
(3)Scala程序中变量常声明为Int型,除非不足以表示大数,才使用Long
2.8 浮点类型(Float、Double)
Scala的浮点类型可以表示一个小数,比如123.4f,7.8,0.12等等。
1)浮点型分类
数据类型
描述
Float [4]
32 位, IEEE 754标准的单精度浮点数
Double [8]
64 位 IEEE 754标准的双精度浮点数
2)案例实操
(1)Scala的浮点型常量默认为Double型,声明Float型常量,须后加‘f’或‘F’。
object TestDataType {
def main(args: Array[String]): Unit = {
// 建议,在开发中需要高精度小数时,请选择Double
var n7 = 2.2345678912f
var n8 = 2.2345678912
println("n7=" + n7)
println("n8=" + n8)
}
}
//运行的结果
n7=2.2345679
n8=2.2345678912
2.9 字符类型(Char)
1)基本说明
字符类型可以表示单个字符,字符类型是Char,16位无符号Unicode字符(2个字节),区间值为U+0000到U+FFFF。
2)案例实操
(1)字符常量是用单引号 ' ' 括起来的单个字符。
(2)可以直接给Char赋一个整数,然后输出时,会按照对应的unicode字符输出
object TestCharType {
def main(args: Array[String]): Unit = {
//(1)字符常量是用单引号 ' ' 括起来的单个字符。
var c1: Char = 'a'
println("c1=" + c1)
//(2)可以直接给Char赋一个整数,然后输出时,会按照对应的unicode字符输出
println("c1码值=" + c1.toInt)
}
}
(3)Char类型是可以进行运算的,相当于一个整数,因为它都对应有Unicode码。
object TestCharType {
def main(args: Array[String]): Unit = {
var c2: Char = 98 // 正确,因为直接将一个数值给char,编译器只判断是否越界
var c3: Char = 'a' + 1 // 错误,Int高->char低,编译器判断类型
var c4: Char = ('a' + 1).toChar
}
}
(4)t :一个制表位,实现对齐的功能
(5)n :换行符
(6) :表示
(7)" :表示"
object TestCharType {
def main(args: Array[String]): Unit = {
//(4)t :一个制表位,实现对齐的功能
println("姓名t年龄")
//(5)n :换行符
println("西门庆n潘金莲")
//(6) :表示
println("c:岛国avi")
//(7)" :表示"
println("同学们都说:"大海哥最帅"")
}
}
2.10 布尔类型:Boolean
1)基本说明
(1)布尔类型也叫Boolean类型,Booolean类型数据只允许取值true和false
(2)boolean类型占1个字节。
2)案例实操
object TestBooleanType {
def main(args: Array[String]): Unit = {
var isResult : Boolean = false
var isResult2 : Boolean = true
}
}