Scala-变量与数据类型
变量与数据类型
变量声明
// var | val 变量名 :变量类型 = 变量值
// 用户名称
var username : String = "zhangsan" //可变变量 :值可以改变的变量
// 用户密码
val userpswd : String = "000000" //不可变变量 :值一旦初始化后无法改变的变量
变量的类型如果能够通过变量值推断出来,那么可以省略类型声明
变量初始化(强制)
var username // Error
val username = "zhangsan" // OK
标识符
1. 数字,字母,下划线,$
2. 数字不能开头
3. 不能使用关键字或保留字
4. 区分大小写
5. 长度没有限制
Scala 可以使用两种形式的标志符,字符数字和符号。
- 字符数字使用字母或是下划线开头,后面可以接字母或是数字,符号"\("在 Scala 中也看作为字母。然而以"\)"开头的标识符为保留的 Scala 编译器产生的标志符使用,应用程序应该避免使用"$"开始的标识符,以免造成冲突。
- Scala 的命名规范采用和 Java 类似的 camel 命名规范,首字符小写,比如 toString。类名的首字符还是使用大写。此外也应该避免使用以下划线结尾的标志符以避免冲突。
- Scala 内部实现时会使用转义的标志符,比如:-> 使用 \(colon\)minus$greater 来表示这个符号。
字符串
在 Scala 中,字符串的类型实际上就是 Java中的 String类,它本身是没有 String 类的。
在 Scala 中,String 是一个不可变的字符串对象,所以该对象不可被修改。这就意味着你如果修改字符串就会产生一个新的字符串对象。
val name : String = "scala"
val subname : String = name.substring(0,2)
println("Hello " + name) // 字符串连接
printf("name=%s\n", name) // 传值字符串(格式化字符串)
println(s"name=${name}") // 插值字符串 将变量值插入到字符串
// 多行格式化字符串
// 在封装JSON或SQL时比较常用
// 竖线表示顶格符
val s =
"""
| Hello
Scala
|""".stripMargin('#')
val json =
s"""
| { "username":"${name}", "password":"${password}" }
|""".stripMargin
val sql = "select id from (select * from t_user where id = 1 order by id desc) a group by id"
val sql1 =
"""
| select
| id
| from
| (
| select
| *
| from t_user
| where id = 1
| order by id desc
|
| ) a
| group by id
|
|""".stripMargin
输入与输出
输入
val age : Int = scala.io.StdIn.readInt() // 从控制台输入
scala.io.Source.fromFile("input/user.json").foreach(
line => {
print(line)
}
)
scala.io.Source.fromFile("input/user.json").getLines() // 从文件中输入
// 也可静态导入
输出
val writer = new PrintWriter(new File("output/test.txt" ))
writer.write("Hello Scala")
writer.close()
网络
object TestServer {
def main(args: Array[String]): Unit = {
val server = new ServerSocket(9999)
while ( true ) {
val socket: Socket = server.accept()
val reader = new BufferedReader(
new InputStreamReader(
socket.getInputStream,
"UTF-8"
)
)
var s : String = ""
var flg = true
while ( flg ) {
s = reader.readLine()
if ( s != null ) {
println(s)
} else {
flg = false
}
}
}
}
}
...
object TestClient {
def main(args: Array[String]): Unit = {
val client = new Socket("localhost", 9999)
val out = new PrintWriter(
new OutputStreamWriter(
client.getOutputStream,
"UTF-8"
)
)
out.print("hello Scala")
out.flush()
out.close()
client.close()
}
}
数据类型
Scala是完全面向对象的语言,所以不存在基本数据类型的概念,有的只是任意值对象类型(AnyVal)和任意引用对象类型(AnyRef)
// Nothing是scala语言中特殊的类型,用于统一方法的异常和正常的返回
}
def test(): Nothing = {
throw new Exception()
}
def test1(): String = {
throw new Exception()