一、前述
Scala是基於JVM的另一個語言。
Scala官網6個特徵。
1).Java和scala可以混編
2).型別推測(自動推測型別)
3).併發和分散式(Actor)
4).特質,特徵(類似java中interfaces 和 abstract結合)
5).模式匹配(類似java switch)
6).高階函式
二、Scala基礎
1.資料型別
2、變數和常量的宣告
- 定義變數或者常量的時候,也可以寫上返回的型別,一般省略,如:val a:Int = 10
- 常量不可再賦值
/**
* 定義變數和常量
* 變數 :用 var 定義 ,可修改
* 常量 :用 val 定義,不可修改
*/
var name = "zhangsan"
println(name)
name ="lisi"
println(name)
val gender = "m"
// gender = "m"//錯誤,不能給常量再賦值
3、類和物件
- 建立類
class Person{ val name = "zhangsan" val age = 18 def sayName() = { "my name is "+ name } }
- 建立物件
object Lesson_Class { def main(args: Array[String]): Unit = { val person = new Person() println(person.age); println(person.sayName()) } }
- 伴生類和伴生物件
class Person(xname :String , xage :Int){ var name = Person.name val age = xage var gender = "m" def this(name:String,age:Int,g:String){ this(name,age) gender = g } def sayName() = { "my name is "+ name } } object Person { val name = "zhangsanfeng" def main(args: Array[String]): Unit = { val person = new Person("wagnwu",10,"f") println(person.age); println(person.sayName()) println(person.gender) } }
PS:
建議類名首字母大寫 ,方法首字母小寫,類和方法命名建議符合駝峰命名法。
scala 中的object是單例物件,相當於java中的工具類,可以看成是定義靜態的方法的類。object不可以傳引數。另:Trait不可以傳引數
scala中的class類預設可以傳引數,預設的傳引數就是預設的建構函式。
重寫建構函式的時候,必須要呼叫預設的建構函式。
class 類屬性自帶getter ,setter方法。
使用object時,不用new,使用class時要new ,並且new的時候,class中除了方法不執行,其他都執行。
如果在同一個檔案中,object物件和class類的名稱相同,則這個物件就是這個類的伴生物件,這個類就是這個物件的伴生類。可以互相訪問私有變數。
4、for ,while,do…while的使用
1、to和until 的用法(不帶步長,帶步長區別)
/** * to和until * 例: * 1 to 10 返回1到10的Range陣列,包含10 * 1 until 10 返回1到10 Range陣列 ,不包含10 */ println(1 to 10 )//列印 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 println(1.to(10))//與上面等價,列印 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 println(1 to (10 ,2))//步長為2,從1開始列印 ,1,3,5,7,9 println(1.to(10, 2)) println(1 until 10 ) //不包含最後一個數,列印 1,2,3,4,5,6,7,8,9 println(1.until(10))//與上面等價 println(1 until (10 ,3 ))//步長為2,從1開始列印,列印1,4,7
2、 建立for迴圈
/** * for 迴圈 * */ for( i <- 1 to 10 ){ println(i) }
3、建立多層for迴圈
//可以分號隔開,寫入多個list賦值的變數,構成多層for迴圈 //scala中 不能寫count++ count-- 只能寫count+ var count = 0; for(i <- 1 to 10; j <- 1 until 10){ println("i="+ i +", j="+j) count += 1 } println(count); //例子: 列印小九九 for(i <- 1 until 10 ;j <- 1 until 10){ if(i>=j){ print(i +" * " + j + " = "+ i*j+" ") } if(i==j ){ println() } }
4、for迴圈中可以加條件判斷,分號隔開
//可以在for迴圈中加入條件判斷 for(i<- 1 to 10 ;if (i%2) == 0 ;if (i == 4) ){ println(i) }
5、scala中不能使用count++,count—只能使用count = count+1 ,count += 1
6、for迴圈用yield 關鍵字返回一個集合。
7、while迴圈,while(){},do {}while()
//將for中的符合條件的元素通過yield關鍵字返回成一個集合 val list = for(i <- 1 to 10 ; if(i > 5 )) yield i for( w <- list ){ println(w) } /** * while 迴圈 */ var index = 0 while(index < 100 ){ println("第"+index+"次while 迴圈") index += 1 } index = 0 do{ index +=1 println("第"+index+"次do while 迴圈") }while(index <100 )