国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

2023_Spark_實(shí)驗(yàn)五:Scala面向?qū)ο蟛糠盅菔荆ㄒ唬↖DEA開發(fā))

這篇具有很好參考價(jià)值的文章主要介紹了2023_Spark_實(shí)驗(yàn)五:Scala面向?qū)ο蟛糠盅菔荆ㄒ唬↖DEA開發(fā))。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1、面向?qū)ο蟮幕靖拍?/p>

把數(shù)據(jù)及對(duì)數(shù)據(jù)的操作方法放在一起,作為一個(gè)相互依存的整體——對(duì)象,面向

對(duì)象的三大特征:

  • ?封裝

  • ?繼承

  • ?多態(tài)

2、類的定義

簡(jiǎn)單類和無(wú)參方法


class?Counter{

private var?value?=0;

def?increment() {?value+=1};

def?current() =value;

}



//注意:class?前面沒有public?關(guān)鍵字修飾

如果要開發(fā)main方法,需要將main方法定義在該類的伴生對(duì)象中,即:object對(duì)

象中,(后續(xù)做詳細(xì)的討論):


class?Counter{

private var?value?=0;

def?increment() {?value+=1};

def?current() =value;

}



//Scala?中類的定義

class?Student1{

//定義屬性

private var?stuName:String?=?"Tom"

private var?stuAge:Int?=20



//成員方法

def?getStuName():String?=?stuName

def?setStuName(newName:String) =this.stuName=newName



def?getStuAge():Int?=?stuAge

def?setStuAge(newAge:Int) =?this.stuAge=newAge

}



object?student {

def?main(args: Array[String]):?Unit?= {

//測(cè)試student1

var?s1 =?new?Student1



//第一次輸出

println(s1.getStuName() +?"\t"?+ s1.getStuAge())



//調(diào)用set方法

s1.setStuName("Mary")

s1.setStuAge(25)



//第二次輸出

println(s1.getStuName() +?"\t"?+ s1.getStuAge())



//第三次輸出

// println(s1.stuName + "\t" + s1.stuAge)



}

}

3、屬性的getter和setter方法

當(dāng)定義屬性是private時(shí)候,scala會(huì)自動(dòng)為其生成對(duì)應(yīng)的get和set方法,如下所

示:

private var stuName:String = "Tom"

get方法: stuName ----> s2.stuName() 由于stuName是方法的名字,所

以可以加上一個(gè)括號(hào)

set方法: stuName_= ----> stuName_= 是方法的名字

定義屬性:private var money:Int = 1000 希望money只有g(shù)et方法,沒有

set方法??

辦法:將其定義為常量private val money:Int = 1000

private[this]的用法:該屬性只屬于該對(duì)象私有,就不會(huì)生成對(duì)應(yīng)的set和

get方法。如果這樣,就不能直接調(diào)用,例如:s1.stuName ---> 錯(cuò)誤


//屬性的get?和?set?方法

/*

1.當(dāng)定義屬性是private?時(shí)候,scala會(huì)自動(dòng)為其生成對(duì)應(yīng)的get?和set方法

private var stuName:String = "Tom"

(1) get?方法:stuName ----> s2.stuName()

(2) set?方法:stuName_=



2.定義屬性:private var money:Int = 1000?希望money只有g(shù)et方法,沒有set方法?

方法:將其定義為常量private val money:Int = 1000



3.private[this]

3.private[this]的方法:該屬性只屬于該對(duì)象私有,就不會(huì)生成對(duì)應(yīng)的set和get方法

*/



class?Student2 {

//定義屬性

private?var?stuName:String?=?"Tom"

//private [this] var stuAge:Int =20

private?var?stuAge:Int?=?20

private val?money:Int?=?1000



}



//測(cè)試

object?Student2 {



def?main(args: Array[String]):?Unit?= {

var?s2 =?new?Student2

println(s2.stuName?+?"\t"?+ s2.stuAge)

println(s2.stuName?+?"\t"?+s2.stuAge?+?"\t"?+ s2.money)



//修改money的值?--》?error

//s2.money = 2000



}

}

4、內(nèi)部類(嵌套類)

我們可以在一個(gè)類的內(nèi)部在定義一個(gè)類,如下:我們?cè)赟tudent類中,再定義了

一個(gè)Course類用于保存學(xué)生選修的課程:


import?scala.collection.mutable.ArrayBuffer



//嵌套類:內(nèi)部類

class?Student3 {

//定義一個(gè)內(nèi)部類:記錄學(xué)生選修的課程信息

class?Course(val?courseName:String,val?credit:Int){

//定義其他方法

}

private?var?stuName:String?=?"Tom"

private?var?stuAge:Int?=?20

//定義一個(gè)ArrayBuffer記錄學(xué)生選修的所有課程

private var?courseList?=?new?ArrayBuffer[Course]()

//定義方法往學(xué)生信息中添加新的課程

def?addNameCourse(cname:String,credit:Int):?Unit?={

//創(chuàng)建新的課程

var?c =?new?Course(cname,credit)

//將課程加入list

courseList?+= c

}

}



//測(cè)試

