對(duì)照J(rèn)AVA學(xué)習(xí)Rust(07)--類和結(jié)構(gòu)體-創(chuàng)新互聯(lián)

1、Java類和Rust結(jié)構(gòu)體

對(duì)象體結(jié)構(gòu),Java的類定義可包括屬性和函數(shù),或常量。而Rust 結(jié)構(gòu)體里只有屬性字段,函數(shù)需要在關(guān)聯(lián)到架構(gòu)體使用impl 結(jié)構(gòu)體名如以下例子。

成都創(chuàng)新互聯(lián)專注于二七企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,成都做商城網(wǎng)站。二七網(wǎng)站建設(shè)公司,為二七等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
JavaRust
public class Rectangle{
   public int width;
? ?public int height,
   public int area(){
     return this.width* this.height;
???}
}
struct?Rectangle?{
? ? width:?u32,
? ? height:?u32,
}
? ?
impl?Rectangle?{?fn?area(&self)?->u32?{
? ? ? ??self.width?*?self.height
? ??}
}

default?(即默認(rèn),什么也不寫): 在同一包內(nèi)可見,不使用任何修飾符。使用對(duì)象:類、接口、變量、方法。

private?: 在同一類內(nèi)可見。使用對(duì)象:變量、方法。?注意:不能修飾類(外部類)

public?: 對(duì)所有類可見。使用對(duì)象:類、接口、變量、方法

protected?: 對(duì)同一包內(nèi)的類和所有子類可見。使用對(duì)象:變量、方法。?注意:不能修飾類(外部類)。

Rust 中有兩種簡單的訪問權(quán):公共(pub)

私有(即默認(rèn),什么也不寫)。

2、對(duì)象內(nèi)的方法和函數(shù)

在Rust的定義綁定的函數(shù)和方法,區(qū)別是帶&self 參數(shù),如下showlog函數(shù)和show的方法的區(qū)別:

pub struct NetUtils{
    uid:u64
}
impl NetUtils{
    pub fn new() ->NetUtils {
        return NetUtils {uid:100};
    }
    pub fn showLog(&self,name:String){
        println!("{} = {}",name,self.uid);
    }

    pub fn show( name:String){
        println!("{} ",name);
    }
}

對(duì)照J(rèn)ava的規(guī)范,Rust 通過&self 可使用對(duì)象字段,類似Java的this.屬性。

3、構(gòu)造函數(shù)
JavaRust

(1)子類只調(diào)用父類的默認(rèn)(缺省)構(gòu)造函數(shù),即無形參構(gòu)造函數(shù)。如果父類沒有默認(rèn)構(gòu)造函數(shù),那子類不能從父類調(diào)用默認(rèn)構(gòu)造函數(shù)。

(2)子類從父類處調(diào)用默認(rèn)構(gòu)造函數(shù),不能成為子類的默認(rèn)構(gòu)造函數(shù)。

(3)在創(chuàng)建對(duì)象時(shí),先調(diào)用父類默認(rèn)構(gòu)造函數(shù)對(duì)對(duì)象進(jìn)行初始化,然后調(diào)用子類自身自己定義的構(gòu)造函數(shù)。

(4)如果子類想調(diào)用父類的非默認(rèn)構(gòu)造函數(shù),則必須使用super來實(shí)現(xiàn)。

(5)子類必須調(diào)用父類的構(gòu)造函數(shù)??梢酝ㄟ^系統(tǒng)自動(dòng)調(diào)用父類的默認(rèn)構(gòu)造函數(shù),如果父類沒有默認(rèn)構(gòu)造函數(shù)時(shí),子類構(gòu)造函數(shù)必須通過super調(diào)用父類的構(gòu)造函數(shù)。

Rust不存在構(gòu)造函數(shù),但可以在結(jié)構(gòu)體新增一個(gè)或多個(gè)方法在該結(jié)構(gòu)體里創(chuàng)建結(jié)構(gòu)體的對(duì)象。如

pub struct NetUtils{

uid:u64

}

impl NetUtils{

pub fn new() ->NetUtils {

return NetUtils {uid:100};

}

pub fn new2(uid_value:u64) ->NetUtils {

? return NetUtils {uid:uid_value};

}

}

4、函數(shù)重載

Java 函數(shù)重載是在同一個(gè)類中,允許存在一個(gè)以上的同名函數(shù),只要他們的參數(shù)個(gè)數(shù)或者參數(shù)類型不同即可。重載的特點(diǎn)是與返回型無關(guān),只看參數(shù)列表。

Rust 不支持重載,但可以通過其他特性實(shí)現(xiàn)類似能力。如:1、泛型函數(shù);2、泛型函數(shù)需要函數(shù)體中用到的泛型類型需要具有共同的方法,因此需要定義必要的 trait。我寫了個(gè)例子,左值自動(dòng)推斷代碼如下:

trait MakeValue{
    fn make_value() ->T;
}

impl MakeValuefor i32 {
    fn make_value() ->i32 {
        123
    }
}

impl MakeValuefor String {
    fn make_value() ->String {
        "123".into()
    }
}

fn foo>() ->T {
    T::make_value()
}

fn main() {
    let x: i32 = foo();
    println!("{:?}", x);
    let x: String = foo();
    println!("{:?}", x);
}
5、繼承

Java 通過externs 關(guān)鍵詞,實(shí)現(xiàn)繼承父類。Rust實(shí)現(xiàn)繼承目前找到兩種方式 ,一種使用AsRef trait,一種使用Deref trait,都能實(shí)現(xiàn)單繼承,而AsRef則能實(shí)現(xiàn)類似多繼承的功能。

6、函數(shù)重寫

Rust不支持對(duì)父結(jié)構(gòu)體的繼承,只能實(shí)現(xiàn)trail的函數(shù)。

7、對(duì)象釋放

Rust 區(qū)別與Java/C++等高級(jí)語言的重要特征,在于其內(nèi)存管理的兩個(gè)特點(diǎn):

(1)變量超出作用域會(huì)自動(dòng)釋放。對(duì)于簡單值類型的棧內(nèi)存(如int,struct)超出作用域后自動(dòng)釋放。而對(duì)于 new 出來的堆內(nèi)存,在c/c++中是要手動(dòng)釋放的,在java要委托垃圾回收釋放。而垃圾回收不是實(shí)時(shí)的,會(huì)影響性能。而 Rust 對(duì)棧內(nèi)存和堆內(nèi)存一視同仁,超出作用域一律自動(dòng)釋放。Rust?的這個(gè)特點(diǎn)在兼顧性能的情況下、有效的減少了代碼量和內(nèi)存泄漏隱患。

(2)?“所有權(quán)” :某段內(nèi)存只能被最后的變量名所有,前面聲明過的變量都作廢,這有效的避免被多個(gè)變量釋放的問題,而且該操作是在編譯期就可以檢查到的,這策略可在編譯期就能有效的避免空指針問題。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

當(dāng)前標(biāo)題:對(duì)照J(rèn)AVA學(xué)習(xí)Rust(07)--類和結(jié)構(gòu)體-創(chuàng)新互聯(lián)
文章轉(zhuǎn)載:http://muchs.cn/article4/dhecie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、小程序開發(fā)網(wǎng)站維護(hù)、動(dòng)態(tài)網(wǎng)站、建站公司、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)