建站服務(wù)器
1、 object 相當于class的單個(gè)實(shí)例,因此,在object里聲明的變量都是靜態(tài)變量,靜態(tài)方法
2、 在object里聲明的變量,都是全局變量,也就是類(lèi)的公共屬性,或者類(lèi)似于java中父類(lèi)的屬性
3、 object里的構造器,也就是object 內部不在method中的代碼,都屬于構造器的內容
4、 同樣,object的主構造器只會(huì )在第一次調用時(shí)執行,多次調用,只會(huì )執行一次。
object使用場(chǎng)景
1、 單例模式
2、 工具類(lèi)
伴生對象與 伴生類(lèi)?
如果有一個(gè)class,還有一個(gè)與class同名的object,那么就稱(chēng)這個(gè)object是class的伴生對象,class是object的伴生類(lèi)
要求:
伴生類(lèi)和伴生對象必須存放在一個(gè).scala文件之中
特性?
//伴生對象、伴生類(lèi)里的私有屬性 跟 普通的私有屬性 相比?
//伴生對象,伴生類(lèi)里的私有屬性的 使用范圍,擴大了。
//伴生對象 與 伴生類(lèi)可以互相訪(fǎng)問(wèn)彼此的私有屬性,而普通私有屬性?xún)H僅只能在自己類(lèi)里使用的
package com.xej.learning.objectLearning /** * objectLearning 測試 */ private[objectLearning] class Kafka(val name: String){ //目的:測試多次調用object時(shí),其主構造方法調用幾次 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 /** * 主要測試伴生對象,伴生類(lèi)里的私有屬性的訪(fǎng)問(wèn)范圍 */ 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 //訪(fǎng)問(wèn)伴生對象里的普通屬性 以及 私有屬性 println(name:\\t name ----> age:\\t age \\naddress:\\t Student.address ----> school:\\t Student.school) } } object Student{ //伴生對象里的私有屬性 跟 普通的私有屬性 相比? //伴生對象,伴生類(lèi)里的私有屬性的 使用范圍,擴大了。 //伴生對象 與 伴生類(lèi)可以互相訪(fǎng)問(wèn)彼此的私有屬性,而普通私有屬性?xún)H僅只能在自己類(lèi)里使用的 private val school = bjtu //只能在伴生類(lèi)里,調用,其他地方不能調用 var address = beijing //除了伴生類(lèi)里,其他地方也可以調用,跟普通屬性一樣 //訪(fǎng)問(wèn)伴生類(lèi)里的屬性 val stu = new Student(lisi,22, haidian) println(----訪(fǎng)問(wèn)----伴生類(lèi)里的---屬性-----name:\\t stu.name) println(----訪(fǎng)問(wèn)----伴生類(lèi)里的---私有屬性-----sex:\\t stu.sex) println(----訪(fǎng)問(wèn)----伴生類(lèi)里的---屬性-----weight:\\t stu.weight) } object objectTest2 { def main(args: Array[String]): Unit = { //調用伴生對象里的public屬性 println(----address:\\t Student.address) //school是伴生對象的私有屬性,這里不能訪(fǎng)問(wèn)的 //println(----school:\\t Student.school) new Student(zhansan, 19).sayHello() new Student(xiaoming, 22,haidian).sayHello() } }
測試結果:
----訪(fǎng)問(wèn)----伴生類(lèi)里的---屬性-----name: lisi ----訪(fǎng)問(wèn)----伴生類(lèi)里的---私有屬性-----sex: male ----訪(fǎng)問(wèn)----伴生類(lèi)里的---屬性-----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
總之:
看到伴生對象,伴生類(lèi),要立馬想到私有屬性
伴生對象的使用場(chǎng)景,也就是說(shuō),伴生對象是干什么用的,這樣的話(huà),對于理解marathon源碼,spark源碼是有幫助的,不至于一頭霧水。
更多關(guān)于云服務(wù)器,域名注冊,虛擬主機的問(wèn)題,請訪(fǎng)問(wèn)特網(wǎng)科技官網(wǎng):wap.friendlycc.com.cn
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站