2.1 變數是程式的基本組成單位 舉一個簡單的例子 2.2 變數的介紹 2.2.1 概念 變數相當於記憶體中一個數據存儲空間的表示,可以把變數看作是一個房間的門牌號,通過門牌號我們可以找到對應的房間,而通過變數名可以訪問到變數(值)。 2.2.2 變數使用的基本步驟 1) 聲明/定義變數(Scala要 ...
2.1 變數是程式的基本組成單位
舉一個簡單的例子
object boke_demo01 { def main(args: Array[String]): Unit = { var a: Int = 10 //定義一個整型變數,取名 a,並賦初值 10 var b: Int = 12 //定義一個整型變數,取名 b,並賦初值 12 b = 9 //給變數b 賦 9 println("a=" + a) //輸出語句,把變數 a 的值輸出 println("b=" + b) //把變數 b 的值輸出 } }
2.2 變數的介紹
2.2.1 概念
變數相當於記憶體中一個數據存儲空間的表示,可以把變數看作是一個房間的門牌號,通過門牌號我們可以找到對應的房間,而通過變數名可以訪問到變數(值)。
2.2.2 變數使用的基本步驟
1) 聲明/定義變數(Scala要求變數聲明時初始化)
2) 使用
2.3 Scala變數的基本使用
2.3.1 快速入門
object boke_demo01 { def main(args: Array[String]): Unit = { var age: Int = 9 var sal: Double = 9.9 var name: String = "Jack" var ifPass: Boolean = true //在scala中,小數預設為Double ,整數預設為Int var score: Float = 22.9f println(s"${age} ${ifPass}") } }
示意圖
2.4 Scala變數使用說明
2.4.1 變數聲明基本語法
var | val 變數名 [: 變數類型] = 變數值
2.4.2 註意事項
1) 聲明變數時,類型可以省略(編譯器自動推導, 即類型推導)
2) 類型確定後,就不能修改,說明Scala是強數據類型語言
3) 在聲明/定義一個變數時,可以使用var或val來修飾,var修飾的變數可以改變,val修飾的變數不可改變
4) val修飾的變數在編譯後,等同於加上final
5) var 修飾的對象引用可以改變,val修飾的則不可改變,但對象的狀態(值)卻是可以改變的(比如: 自定義對象、數組、集合等)
6) 變數聲明時,需要初始值
2.5 程式中+號的使用
1) 當左右兩邊都是數值型時,則做加法運算
2) 當左右兩邊有一方為字元串,則做拼接運算
2.6 數據類型
1) Scala與Java有著相同的數據類型,在Scala中數據類型都是對象,也就是說Scala沒有Java中的原生類型
2) Scala數據類型分為兩大類 AnyVal(值類型)和AnyRef(引用類型),註意不管是AnyVal還是AnyRef都是對象
3) 相對於Java的類型系統,Scala更要複雜些,也正是這複雜多變的類型系統才讓面向對象編程和函數式編程完美的融合在了一起
2.6.1 Scala數據類型體系
對上面圖的小結和整理
1) 在Scala中有一個根類型Any,它是所有類的父類
2) Scala中一切皆為對象,分為兩大類 AnyVal(值類型)和AnyRef(引用類型),它們都是Any的子類
3) Null類型是Scala的特別類型,它只有一個值null,它是bottom class,是所有AnyRef類型的子類
4) Nothing類型也是bottom class,它是所有類的子類,在開發中通常可以將Nothing類型的值返回給任意變數或者函數,這裡拋出異常使用很多
object boke_demo01 { def main(args: Array[String]): Unit = { println(sayHello) } /*比如開發中,我們有一個方法,就會異常中斷,這時就可以返回Nothing 即當我們Nothing做返回值,就是明確說明該方法沒有沒有正常返回值*/ def sayHello: Nothing = { throw new Exception("拋出異常") } }
5) 在Scala中仍然遵守,低精度的值,向高精度的值自動轉換(implicit conversion)隱式轉換
var num_one = 1.7 //預設為 double var num_two = 1.9f //這是 float //num_two = num_one ,error ,修改 num_two = num_one.toFloat
2.6.2 Scala數據類型列表
2.7 整數類型
2.7.1 基本介紹
Scala的整數類型就是用於存放整數值的,比如 9,22,123等等
2.7.2 整型的類型
2.7.3 整型的使用細節
1) Scala各整數類型有固定的表數範圍和欄位長度,不受具體OS的影響,以保證Scala程式的可移植性
2) Scala的整型常量/字面量預設為Int類型,聲明Long類型常量/字面量時,須後加“l”或者“L”
3) Scala程式中變數常聲明為Int類型,除非不足以表示大數,才使用Long
4) 案例
object boke_demo01 { def main(args: Array[String]): Unit = { println("Long的最大值:" + Long.MaxValue + "~" + Long.MinValue) var a = 10 //a Int var b = 10l //b Long var c = 9223372036854775807l //說 9223372036854775807 超過 Int } }
2.8 浮點類型
2.8.1 基本介紹
Scala的浮點類型可以表示一個小數,比如 9.9f,22.9,0.6等等
2.8.2 浮點類型的分類
2.8.3 浮點類型使用細節
1) 與整數類型類似,Scala浮點類型也有固定的表數範圍和欄位長度,不受具體OS的影響
2) Scala的浮點類型常量預設為Double類型,聲明Float類型常量時,須後加“f”或者“F”
object boke_demo01 { def main(args: Array[String]): Unit = { var num1:Float = 1.2345678912f var num2:Double = 1.2345678912 println("num1=" + num1 + "\n" +"num2=" + num2) /* 運行結果: num1=1.2345679 num2=1.2345678912 */ } }
3) 浮點型常量有兩種表示形式
十進位數形式:如5.21,521.0f,.521等 (必須有小數點)
科學計數法形式:如5.21e2 = 5.21 乘以10的2次方,5.21E-2 = 5.21 除以10的2次方
4) 通常情況下,應該使用Double類型,因為它比Float類型更精確(小數點後大致7位)
2.9 字元類型(Char)
2.9.1 基本介紹
字元類型可以表示單個字元,字元類型是Char,16位無符號Unicode字元(2個位元組),區間值為U+0000到U+FFFF
2.9.2 案例演示
object boke_demo01 { def main(args: Array[String]): Unit = { var char1: Char = 99 //當我們輸出一個char類型是,它會輸出該數字對應的字元(碼值表 unicode)//unicode 碼值表包括ascii println("char1=" + char1) // c //char可以當做數字進行運行 var char2: Char = 'c' var num = 10 + char2 println("num=" + num) // 109 //原因和分析 //1. 當把一個計算的結果賦值一個變數,則編譯器會進行類型轉換及判斷(即會看範圍+類型) //2. 當把一個字面量賦值一個變數,則編譯器會進行範圍的判定 // var c2: Char = 'c' + 1 error // var c3: Char = 99 + 1 error // var c4: Char = 100 true } }
2.9.3 字元類型使用細節
1) 字元常量是使用單引號( ' ' )括起來的單個字元,例如:var a1 = 'a', var a2 = '張', var a3 = '20'
2) Scala也允許使用轉義字元 '\' 來將其後的字元轉變為特殊字元型常量,例如:var a4 = '\n' ('\n'表示換行符)
3) 可以直接給Char賦一個整數,然後輸出時,會按照對應的Unicode字元輸出
4) Char類型是可以進行運算的,相當於一個整數,因為它都對應有Unicode碼
2.10 布爾類型(Boolean)
2.10.1 基本介紹
布爾類型也叫Boolean類型,Boolean類型數據只允許取值true或false,布爾類型占一個位元組
布爾類型適用於邏輯運算,一般用於程式流程式控制制 [後面詳解]
2.11 Unit類型、Null類型和Nothing類型
2.11.1 基本說明
2.11.2 使用細節案例
1) Unit類型用來標識過程,也就沒有明確返回值的函數。由此可見,Unit類似於Java里的void。Unit直郵一個實例,(),這個實例也沒有實質的意義
2) Null類只有一個實例對象,null,類似於Java中null的引用。null可以賦值給任意引用類型(AnyRef),但是不能賦值給值類型(AnyVal,比如:Int,Float,Char, Boolean,Long,Double,Byte,Short)
3) Nothing,可以作為沒有正常返回值的方法的返回類型,非常直觀的告訴你這個方法不會正常返回,而且由於Nothing是其它任意類型的子類,它還能跟要求返回值的方法相容
4) 代碼案例
object boke_demo01 { def main(args: Array[String]): Unit = { val res = sayHello() println("res=" + res) //Null類只有一個實例對象,null,類似於Java中的null引用。null可以賦值給任意引用類型(AnyRef) //但是不能賦值給值類型(AnyVal: 比如 Int, Float, Char, Boolean, Long, Double, Byte, Short) val dog: Dog = null //錯誤 // val char1: Char = null // println("ok~~~") } //Unit等價於java的void,只有一個實例值() def sayHello(): Unit = { } class Dog { } }
2.12 值類型轉換
2.12.1 值類型隱式轉換
當Scala程式在進行賦值或者運算時,精度小的數據類型自動轉換為精度大的數據類型這個就是自動類型轉換(隱式轉換)
數據類型按精度(容量)大小排序為
自動類型轉換細節說明
1)
2)
3)
4)
5)