您好,登錄后才能下訂單哦!
1、 object 相當于class的單個實例,因此,在object里聲明的變量都是靜態變量,靜態方法
2、 在object里聲明的變量,都是全局變量,也就是類的公共屬性,或者類似于java中父類的屬性
3、 object里的構造器,也就是object 內部不在method中的代碼,都屬于構造器的內容
4、 同樣,object的主構造器只會在第一次調用時執行,多次調用,只會執行一次。
object使用場景
1、 單例模式
2、 工具類
伴生對象與 伴生類?
如果有一個class,還有一個與class同名的object,那么就稱這個object是class的伴生對象,class是object的伴生類
要求:
伴生類和伴生對象必須存放在一個.scala文件之中
特性?
//伴生對象、伴生類里的私有屬性 跟 普通的私有屬性 相比?
//伴生對象,伴生類里的私有屬性的 使用范圍,擴大了。
//伴生對象 與 伴生類可以互相訪問彼此的私有屬性,而普通私有屬性僅僅只能在自己類里使用的
package com.xej.learning.objectLearning /** * objectLearning 測試 */ private[objectLearning] class Kafka(val name: String){ //目的:測試多次調用object時,其主構造方法調用幾次 def sayHello(): Unit ={ objectTest.name objectTest.name objectTest.name println("--------------------") } } object objectTest { val name = "spark" println("----object----主構造器--------") def main(args: Array[String]): Unit = { new Kafka("spark").sayHello() } }
執行結果如下:
----object----主構造器-------- --------------------
測試用例二:
package com.xej.learning.objectLearning /** * 主要測試伴生對象,伴生類里的私有屬性的訪問范圍 */ private[objectLearning] class Student(val name: String, val age: Int, address: String="xizhimen"){ private val sex = "male" val weight = 80 def sayHello(): Unit ={ Student.address = address //訪問伴生對象里的普通屬性 以及 私有屬性 println("name:\t" + name + " ----> " + " age:\t" + age + "\naddress:\t" + Student.address + " ----> school:\t" + Student.school) } } object Student{ //伴生對象里的私有屬性 跟 普通的私有屬性 相比? //伴生對象,伴生類里的私有屬性的 使用范圍,擴大了。 //伴生對象 與 伴生類可以互相訪問彼此的私有屬性,而普通私有屬性僅僅只能在自己類里使用的 private val school = "bjtu" //只能在伴生類里,調用,其他地方不能調用 var address = "beijing" //除了伴生類里,其他地方也可以調用,跟普通屬性一樣 //訪問伴生類里的屬性 val stu = new Student("lisi",22, "haidian") println("----訪問----伴生類里的---屬性-----name:\t" + stu.name) println("----訪問----伴生類里的---私有屬性-----sex:\t" + stu.sex) println("----訪問----伴生類里的---屬性-----weight:\t" + stu.weight) } object objectTest2 { def main(args: Array[String]): Unit = { //調用伴生對象里的public屬性 println("----address:\t" + Student.address) //school是伴生對象的私有屬性,這里不能訪問的 //println("----school:\t" + Student.school) new Student("zhansan", 19).sayHello() new Student("xiaoming", 22,"haidian").sayHello() } }
測試結果:
----訪問----伴生類里的---屬性-----name: lisi ----訪問----伴生類里的---私有屬性-----sex: male ----訪問----伴生類里的---屬性-----weight: 80 ----address: beijing name: zhansan ----> age: 19 address: xizhimen ----> school: bjtu name: xiaoming ----> age: 22 address: haidian ----> school: bjtu Process finished with exit code 0
總之:
看到伴生對象,伴生類,要立馬想到私有屬性
伴生對象的使用場景,也就是說,伴生對象是干什么用的,這樣的話,對于理解marathon源碼,spark源碼是有幫助的,不至于一頭霧水。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。