Scala-变量和数据类型
2.1 注释
Scala注释使用和 Java 完全一样。
注释是一个程序员必须要具有的良好编程习惯。将自己的思想通过注释先整理出来,再用代码去体现。
1)基本语法
(1)单行注释://
(2)多行注释:/* */
(3)文档注释:
/**
*
*/
在IDEA中,多行注释的用法:打/*,接着回车。也可/**,按回车。
代码规范:
(1)使用一次 tab 操作,实现缩进,默认整体向右边移动,用 shift+tab 整体向左移
(2)或者使用 ctrl + alt + L 来进行格式化
(3)运算符两边习惯性各加一个空格。比如 2 + 4 * 5 。
(4)一行最长不超过 80 个字符,超过的 请使用换行展示 ,尽量保持格式优雅
2.2 变量和常量(重点)
常量:在程序执行的过程中,其值不会被改变的变量
0)回顾 Java 变量 和常量语法
变量类型 变量名称 = 初始值 : int a = 10
final 常量类型 常量名称 = 初始值 : final int b = 20
1)基本语法
var 变量名 [: 变量类型] = 初始值 : var i:Int = 10
val 常量名 [: 常量类型] = 初始值 : val j:Int = 20
注意: 能用常量的地方 不用变量
[: 变量类型] [: 常量类型] 都可以省略 ,scala并不关注变量的类型,而是变量名
2)案例实操
(1)声明变量时,类型可以省略,编译器自动推导,即类型推导
(2)类型确定后,就不能修改,说明 Scala 是强数据类型语言。
(3)变量声明时,必须要 有 初始值
(4)在声明 定义一个变量时,可以使用 var 或者 val 来修饰, var 修饰的变量可改变,val 修饰的变量不可改。
(5 ) var 修饰的对象引用可以改变, val 修饰的对象则不可改变,但对象的状态(值)却是可以改变的。(比如:自定义对象、数组、集合等等)
package chapter02
import chapter01.Student
object Test02_Variable {
def main(args: Array[String]): Unit = {
//声明一个变量的通用语法
var a:Int = 10
//(1)声明变量时,类型可以省略,编译器 自动推导,即类型推导
var a1 = 10
val b1 = 23
//(2) 类型确定后,就不能修改,说明 Scala 是强数据类型语言
var a2=15
// a2="Hello" //报错
//(3) 变量声明时,必须要有初始值
// var a3:Int //报错
//(4))在声明定义一个变量时,可以使用 var 或者 val 来修饰,var修饰
//的变量可改变, val 修饰的变量不可改。
a1=58
// b1=85 //报错
//对象定义成val,不能改变其值的
// val alice = new Student("alice", 20)
// alice=new Student("Alice",20)
//对象定义成var,接下来alice改成Alice,没有报错
var alice = new Student("alice", 20)
alice=new Student("Alice",20)
alice=null
//如果定义成Val,而之后要修改其值的话,在所定义的student类的参数位置,前面加var,即可修改
val bob = new Student("bob",23)
bob.age=100
bob.printInfo()
}
}
举个详细的案例来讲解下:
object TestVar {
def main(args: Array[String]): Unit = {
// p1 是 var 修饰的, p1 的属性可以变,而且 p1 本身也可以变
var p1 = new Person()
p1.name = "dalang"
p1 = null
// p2 是 val 修饰的,那么 p2 本身就不可变 (即 p2 的内存地址不能变),
//但是 p2 的属性是可以变,因为 属性并没有用 val 修饰 。
val p2 = new Person()
p2.name="jinlian"
// p2 = null // 错误的,因为 p2 是 val 修饰的
}
}
class Person{
var name : String = "jinlian"
}
2.3 标识符的命名规范
Scala对各种变量 、 方法 、 函数 等命名时使用的字符序列称为 标识符 。即 凡是自己可以起名字的地方都叫标识符。
1)命名规则
Scala中的标识符声明, 基本和 Java 是一致的 ,但是细节上会有所变化,有以下三 种规则:
(1)以字母或者下划线开头,后接字母、数字、下划线: 以字母开头,以下划线开头都可以,以数字开头报错。
(2)以操作符开头,且只包含操作符(+ - * /等)
(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)案例实操
object TestName {
def main(args: Array[String]): Unit = {
// 1 )以字母或者下划线开头,后接字母、数字、下划线
var hello: String = "" // ok
var Hello12: String = "" // ok
var 1hello: String = "" // error 数字不能开头
var h-b: String = "" // error 不能用
var x h: String = "" // error 不能有空格
var h_4: String = "" // ok
var _ab: String = "" // ok
var Int: String = "" // ok 因为在 Scala 中 Int 是预定义的字符
不是 关键字,但 不推荐
var _: String = "hello" // ok 单独一个下划线不可以作为标识符,
因为被认为是一个方法
println(_)
//(2) 以操作符开头,且只包含操作符 (+ * / # 等)
var +*--/#! : String = "" // ok
var +*--/#!1 : String = "" // error 以操作符开头,必须都是操作符
// (3)用反引号 包括的任意字符串,即使是 Scala 关键字( 39 个)也可以
var if : String = "" // error 不能用关键字
var `if` : String = "" // ok 用反引号 包括的任意字符串包括关键字
}
}
2.4 字符串输出
1)基本语法
(1 )字符串,通过 +号连接
(2 ) printf 用法:字符串,通过%传值。
(3 ) 字符串模板 (插值字符串 ): 通过 获取变量 值
2) 案例实操
object Test04_String {
def main(args: Array[String]): Unit = {
//(1)字符串,通过+号连接
val name:String ="alice"
val age: Int =18
println(age+"岁的" +name + "在尚硅谷学习")
// *用于将一个字符串复制多次并拼接
println(name * 3)
//(2)字符串的格式化输出
printf("%d岁的%s在尚硅谷学习",age,name)
//(3)字符串模板(插值字符串):通过$获取变量
println(s"${age}岁的${name}在尚硅谷学习") //s" " 指定模板字符串
val num :Double =22.3456
print(s"the number is ${num}")
print(f"the number is ${num}%2.2f") //f"" :格式化模板字符串 %2.2f:
println(raw"the number is ${num}%2.2f") //按照原始内容输出
//三引号表示字符串,保持多行字符串的原格式输出
val sql =s"""
|select *
|from
| student
|where
| name=${name}
|and
| age>${age}
|""".stripMargin
print(sql)
}
}
2.5 键盘输入
在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。
1)基本 语法
StdIn.readLine()、 StdIn.readShort() 、 StdIn.readDouble()
2) 案例实操
import scala.io.StdIn
object Test05_StdIn {
def main(args: Array[String]): Unit = {
println("请输入您的大名:")
val name:String = StdIn.readLine()
println("请输入您的芳龄:")
val age = StdIn.readInt()
//控制台打印输出
println(s"欢迎${age}岁的${name}来到尚硅谷学习")
}
}
结果:
利用SCALAIO实现文件的写入:
package chapter02
import java.io.{File, PrintWriter}
import scala.io.Source
object Test06_FileIO {
def main(args: Array[String]): Unit = {
//1.从文件中读取数据
Source.fromFile("src\\main\\resources\\test.txt").foreach(print) //foreach传进了一个函数进去,涉及到的是函数式编程
//2.将数据写入文件
val writer = new PrintWriter(new File("src\\main\\resources\\output.txt"))
writer.write("Hello Scala from java writer ")
writer.close()
}
}