基本语法
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中数据类型分为两大类型
-
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 标准的双精度浮点数
字符类型
布尔类型
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 所以就不会有返回值
}
}
}
|