object?Student3 {

def?main(args: Array[String]):?Unit?= {

//創(chuàng)建學(xué)生對(duì)象

var?s3 =?new?Student3

//給該學(xué)生添加新的課程

s3.addNameCourse("Chinese",2)

s3.addNameCourse("English",3)

s3.addNameCourse("Math",4)

//輸出

println(s3.stuName?+?"\t"?+ s3.stuAge)

println("*********選修課程***********")

for?(s <-s3.courseList)?println(s.courseName +?"\t"?+ s.credit)

}



}

5、類的構(gòu)造器

類的構(gòu)造器分為:主構(gòu)造器、輔助構(gòu)造器

主構(gòu)造器:和類的聲明結(jié)合在一起,只能有一個(gè)主構(gòu)造器

Student4(val stuName:String,val stuAge:Int)

(1) 定義類的主構(gòu)造器:兩個(gè)參數(shù)

(2) 聲明了兩個(gè)屬性:stuName和stuAge 和對(duì)應(yīng)的get和set方法

輔助構(gòu)造器:可以有多個(gè)輔助構(gòu)造器,通過關(guān)鍵字this來(lái)實(shí)現(xiàn)


/*

類的構(gòu)造器

1.主構(gòu)造器:和類的聲明結(jié)合在一起;只能有一個(gè)主構(gòu)造器

Student4(val stuName:String,var stuAge:Int)

(1)定義類的主構(gòu)造器:兩個(gè)參數(shù)

(2)聲明了兩個(gè)屬性:stuName和stuAge?和 對(duì)應(yīng)的get?和?set?方法

2.輔助構(gòu)造器:可以有多個(gè)輔助構(gòu)造器

通過關(guān)鍵字this?來(lái)實(shí)現(xiàn)

*/



class?Student4 (val?stuName:String,val?stuAge:Int) {

//定義輔助構(gòu)造器

def this(age:Int){

//調(diào)用主構(gòu)造器

this("no name",age)

}

}



object?Student4 {

def?main(args: Array[String]):?Unit?= {

//創(chuàng)建Student4的一個(gè)對(duì)象

var?s4 =?new?Student4("Tom",20)

println(s4.stuName +?"\t"?+s4.stuAge)



//創(chuàng)建一個(gè)新的Student4?的對(duì)象

var?s42 =?new?Student4(25)

println(s42.stuName +?"\t"?+ s42.stuAge)

}



}

6、Scala中的Object對(duì)象

Scala沒有靜態(tài)的修飾符,但Object對(duì)象下的成員都是靜態(tài)的 ,若有同名的

class,這其作為它的伴生類。在Object中一般可以為伴生類做一些初始化等操

作。下面是Java中的靜態(tài)塊的例子。在這個(gè)例子中,我們對(duì)JDBC進(jìn)行了初始化:

而Scala中的Object就相當(dāng)于Java中靜態(tài)塊。

在 Scala 中,是沒有 static 這個(gè)東西的,但是它也為我們提供了單例模式的

實(shí)現(xiàn)方法,那就是使用關(guān)鍵字 object。

Scala 中使用單例模式時(shí),除了定義的類之外,還要定義一個(gè)同名的 object 對(duì)

象,它和類的區(qū)別是,object對(duì)象不能帶參數(shù)。

當(dāng)單例對(duì)象與某個(gè)類共享同一個(gè)名稱時(shí),他被稱作是這個(gè)類的伴生對(duì)象:

companion object。你必須在同一個(gè)源文件里定義類和它的伴生對(duì)象。類被稱為

是這個(gè)單例對(duì)象的伴生類:companion class。類和它的伴生對(duì)象可以互相訪問

其私有成員。

Object對(duì)象的應(yīng)用

單例對(duì)象


//利用object?對(duì)象實(shí)現(xiàn)單例模式

object?CreditCard {

//變量保存信用卡號(hào),這里比較好的做法,是定義成private[this],即:該屬性只屬于該對(duì)象,這個(gè)方法由于定義在object中,所以是靜態(tài)的,即:?jiǎn)卫?


private[this]?var?creditCardNumber:Long?=?0



//產(chǎn)生新的卡號(hào)

def?generateNewCCNumber():Long?= {

creditCardNumber?+=?1

creditCardNumber

}

//測(cè)試程序

def?main(args: Array[String]):?Unit?= {

//產(chǎn)生新的卡號(hào)

println(CreditCard.generateNewCCNumber())

println(CreditCard.generateNewCCNumber())

println(CreditCard.generateNewCCNumber())

println(CreditCard.generateNewCCNumber())

}

}

使用應(yīng)用程序?qū)ο螅嚎梢允÷詍ain方法;需要從父類App繼承。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-694522.html


//使用應(yīng)用程序?qū)ο螅梢允÷詍ain方法

object?HelloWorld?extends?App{



/*

def main(args: Array[String]): Unit = {

//這里的main就可以不寫。相當(dāng)于下面的代碼是在main方法中執(zhí)行的。

}

*/

println("Hello World")

///如何取得命令行的參數(shù)

if(args.length >?0) {

println(args(0))

}else{

println("no arguents")

}

}

到了這里,關(guān)于2023_Spark_實(shí)驗(yàn)五:Scala面向?qū)ο蟛糠盅菔荆ㄒ唬↖DEA開發(fā))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包