Scala語法講解及練習
Scala基礎語法
1、 值和變數
A)、宣告變數:
var修飾的欄位,是變數,內容和引用都可變
B)、宣告常量:
val修飾的欄位,是常量,內容可變引用不可變
val修飾的欄位,相當於Java中final修飾的變數
注意:在val和var均可的條件下,官方推薦使用val
- 、var和var區別演示
進入scala操作介面
演示var修飾的變數特點:
var修飾字段引用可變
總結:var修飾字段內容可變
演示val修飾的常量特點:
val修飾字段引用不可變
Val修飾字段內容可變
1、lazy關鍵字:
只有val修飾的變數才能被lazy修飾;
當val被宣告為lazy時,它的初始化將被推遲,直到我們首次對它取值
2. 常用型別
A)、Scala和Java一樣,scala也是強型別語言
強型別語言:一旦一個變數被指定了某個資料型別,如果不經過強制型別轉換,那麼它就永遠是這個資料型別。你不能把一個整形變數當成一個字串來處理。
弱型別語言:資料型別可以被忽略,一個變數可以賦不同資料型別的值。
- 、scala中所有的值都有型別
Scala中AnyVal型別(非引用資料型別)
七個
一個布林型別Boolean
一個Unit型別(等價與java中的void)
Scala中AnyRef型別(引用資料型別)
集合、option(選項型別)、YorClass(自己定義的類)
Scala中比較特殊的兩個型別:Nothing、Null(很少用到,要知道):
a、Nothing是所有類的子類(應用場景如下):
b、null是所有引用類的子類(應用場景如下):
注意:scala和Java不同的是,Scala沒有基本型別與包裝型別之分,這些型別都是類,有自己的屬性和方法。
- scala 型別轉換:
a、自動型別轉換
案例1:將Long轉Float型別
val x: Long = 987654321
val y: Float = x // 9.8765434E8 (note that some precision is lost in this case)
案例2:將Char轉Int型別
val face: Char = '☺'
val number: Int = face // 9786
b、強制型別轉換
案例1:將Long型別強制轉換成Byte
var b:Long=a
b.toByte
案例2:將Long型別強制轉換成String
3. 操作符
A)、Scala中沒有操作符,只是以操作符的格式去進行方法呼叫。
//數學運算子 +、-、* 、/、% //關係操作符 > < >= <= != //邏輯操作符 && || //比較物件是否相等 == !=
注意:
1、a + b 等價於 a.+(b) 因為符號也是scala中的方法
2、Scala沒有++,-- 可以用+=,-=代替
3、操作符都是方法的過載,“.”是方法的呼叫
B)、擴充套件:位運算子 (二進位制:0:false 1:true)
1、如果指定 A = 60; 及 B = -13; 兩個變數對應的二進位制為:
A = 0011 1100 <<2 1111 0000
B = 0000 1101 >>2 0000 0011
2、運算子、描述、例項
& 按位與運算子 (a & b) 輸出結果 12 ,二進位制解釋: 0000 1100
| 按位或運算子 (a | b) 輸出結果 61 ,二進位制解釋: 0011 1101
^ 按位異或運算子 (a ^ b) 輸出結果 49 ,二進位制解釋: 0011 0001
(參加運算的兩個物件,如果兩個相應位為“異”(值不同),則該位結果為1,否則為0)
~ 按位取反運算子 (~a ) 輸出結果 -61 ,二進位制解釋: 1100 0011, 在一個有符號二進位制數的補碼形式。
<< 左移動運算子 a << 2 輸出結果 240 ,二進位制解釋: 1111 0000
(將一個運算物件的各二進位制位全部左移若干位(左邊的二進位制位丟棄,右邊補0))
>> 右移動運算子 a >> 2 輸出結果 15 ,二進位制解釋: 0000 1111
(將一個數的各二進位制位全部右移若干位,正數左補0,負數左補1,右邊丟棄)
>>> 無符號右移 A >>>2 輸出結果 15, 二進位制解釋: 0000 1111
(將一個數的各二進位制位全部右移若干位,左補0,右邊丟棄)
3、驗證結果使用win10計算器