一些基礎
變量和常量
( 1)聲明變量時,類型可以省略,編譯器自動推導,即類型推導
( 2)類型確定后,就不能修改,說明 Scala 是強數(shù)據類型語言。
( 3)變量聲明時,必須要有初始值
( 4)在聲明/定義一個變量時,可以使用 var 或者 val 來修飾, var 修飾的變量可改變,
val 修飾的變量不可改。
(5) var 修飾的對象引用可以改變, val 修飾的對象則不可改變,但對象的狀態(tài)(值)卻是可以改變的。(比如:自定義對象、數(shù)組、集合等等)
注:反引號包括的任意字符串都可以作為變量名稱,關鍵字也可以
數(shù)據類型
1.java數(shù)據類型:Java有基本數(shù)據類型,而且基本數(shù)據類型不是真正意義的對象,即使后面產生了基本數(shù)據類型的包裝類,但仍然存在基本數(shù)據類型,所以Java語言并不是真正意思的面向對象。
注:java中基本類型和引用類型沒有共同的祖先。
2.scala數(shù)據類型:
1)一切數(shù)據皆對象,都是Any的子類。
2)scala數(shù)據類型分為兩大類:數(shù)值類型(AnyVal)、引用類型(AnyRef),不管是值類型還是引用類型都是對象。
3)scala中StringOps是對Java中的String的增強
4)Unit對應java中的void,但unit是一個數(shù)據類型,只有一個對象就是(),而void是一個關鍵字
5)Null是一個類型,只有一個對象就是null。它是所有引用類型的子類
6)Nothing:所有數(shù)據類型的子類,主要用在一個函數(shù)沒有明確返回值時使用,因為這樣可以把拋出的返回值返回給任何變量或者函數(shù)。
def test4() : Nothing = {
throw new Exception
}
test4()
隱式類型轉換
1.自動提升原則:有多種類型的數(shù)據混合運算時,系統(tǒng)首先自動將所有數(shù)據轉換成精度大的那種數(shù)據類型,然后再進行計算。
2.把精度大的數(shù)值類型賦值給精度小的數(shù)值類型時,就會報錯,反之就會進行自動類型轉換
3.( byte, short)和 char 之間不會相互自動轉換。
def test5(double: Double): Unit ={
println(double)
}
val a:Char = 'A'
test5(a)

強制類型轉換
var num : Int = 2.7.toInt
注:var n5:Int = "12.6".toInt 會出現(xiàn) NumberFormatException 異常
流程語句
if
val v:Any = if(true){
"hehe"
}else{
"haha"
}
for
scala為for提供很多特性,這些for循環(huán)特性被稱為for推導式或for表達式
def forDemo3(): Unit ={
//1,3,5,7,9
//by表示步長
for (i<- 1 to 10 by 2){
print(i)
}
}
def forDemo4(): Unit ={
for{
i<- 1 to 3
j<- 4 to 4+i
}{
println(i,j)
}
//等價于
for (i<-1 to 3){
for (j<-4 to 4+i){
println(i,j)
}
}
}
def forDemo5(): Unit ={
for (i <- 1 to 10 reverse){
println(i)
}
}
def forDemo6(): Unit ={
val ints: Any = for (i<- 1 to 10) yield{
i*2
}
println(ints)
}
break
def breadDemo1(): Unit ={
try{
for (i<- 1 to 10){
println(i)
if (i == 5){
throw new StackOverflowError
}
}
}catch {
case e => println(e)
}
println("結束結束")
}
def breakDemo2: Unit ={
//breakable
Breaks.breakable(
for (elem <- 1 to 10){
println(elem)
if (elem==5){
//break
Breaks.break
}
}
)
println("循環(huán)結束")
}