真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Scala的伴生類(lèi)和伴生對(duì)象實(shí)例介紹

這篇文章主要講解了“Scala的伴生類(lèi)和伴生對(duì)象實(shí)例介紹”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Scala的伴生類(lèi)和伴生對(duì)象實(shí)例介紹”吧!

讓客戶(hù)滿(mǎn)意是我們工作的目標(biāo),不斷超越客戶(hù)的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶(hù),將通過(guò)不懈努力成為客戶(hù)在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名雅安服務(wù)器托管、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、吐魯番網(wǎng)站維護(hù)、網(wǎng)站推廣。

scala 是多范式編程語(yǔ)言。多范式,就是多種編程方法的意思。有哪些編程方法呢?目前說(shuō)來(lái),有面向過(guò)程,面向?qū)ο螅盒?,函?shù)式四種程序設(shè)計(jì)方法。

單例對(duì)象與類(lèi)同名時(shí),這個(gè)單例對(duì)象被稱(chēng)為這個(gè)類(lèi)的伴生對(duì)象,而這個(gè)類(lèi)被稱(chēng)為這個(gè)單例對(duì)象的伴生類(lèi)。伴生類(lèi)和伴生對(duì)象要在同一個(gè)源文件中定義,伴生對(duì)象和伴生類(lèi)可以互相訪問(wèn)其私有成員。不與伴生類(lèi)同名的單例對(duì)象稱(chēng)為孤立對(duì)象

scala 對(duì)象程序入口絕對(duì)是ojbect Name {def main(args:Array[String]) {待執(zhí)行語(yǔ)句}}

看看例子:

import scala.collection.mutable.Map

class ChecksumAccumulator {
  private var sum = 0
  def add(b: Byte) {
    sum += b
  }
  def checksum(): Int = ~(sum & 0xFF) + 1
}

object ChecksumAccumulator {
  private val cache = Map[String, Int]()
  def calculate(s: String): Int =
    if (cache.contains(s))
      cache(s)
    else {
      val acc = new ChecksumAccumulator
      for (c <- s)
        acc.add(c.toByte)
      val cs = acc.checksum()
      cache += (s -> cs)
      println("s:"+s+" cs:"+cs)
      cs
    }

  def main(args: Array[String]) {
    println("Java 1:"+calculate("Java"))
    println("Java 2:"+calculate("Java"))
    println("Scala :"+calculate("Scala"))
  }
}

ChecksumAccumulator單例對(duì)象有一個(gè)方法,calculate,用來(lái)計(jì)算所帶的String參數(shù)中字符的校驗(yàn)和。它還有一個(gè)私有字段,cache,一個(gè)緩存之前計(jì)算過(guò)的校驗(yàn)和的可變映射。2方法的第一行,“if (cache.contains(s))”,檢查緩存,看看是否傳遞進(jìn)來(lái)的字串已經(jīng)作為鍵存在于映射當(dāng)中。如果是,就僅僅返回映射的值,“cache(s)”。否則,執(zhí)行else子句,計(jì)算校驗(yàn)和。else子句的第一行定義了一個(gè)叫acc的val并用新建的ChecksumAccumulator實(shí)例初始化它。下一行是個(gè)for表達(dá)式,對(duì)傳入字串的每個(gè)字符循環(huán)一次,并在其上調(diào)用toByte把字符轉(zhuǎn)換成Byte,然后傳遞給acc所指的ChecksumAccumulator實(shí)例的add方法。完成了for表達(dá)式后,下一行的方法在acc上調(diào)用checksum,獲得傳入字串的校驗(yàn)和,并存入叫做cs的val。下一行,“cache += (s -> cs)”,傳入的字串鍵映射到整數(shù)的校驗(yàn)和值,并把這個(gè)鍵-值對(duì)加入cache映射。方法的最后一個(gè)表達(dá)式,“cs”,保證了校驗(yàn)和為此方法的結(jié)果。

這里打印的結(jié)果是:

s:Java cs:-130
Java 1:-130
Java 2:-130
s:Scala cs:-228
Scala :-228

問(wèn)題來(lái)了,ChecksumAccumulator單例對(duì)象是不能new的,但是在代碼中出現(xiàn)了val acc = new ChecksumAccumulator,這不是矛盾嗎?其實(shí)不然,這里new的其實(shí)是ChecksumAccumulator單例對(duì)象的伴生類(lèi),即ChecksumAccumulator類(lèi),而伴生類(lèi)和伴生對(duì)象可以互相訪問(wèn)對(duì)方的私有成員,所以acc可以訪問(wèn)ChecksumAccumulator單例對(duì)象的cache變量。同理,那么第一次測(cè)試“Java”字符串的時(shí)候,acc實(shí)例執(zhí)行了checksum()方法,接下來(lái)并把這個(gè)數(shù)據(jù)存到cache這個(gè)val中。在第二次測(cè)試“Java”字符串的時(shí)候,程序是直接從cache變量中獲取到了數(shù)據(jù),并返回。

這里也可以看出類(lèi)和單例對(duì)象的一個(gè)差別是,單例對(duì)象是在第一次訪問(wèn)的時(shí)候初始化,不可以new,不能帶參數(shù),而類(lèi)可以new,可以帶參數(shù)。每個(gè)單例對(duì)象都被作為由一個(gè)靜態(tài)變量指向的虛構(gòu)類(lèi):synthetic class的一個(gè)實(shí)例來(lái)實(shí)現(xiàn),因此它們與Java靜態(tài)類(lèi)有著相同的初始化語(yǔ)法。

感謝各位的閱讀,以上就是“Scala的伴生類(lèi)和伴生對(duì)象實(shí)例介紹”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Scala的伴生類(lèi)和伴生對(duì)象實(shí)例介紹這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


分享題目:Scala的伴生類(lèi)和伴生對(duì)象實(shí)例介紹
分享地址:http://weahome.cn/article/jdgood.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部