Scala類和對(duì)象

Nothing 類型推斷,不知具體類型
定義在object 中的變量、方法 都是靜態(tài)的
每一行最后可不寫(xiě)分號(hào)` ;`
定義變量可不寫(xiě)類型,會(huì)自動(dòng)推斷類型

變量和常量的聲明

定義變量或者常量的時(shí)候,也可以寫(xiě)上返回的類型,一般省略,如:val a:Int = 10
常量不可再賦值

/**
* 定義變量和常量
* 變量 :用 var 定義 ,可修改 
* 常量 :用 val 定義,不可修改
*/
var name = "zhangsan"
println(name)
name = "lisi"
println(name)
val gender = "m"
// gender = "m" // ?不能給常量再賦值

類和對(duì)象

創(chuàng)建類

class Person {
  val name = "zhangsan"
  val age = 18
  def sayName() = {
    "my name is "+ name
  }
}

創(chuàng)建對(duì)象

object Lesson_Class {
   def main(args: Array[String]): Unit = {
      val person = new Person()
      println(person.age);
      println(person.sayName())
   }
}

伴生類和伴生對(duì)象

class Person(xname:String , xage:Int) {
  var name = Person.name // 對(duì)象的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)
  }
}
  • scala 中的object是單例對(duì)象,相當(dāng)于java中的工具類,可以看成是定義靜態(tài)的方法的類。
  • object不可以傳參數(shù)。另:Trait不可以傳參數(shù)
  • scala中的class類可以傳參數(shù),傳參就有了默認(rèn)的構(gòu)造函數(shù)
  • 重寫(xiě)構(gòu)造函數(shù),第一行必須調(diào)用默認(rèn)構(gòu)造函數(shù)this(參數(shù)1, 參數(shù)2, …)
  • class 類屬性默認(rèn)就有gettersetter方法
  • 使用object時(shí)不用new;使用class時(shí)要new ,并且new的時(shí)候,class中除了普通方法不執(zhí)行,其他都執(zhí)行
  • class類的方法外面,可以直接print;new 類 時(shí)就打印
  • 如果在同一個(gè)文件中,object對(duì)象class類名稱相同,則這個(gè)對(duì)象就是這個(gè)類的伴生對(duì)象,這個(gè)類就是這個(gè)對(duì)象的伴生類??梢曰ハ嘣L問(wèn)私有變量(訪問(wèn)級(jí)別:private)
  • 同一個(gè)包下,兩個(gè)class 類名不能相同!重載也不行!


if else

val age = 18 
if (age < 18 ) {
    println("no allow")
} else if (18>=age && age<=20){
    println("allow with other")
} else {
    println("allow self")
}

// allow with other


for, while, do…while

1、tountil 的用法(不帶步長(zhǎng),帶步長(zhǎng)區(qū)別)

/**
* to和until
* 1 to 10 返回1到10的Range數(shù)組,包含10
* 1 until 10 返回1到10 Range數(shù)組 ,不包含10
*/
println(1 to 10 )       // Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
println(1.to(10))       // 與上面等價(jià)
    
println(1 to (10 ,2))   // 步長(zhǎng)為2,從1開(kāi)始打印 Range(1, 3, 5, 7, 9)
println(1.to(10, 2)) 
    
println(1 until 10 )     // 不包含最后一個(gè)數(shù) Range(1, 2, 3, 4, 5, 6, 7, 8, 9)
println(1.until(10))     // 與上面等價(jià)
println(1 until (10 ,3 ))// 步長(zhǎng)為2,從1開(kāi)始打印 Range(1, 4, 7)

2、創(chuàng)建for循環(huán)

for(i <- 1 to 10 ) {
    print(i+" ")
}

3、創(chuàng)建多層for循環(huán)

// 可以分號(hào)隔開(kāi),寫(xiě)入多個(gè)list賦值的變量,構(gòu)成多層for循環(huán)
// scala中 不能寫(xiě)count++ count-- 只能寫(xiě)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 +"\t")
    }
    if (i==j) {
        println()
    }
}

4、for循環(huán)中可以加條件判斷,可以使用分號(hào)隔開(kāi),也可以不使用分號(hào)

// 可以在for循環(huán)中加入條件判斷
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循環(huán)用yield 關(guān)鍵字返回一個(gè)集合
7、while循環(huán),while(){},do {}while()

// 將for中符合條件的元素 通過(guò)yield 放在一個(gè)集合中
val list = for(i <- 1 to 10  ; if(i > 5 )) yield i 
for( w <- list ) {
    println(w)
}

// while 循環(huán)
var index = 0 
while(index < 100 ) {
    println("第"+index+"次while 循環(huán)")
    index += 1 
}

index = 0 
do {
    index +=1 
    println("第"+index+"次do while 循環(huán)")
} while(index <100 )

8、foreach增強(qiáng)for循環(huán);匿名函數(shù)

val result = for (i <- 1 to 100; if (i%10==0)) yield i
result.foreach(x => {
    println(x)
})

// 直接打印元素,極簡(jiǎn)版
result.foreach(println(_))
result.foreach(println)



數(shù)據(jù)類型


Scala學(xué)習(xí)筆記導(dǎo)航

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 如果類沒(méi)有內(nèi)容(body),可以省略空的花括號(hào),只寫(xiě)一行語(yǔ)句 類可以帶參數(shù),類名稱C之后圓括號(hào)內(nèi)的參數(shù),x稱為類參...
    wangdy12閱讀 915評(píng)論 0 0
  • 有了前面的Scala基礎(chǔ),從本篇開(kāi)始由淺到易逐步介紹Scala編程的各個(gè)方面,博客不可能做到面面俱到,還是希望你有...
    MaLiang閱讀 261評(píng)論 0 2
  • 前面提到Scala比Java更加面向?qū)ο?,這是因?yàn)镾cala不允許類保護(hù)靜態(tài)元素(靜態(tài)變量或靜態(tài)方法)。在Scal...
    MaLiang閱讀 347評(píng)論 0 2
  • 類是對(duì)象的抽象,而對(duì)象是類的具體實(shí)例。類是抽象的,不占用內(nèi)存,而對(duì)象是具體的,占用存儲(chǔ)空間。類是用于創(chuàng)建對(duì)象的藍(lán)圖...
    Bloo_m閱讀 347評(píng)論 0 0
  • 類 類是對(duì)象的模板,在scala中可以使用new關(guān)鍵字聲明同結(jié)構(gòu)的對(duì)象class Person { privat...
    hipeer閱讀 321評(píng)論 0 0

友情鏈接更多精彩內(nèi)容