注: --------scala 中的任何數(shù)據(jù)都是對象
專業(yè)成都網(wǎng)站建設(shè)公司,做排名好的好網(wǎng)站,排在同行前面,為您帶來客戶和效益!成都創(chuàng)新互聯(lián)公司為您提供成都網(wǎng)站建設(shè),五站合一網(wǎng)站設(shè)計制作,服務(wù)好的網(wǎng)站設(shè)計公司,成都網(wǎng)站設(shè)計、做網(wǎng)站負(fù)責(zé)任的成都網(wǎng)站制作公司!--------Scala 可以對數(shù)據(jù)類型進(jìn)行自動推導(dǎo),所以定義變量時可省去數(shù)據(jù)類型
==> 數(shù)據(jù)類型
--> 數(shù)值類型
--- Byte 8位
--- Short 16 位
--- Int 32 位
--- long 64位
--> 字符和字符串類型
--- Char
--- String
--> Unit 類型 相當(dāng)于 Java 的 void
--> Nothing 類型 般表示運(yùn)行過程中出現(xiàn)了 Exception
==> 定義變量
--> 格式: var | val 變量名:類型 = 內(nèi)容
--> var 定義值可變的變量
var a = "hello" // var a:String = "hello" var b = 12345 // var b: Int = 12345
--> val 定義值不可變的常量
val a = "word"
==> 函數(shù)
--> 格式: def 函數(shù)名(變量名:類型 | 變量名:=> 類型): 函數(shù)返回值類型 = {}
--> 函數(shù)參數(shù):
--- call by value : def demo(x:Int, y: Int): Int = x + x 對函數(shù)的實參求值
demo(3+4, 8)
計算過程:
7 + (3+4)
7 + 7
14
--- call by name : def demo(x: => Int, y: => Int): Int = x + x 函數(shù)的實參每次在函數(shù)體內(nèi)部被調(diào)用的時候都會求值
demo(3+4, 8)
計算過程:
7 + 7
14
--- 默認(rèn)參數(shù):def func1(name: String = "Tom"): String = "Hello" + name
--- 代名參數(shù) :
def func2(str: String="My name", name: String="Marry", age: Int=18): String = { str + " is " + name + ", I'm " + age + "啦!" } func2(name="Tom") func2()
--- 可變參數(shù) : 求多個數(shù)字的和
def sum(args: Int*) = { var result = 0 for(arg <- args) result += arg result } sum(1, 2, 3)
==> 懶值(lazy): 如果一個變量是 lazy , 他的初始化會被推遲,直到第一次使用它的時候才會執(zhí)行
--> 正常的變量定義后會直接賦給變量,如:
var a = "hello"
定義變量后會返回: a : String = "hello"
--> 使用 lazy 定義變量時,不會執(zhí)行,只有在第一次執(zhí)行的時候才會執(zhí)行賦值操作,如:
lazy var a = "hello"
定義變量后返回: a: String =
只有使用變量時,才會進(jìn)行賦值操作:
a
String = "hello"
==> 異常: 異常的處理機(jī)制是什么? 向上處理
-->采用 try{ …… }catch{ …… }finally{……} 捕獲和處理異常
try{ val words = scala.io.Source.fromFile("d:\\demo\\a.txt").mkString }catch{ case ex:java.io.FileNotFoundException => { println("File Not Found!!!") } case ex: IllegalArgumentException => { println("Illegal Argument Exception!!!") } case _:Exception => { println("othe Exception") } }finally{ println("finally block") }
--> 如果一個函數(shù)的返回類型是Nothing, 表示在函數(shù)執(zhí)行過程中產(chǎn)生異常
def func1() = throw new IllegalArgumentException("Some Error Happened")
--> if else 語句,如果在一個分支中產(chǎn)生了異常,則另一個分支的返回值,將作為if else 返回值的類型
val x = 10 if(x >= 0){ scala.math.sqrt(x) }else{ throw new IllegalArgumentException("The value should be not") }
==> 數(shù)組
--> 定長數(shù)組:使用關(guān)鍵字 Array
val a = new Array[Int](10) val str = new Array[String](5) val demo_list = Array("Tom", "Marry", "Mike")
--> 變長數(shù)組:使用關(guān)鍵字 ArrayBuffer
val list1 = ArrayBuffer[Int]() // 向數(shù)組中插入元素 list1 += 1 list1 += 5 // 向數(shù)組中插入多個元素 list1 += (20, 55, 47) // 去掉最后三個值 list1.trimEnd(3) // 將 ArrayBuffer 轉(zhuǎn)換為 Array list1.toArray
--> 遍歷數(shù)組
// 創(chuàng)建數(shù)組 var names = Array("Tom","Marry","Linda") // 使用 for 循環(huán)遍歷 for(name <- names) println(name) // 使用 foreach 遍歷 names.foreach(println) // 對數(shù)組進(jìn)行轉(zhuǎn)換,生成一個新的數(shù)組 val newnames = for{ name <- names new = name.toUpperCase }yeild(new)
--> 數(shù)組常用操作
import scala.collection.mutable.ArrayBuffer val demoArray = Array(6,8,4,,5,2,6,5,4) // 大值 demoArray.max // 最小值 demoArray.min // 求和 demoArray.sum // 定義一個變長數(shù)組 demoArrayBuffer = ArrayBuffer(5,3,5,7,8,7,9,5,74) // 降序排序 demoArrayBuffer.sortWith(_ > _) // 升序排序 demoArrayBuffer.sortWith(_ < _)
==> 映射: 一個由 key, value 組成的集合
--> 使用 -> 符號創(chuàng)建
val demoMap = Map("Tom" -> 11, "Marry" -> 44)
--> 不可變 Map
val testMap = scala.collection.immutable.Map("Tom" -> 20, "Marry" -> 18)
--> 可變 Map
val testMap = scala.collection.mutable.Map("Tom" -> 20, "Marry" -> 18) val testMap1 = scala.collection.mutable.Map(("Tom", 20),("Marry", 18))
--> 映射操作
// 獲取映射中的值,如果不存在,會拋出 Exception testMap("Tom") // 可通過 Map.constains 事先判斷數(shù)據(jù)是否存在,然后再取值 if(testMap.contains("Tom")){ testMap("Tom") }else{ -1 } // 簡寫 testMap.getOrElse("Tom", -1) // 更新值 testMap("Tom") = 25 // 添加新元素 testMap += "lily" -> 18 // 移除元素 testMap -= "Tom" // 迭代,使用 for,或者 foreach for(m <- testMap)println(m) testMap.foreach(println)
==> 元組: 不同類型的值的聚集
--> 創(chuàng)建元組: val 名稱+個數(shù) = (元素,元素)
val tu1 = (1, 2, 3) val tu2 = new Tuple2("hello", "world")
--> 訪問元組中的元素
tu1._1 //點(diǎn)后面跟的是第幾個元素 1
--> 遍歷元組,使用foreach 遍歷元組,注意,元組遍歷前首先需要生成對應(yīng)的迭代器,不能直接使用for 或者 foreach 進(jìn)行遍歷
tu1.productIterator.foreach(println)
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。