日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

2021年大数据常用语言Scala(二十九):scala面向对象 单例对象

發(fā)布時間:2023/11/28 生活经验 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2021年大数据常用语言Scala(二十九):scala面向对象 单例对象 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

單例對象

定義object - 掌握

伴生對象 - 掌握

apply方法 - 掌握

main方法


單例對象

Scala中沒有static關(guān)鍵字,但是它支持靜態(tài)

如果要定義靜態(tài)的東西,統(tǒng)統(tǒng)定義到object中

語法:

object?xxx{
??// 內(nèi)容
}

反向理解,class中的東西, 全部是 非靜態(tài)的

?

定義object - 掌握

定義單例對象和定義類很像,就是把class換成object

示例:定義一個工具類,用來格式化日期時間

object?DateUtils {// 在object中定義的成員變量,相當于Java中定義一個靜態(tài)變量// 定義一個SimpleDateFormat日期時間格式化對象val?simpleDateFormat =?new?SimpleDateFormat("yyyy-MM-dd HH:mm")// 構(gòu)造代碼println("構(gòu)造代碼")// 相當于Java中定義一個靜態(tài)方法def?format(date:Date)?=?simpleDateFormat.format(date)// main是一個靜態(tài)方法,所以必須要寫在object中def?main(args:?Array[String]):?Unit?=?{println {?DateUtils.format(new?Date())?};}
}

?

使用object 單例對象名定義一個單例對象,可以用object作為工具類或者存放常量

在單例對象中定義的變量,類似于Java中的static成員變量

在單例對象中定義的方法,類似于Java中的static方法

object單例對象的構(gòu)造代碼可以直接寫在花括號中

調(diào)用單例對象的方法,直接使用單例對象名.方法名,訪問單例對象的成員變量也是使用單例對象名.變量名

單例對象只能有一個無參的主構(gòu)造器,不能添加其他參數(shù)

?

伴生對象 - 掌握

在Java中,經(jīng)常會有一些類,同時有實例成員又有靜態(tài)成員。如下:

public?class?CustomerService {private?static?Logger?logger =?Logger.getLogger("customerService");public?void?save(String?customer)?{logger.info("添加一個用戶");// 保存客戶}public?static?void?main(String[]?args)?{new?CustomerService().save("客戶");}
}

?

在scala中,可以使用伴生對象來實現(xiàn)。

?

一個class和object具有同樣的名字。這個object稱為伴生對象,這個class稱為伴生類

?

實例1:使用scala重寫上面的案例。

?

class?CustomerService {private?val?serviceName =?"CustomerService"def?save(customer:String):Unit?=?{// 在類中可以獲取伴生對象的私有成員變量CustomerService.logger.info("添加一個用戶")// 新增客戶}
}// 定義一個伴生對象
object?CustomerService {// 定義一個日志器private?val?logger =?Logger.getLogger("CustomerService")def?main(args:?Array[String]):?Unit?=?{val?customerService =?new?CustomerService()customerService.save("張三")// 在伴生對象中也可以訪問伴生類的私有方法println(customerService.serviceName)}
}

?

伴生類和伴生對象的名字必須是一樣的

伴生類和伴生對象需要在一個scala源文件中

伴生類和伴生對象可以互相訪問private的屬性

?

apply方法 - 掌握

我們之前使用過這種方式來創(chuàng)建一個Array對象。

?

// 創(chuàng)建一個Array對象
val?a =?Array(1,2,3,4)

?

這種寫法非常簡便,不需要再寫一個new,然后敲一個空格,再寫類名。如何直接使用類名來創(chuàng)建對象呢?

?

查看scala源代碼:

?

?

答案就是:實現(xiàn)伴生對象的apply方法

伴生對象的apply方法用來快速地創(chuàng)建一個伴生類的對象。

?

示例1:

class?Person(var?name:String,?var?age:Int)?{override?def?toString =?s"Person($name, $age)"
}object?Person {// 實現(xiàn)apply方法// 返回的是伴生類的對象def?apply(name:String,?age:Int):?Person =?new?Person(name,?age)// apply方法支持重載def?apply(name:String):Person =?new?Person(name,?20)def?apply(age:Int):Person =?new?Person("某某某",?age)def?apply():Person =?new?Person("某某某",?20)
}object?Main2 {def?main(args:?Array[String]):?Unit?=?{val?p1 =?Person("張三",?20)val?p2 =?Person("李四")val?p3 =?Person(100)val?p4 =?Person()println(p1)println(p2)println(p3)println(p4)}
}

?

當遇到類名(參數(shù)1, 參數(shù)2...)會自動調(diào)用apply方法,在apply方法中來創(chuàng)建對象

定義apply時,如果參數(shù)列表是空,也不能省略括號(),否則引用的是伴生對象

?

main方法

scala和Java一樣,如果要運行一個程序,必須有一個main方法。而在Java中main方法是靜態(tài)的,而在scala中沒有靜態(tài)方法。在scala中,這個main方法必須放在一個object中。

?

示例1:

object?Main5 {def?main(args:Array[String])?=?{println("hello, scala")}
}

?

也可以繼承自App Trait(特質(zhì)),然后將需要編寫在main方法中的代碼,寫在object的構(gòu)造方法體內(nèi)。

示例2:

object?Main5 extends?App {println("hello, scala")
}

?

總結(jié)

以上是生活随笔為你收集整理的2021年大数据常用语言Scala(二十九):scala面向对象 单例对象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。