基本语法
1. val 常量
2. var 变量
注意点:
1. 声名变量时,类型可以省略,编译器自动推导,即类型推导
2. 类型确定后就不能修改,Scala是一个强类型语言
3. 声名变量时,必须有初始值
4. 在声名/定义一个变量时,可以使用var或者val来修饰,var修饰的变量可改变,val修饰的常量不可改变
5. var修饰的对象引用可以改变,val修饰的对象则不可改变,但对象的状态(值)却是可以改变的
命名规范
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
数据类型
-
Scala中一切数据都是对象,都是Any的子类
-
Scala中数据类型分为两大类型
- 数值类型
AnyVal - 引用类型
AnyRef
- 数值类型
-
Scala数据类型仍然遵守,低精度的值类型向高精度值类型,自动转换(低精度->高精度)
-
Scala中的StringOps是对Java中String增强
-
Unit:对应Java中的void,用于方法返回值的位置,表示方法没有返回值.Unit是一个数据类型,只有一个对象就是().void不是数据类型,只是一个关键字
-
Null是一个类型,只有一个对象就是null.它是所有引用类型(AnyRef)的子类.
-
Nothing,是所有数据类型的子类,主要用于一个函数没有明确的返回值时使用.因为这样我们可以把抛出的返回值,返回给任何的变量或者函数
-
Scala中一切数据都是对象,都是Any的子类
整数类型
- Byte
Byte[1] 8位有符号补码整数.数值区间为 -128 到127 (2的8次方 对其在对称轴上进行分割 分为 -128 到127)
127:在补码中用(-128)代替了(-0),所以补码的表示范围为: (-1280127)共256个.
-1-127的结果应该是-128,在用补码运算的结果中, [1000 0000]补 就是-128。但是注意因为实际上是使用以前的-0的补码来表示-128, 所以-128并没有原码和反码表示。(对-128的补码表示[1000 0000]补算出来的原码是[0000 0000]原, 这是不正确的) - Short
Short[2] 16位有符号补码整数.数值区间位-32768到32767(2的16次方) - Int
Int[4] 32位有符号补码整数.数值区间为-2147483648到 214748 - Long (l|L)
Long[8] 64 位有符号补码整数。数值区间为 -9223372036854775808 到
9223372036854775807 = 2 的(64-1)次方-1
浮点类型
- Float
Float[4] 32位,IEEE 754 标准的单精度浮点数 - Double
Double[8] 67位IEEE 754 标准的双精度浮点数
字符类型
-
Char
(1)字符常量是用单引号 ' ' 括起来的单个字符。 (2)\t :一个制表位,实现对齐的功能 (3)\n :换行符 (4)\\ :表示\ (5)\" :表示"
布尔类型
-
Boolean类型占一个字节
(1)布尔类型也叫 Boolean 类型,Booolean 类型数据只允许取值 true 和 false (2)boolean 类型占 1 个字节。
Unit类型,Null类型以及Nothing类型
- Unit
表示无值,等同于 void,用作不返回任何结果的方法的结果类型,Unit只有一个实例值,写成().
Unit 类型用来标识过程,也就是没有明确返回值的函数。 - Null
null,Null类型只有一个实例值null
Null 类只有一个实例对象,Null 类似于 Java 中的 null 引用。Null 可以赋值给任意引用类型(AnyRef),但是不能赋值给值类型(AnyVal) - Nothing
Nothing类型在Scala的类层级最低端;他是任何其他类型的子类型.当一个函数.我们没有正常的返回值,可以用Nothing来指定返回类型,这样有一个好处,就是沃恩可以把返回的值(异常)赋给其他的函数或者变量(兼容性)
Nothing,可以作为没有正常返回值的方法的返回类型,非常直观的告诉你这个方法不会正常返回,而且由于 Nothing 是其他任意类型的子类,他还能跟要求返回值的方法兼容。
object Test01_Variable {
def main(args: Array[String]): Unit = {
//声名一个变量的通用语法
var a:Int = 10
//声名变量时类型可以省略,编译器自动推导,即类型推导
var a1 = 10
val b1 = 11
//类型在定义之后就不能修改修改(Scala是一个强数据类型的语言)
var a2 = 15 //a2 类型为int
//声名变量时,必须要有初始值
var a3:Int = 111
//在声名或定义一个变量时,可以使用var或者val来修饰,var修饰的变量可以改变,val修饰的变量不可改.
}
}
object Test02_Identifier {
def main(args: Array[String]): Unit = {
//以字母或者下划线开头,后接数字,字母,下划线
val hello: String = ""
var Hello123 = ""
val _abc = 123
//val h-b = ""
//以操作符开头,且只包含操作符(+ - * / # !等)
var -+/ = ""
println(-+/)
}
}
object Test07_DataType {
def main(args: Array[String]): Unit = {
//1.整数类型
val a1: Byte = 127
val a2: Byte = -128
val a3 = 23153121556156165L // 默认整数类型为Int
val b1: Byte = 10
val b2: Byte = 10 + 20 - 100
println(b2)
val b3 = b1 + 20
println(b3)
val b4: Byte = (b1 + 20).toByte
println(b4)
//浮点类型
val f1: Float = 1.262f
//字符类型
val v1: Char = 'a'
println(v1)
val v2: Char = '9'
println(v2)
val v3: Char = '\t'
val v4: Char = '\n'
println("abc" + v3 + "efg" + v4 + "hij")
//转义字符
val c5 = '\\' // \\表示 \
val c6 = '\"' // \"表示 "
println("abc" + c5 + "efg" + c6 + "hij")
//字符变量底层保存ASCII码
val i1: Int = v1
val i2: Int = v2
println(s"i1:${i1}")
println(s"i2:${i2}")
val c7: Char = (i1 + 1).toChar
println(s"c7:${c7}")
val c8: Char = (i2 + 1).toChar
println(s"c8:${c8}")
//布尔类型
val t1: Boolean = true
val t2 = true
println(t1)
println(t2)
//空类型(Unit,Null,Nothing)
//Unit
def m1(): Unit = {
println("111")
}
val q = m1()
println(q)
//空引用
//val r1:Int = null //值类型无法接收null
val student = new Student("sada", 20)
//student = null
println(student)
//Nothing
def h1(n: Int): Int = {
if (n == 0) {
throw new NullPointerException
} else
return n
//返回为空 因为定义为Nothing 所以就不会有返回值
}
}
}