6. Java中的面向?qū)ο笤O(shè)計(jì)(part-one)

補(bǔ)充:JVM虛擬機(jī)為什么不把java字節(jié)碼直接編譯成二進(jìn)制的指令集呢苔悦?如果編譯成二進(jìn)制的指令集轩褐。不需要JVM,那么像垃圾回收機(jī)制等等JVM的高級(jí)特性咋個(gè)辦呢玖详?如果還要在java代碼中手動(dòng)回收等等高級(jí)特性把介,那和C++就沒(méi)有區(qū)別了;同時(shí)也就不跨平臺(tái)了蟋座!


一. 面向?qū)ο蟾攀?/h2>

編程的武林門(mén)派

面向過(guò)程 函數(shù)式編程 面向?qū)ο?/a>
BASIC劳澄、Pascal、C ... OCaml蜈七、LISP... Java、C++莫矗、Python飒硅、Go ....

這里只介紹一些面向過(guò)程與面向?qū)ο笾g的區(qū)別砂缩,有興趣的可以去了解一下非常適合人工智能領(lǐng)域的函數(shù)式編程語(yǔ)言L(fǎng)ISP(當(dāng)然Python也非常適合)

面向過(guò)程: 當(dāng)需要實(shí)現(xiàn)一個(gè)功能的時(shí)候,每一個(gè)具體的步驟都需要親力親為三娩,詳細(xì)處理每一個(gè)細(xì)節(jié)庵芭。
面向?qū)ο螅?/strong> 當(dāng)需要實(shí)現(xiàn)一個(gè)功能,我把我的需求交個(gè)一個(gè)專(zhuān)門(mén)搞這個(gè)的人雀监,他只需要給我結(jié)果就行了双吆,這個(gè)專(zhuān)門(mén)的人咋個(gè)去辦這個(gè)事兒,我不關(guān)心会前!

【這只是我的理解好乐,如果有誤請(qǐng)批評(píng)指出!非常感謝瓦宜!】似乎面向?qū)ο筇貏e牛逼蔚万,那為啥還存在面向過(guò)程呢?面向過(guò)程在某些領(lǐng)域還是非常重要的临庇。比如開(kāi)發(fā)操作系統(tǒng)反璃,不管是windows還是Linux的開(kāi)發(fā),都是使用C語(yǔ)言進(jìn)行面向過(guò)程的開(kāi)發(fā)假夺。因?yàn)椴僮飨到y(tǒng)是非常底層的淮蜈,每一個(gè)操作都是直接操作計(jì)算機(jī)底層的硬件(指令集--->電路邏輯),這些操作只能使用面向過(guò)程的方式編寫(xiě)(具體的原因我還要去探究一下已卷,難道是硬件之間的強(qiáng)耦合性梧田?)。但是悼尾,面向?qū)ο笫腔诿嫦蜻^(guò)程的柿扣,面向過(guò)程把一些繁瑣,小細(xì)節(jié)的事處理好了(比如操作系統(tǒng)操作了硬件)闺魏,面向?qū)ο缶褪菍⑦@些過(guò)程封裝了一下未状。直接調(diào)用就OK了,非常方便析桥!


二司草、類(lèi)與對(duì)象

類(lèi): 一類(lèi)事物抽象出來(lái)的共同屬性以及功能的描述,比如->德瑪西亞陣營(yíng)的英雄類(lèi)
對(duì)象: 某類(lèi)事物的具體的一個(gè)實(shí)例泡仗,是某個(gè)類(lèi)中具體的一個(gè)事物埋虹,比如->德瑪西亞陣營(yíng)的英雄類(lèi) 的 蓋倫

1. 舉一個(gè)栗子:英雄類(lèi)

類(lèi)名:英雄類(lèi)

  • 屬性:
    ????- 生命值;?- 攻擊力;?- 攻擊速度?- 移動(dòng)速度?- 生命回復(fù)?- 護(hù)甲值?- 魔法抗性
    ?- 攻擊范圍
    ...

  • 功能:
    ????- Q技能 ??- W技能 ??- E技能 ??- R技能 ??- Ctrl + E技能
    ...

2. 舉一個(gè)栗子:對(duì)象

對(duì)象名:蓋倫

  • 屬性:
    ????- 生命值 -> 616.28(+84.25)?- 攻擊力 -> 66(+4.5)?- 攻擊速度 -> 0.625(2.9%)?- 移動(dòng)速度 -> 340?- 生命回復(fù) -> 7.84(+0.5)?- 護(hù)甲值 -> 36(+3)?- 魔法抗性 -> 32.1(+1.25)?- 攻擊范圍 -> 175 [1]
    ...

  • 功能:
    ????- Q技能 -> 沉默 ??- W技能 -> 護(hù)盾 ??- E技能 -> 旋轉(zhuǎn) ??- R技能 -> 正義之劍??- Ctrl+E技能 -> 跳舞
    ...


三、對(duì)象與類(lèi)的使用

1. 導(dǎo)包: 指出需要使用的類(lèi)娩怎,在什么位置

import packageName.className;

如果需要使用的類(lèi)在同一個(gè)包下搔课,可以不寫(xiě)導(dǎo)入語(yǔ)句

2. 創(chuàng)建類(lèi)與對(duì)象

  • 類(lèi)的創(chuàng)建就是新建一個(gè)class文件,或者創(chuàng)建一個(gè)內(nèi)部類(lèi)(將這個(gè)內(nèi)部類(lèi)當(dāng)做一個(gè)變量)
  • 類(lèi)用大駝峰式命名截亦,對(duì)象用小駝峰式命名

對(duì)象的創(chuàng)建格式:

類(lèi)名稱(chēng) 對(duì)象名 = new 類(lèi)名稱(chēng)(形參列表);
className instanceName = new className(dataType dada,...);

3. 使用類(lèi)中的屬性方法或者對(duì)象中的屬性爬泥,方法以及 修飾符 的含義

  • a. 調(diào)用屬性或者方法是通過(guò).操作符進(jìn)行訪(fǎng)問(wèn)柬讨。
  • b. static關(guān)鍵字:在類(lèi)中用static關(guān)鍵字定義的屬性或者方法叫做靜態(tài)屬性(是公共的,靜態(tài)屬性保存的值袍啡,所有實(shí)例或者類(lèi)本身都可以訪(fǎng)問(wèn)或者修改)或者靜態(tài)方法踩官,沒(méi)有使用static關(guān)鍵字定義的屬性或者方法叫做實(shí)例屬性或者方法;①對(duì)象可以調(diào)用靜態(tài)和動(dòng)態(tài)的屬性或者方法境输;②類(lèi)只能調(diào)用靜態(tài)的屬性或者靜態(tài)的方法;③靜態(tài)方法中要通過(guò)創(chuàng)建的實(shí)例蔗牡,通過(guò)實(shí)例訪(fǎng)問(wèn)實(shí)例的實(shí)例方法;
---- 屬性 方法
靜態(tài)static 類(lèi)嗅剖,實(shí)例都可以調(diào) 類(lèi)辩越,實(shí)例都可以調(diào)
實(shí)例 只有實(shí)例可以調(diào) 只有實(shí)例可以調(diào)
類(lèi)名稱(chēng).靜態(tài)屬性(參數(shù)列表)
類(lèi)名稱(chēng).靜態(tài)方法(參數(shù)列表)

實(shí)例對(duì)象名稱(chēng).靜態(tài)屬性(參數(shù)列表)
實(shí)例對(duì)象名稱(chēng).靜態(tài)方法(參數(shù)列表)
實(shí)例對(duì)象名稱(chēng).實(shí)例屬性(參數(shù)列表)
實(shí)例對(duì)象名稱(chēng).實(shí)例方法(參數(shù)列表)
  • c. public判导、protected锚扎、defautl(不寫(xiě))、private關(guān)鍵字

這四個(gè)個(gè)修飾符是用在類(lèi)炭分,方法蒋院、變量前面亏钩,表示負(fù)責(zé)權(quán)限,決定了哪里哪里能夠調(diào)用所修飾(類(lèi)欺旧、變量姑丑、方法)

--- public protected default(空的,不寫(xiě)) private
同一類(lèi)中
同一包中(子類(lèi)與無(wú)關(guān)類(lèi))
不同包的子類(lèi)
不同包中的無(wú)關(guān)類(lèi)
  • d. 如果成員變量沒(méi)有進(jìn)行復(fù)制辞友,將會(huì)有一個(gè)默認(rèn)值栅哀,規(guī)則和數(shù)組是一樣的。引用就是null

四称龙、類(lèi)和對(duì)象在JVM中的生命周期

①根據(jù)主函數(shù)main所在的類(lèi)以及包的導(dǎo)入鏈 (import語(yǔ)句留拾,package語(yǔ)句?) 將相互關(guān)聯(lián)所有的.class字節(jié)碼文件加載到方法區(qū)(Method Area);②將主函數(shù)main壓入棧(Stack)中(棧頂元素為main函數(shù)<如果想深入理解棧鲫尊,請(qǐng)參考我的另一片文章 棧的Java實(shí)現(xiàn)>);③再以此執(zhí)行main方法中的語(yǔ)句痴柔,當(dāng)遇到new一個(gè)對(duì)象的時(shí)候,會(huì)根據(jù)對(duì)象對(duì)應(yīng)類(lèi)名找到方法區(qū)對(duì)應(yīng)的類(lèi)的字節(jié)碼疫向,在根據(jù)調(diào)用的對(duì)應(yīng)的構(gòu)造函數(shù) (根據(jù)繼承關(guān)系的構(gòu)造函數(shù)鏈咳蔚、接口這些什么之類(lèi)的從最高層往下一層一層創(chuàng)建) 在堆(Heap)中創(chuàng)建這個(gè)實(shí)例,基本數(shù)據(jù)類(lèi)型的就存放值搔驼,引用數(shù)據(jù)類(lèi)型就存放引用谈火,方法也是存放指向在方法區(qū)內(nèi)對(duì)應(yīng)函數(shù)的引用;④當(dāng)主函數(shù)中剛剛創(chuàng)建的實(shí)例調(diào)用了實(shí)例的一個(gè)方法舌涨,會(huì)找到堆中對(duì)應(yīng)對(duì)象中相應(yīng)的方法名糯耍,找到在方法區(qū)的函數(shù),將這個(gè)函數(shù)的字節(jié)碼轉(zhuǎn)換為指令集進(jìn)行入棧操作,此時(shí)棧頂為實(shí)例方法谍肤,當(dāng)實(shí)例方法執(zhí)行完畢后實(shí)例方法出棧啦租,棧頂元素為main方法,此時(shí)荒揣,接著main方法之前暫停的位置繼續(xù)執(zhí)行。⑤如果給實(shí)例變量賦值一個(gè)null,而且方法棧中沒(méi)有任何變量執(zhí)行堆中這個(gè)創(chuàng)建的實(shí)例焊刹,那么JVM的垃圾回收機(jī)制會(huì)將這個(gè)實(shí)例銷(xiāo)毀系任,回收堆中對(duì)應(yīng)的內(nèi)存空間。


01-只有一個(gè)對(duì)象的內(nèi)存圖.png

02-兩個(gè)對(duì)象使用同一個(gè)方法的內(nèi)存圖.png

03-兩個(gè)引用指向同一個(gè)對(duì)象的內(nèi)存圖.png

五虐块、一個(gè)類(lèi)也可以當(dāng)做一種數(shù)據(jù)類(lèi)型

一個(gè)類(lèi)也可以當(dāng)做一種數(shù)據(jù)類(lèi)型,是一種引用數(shù)據(jù)類(lèi)型俩滥。用法和數(shù)組等等是一樣的。

  • 使用對(duì)象類(lèi)型作為方法的參數(shù)

04-使用對(duì)象類(lèi)型作為方法的參數(shù).png
  • 使用對(duì)象類(lèi)型作為方法的返回值

05-使用對(duì)象類(lèi)型作為方法的返回值.png

六贺奠、成員變量與局部變量

- 定義位置 作用范圍 默認(rèn)值 內(nèi)存位置 生命周期
局部變量 方法內(nèi)部 方法塊或者對(duì)應(yīng)的塊({})中 無(wú)默認(rèn)值霜旧,需手動(dòng)設(shè)置 棧內(nèi)存 隨方法進(jìn)棧出生,出棧消失
成員變量 方法外部儡率,類(lèi)中 整個(gè)類(lèi) 不賦值挂据,有默認(rèn)值,規(guī)則和數(shù)組一樣 堆內(nèi)存 隨對(duì)象出生儿普,隨對(duì)象被垃圾回收機(jī)制回收消失

七崎逃、面向?qū)ο笕筇匦灾庋b

面向?qū)ο笕筇卣?/strong>:封裝、繼承眉孩、多態(tài)
封裝:將一些細(xì)節(jié)隱藏起來(lái)个绍,對(duì)于外加不可見(jiàn);
封裝性在Java中的體現(xiàn):

    1. 方法就是一種封裝浪汪;
    1. 關(guān)鍵字private也是一種封裝巴柿。

private封裝性舉例:定義Person的年齡時(shí),無(wú)法阻止不合理的數(shù)值被設(shè)置進(jìn)來(lái)死遭。
解決方案:用private關(guān)鍵字將需要保護(hù)的成員變量進(jìn)行修飾广恢。


public class Person {

    String name; // 姓名
    private int age; // 年齡

    public void show() {
        System.out.println("我叫:" + name + ",年齡:" + age);
    }

    // 這個(gè)成員方法殃姓,專(zhuān)門(mén)用于向age設(shè)置數(shù)據(jù)
    public void setAge(int num) {
        if (num < 100 && num >= 9) { // 如果是合理情況
            age = num;
        } else {
            System.out.println("數(shù)據(jù)不合理袁波!");
        }
    }

    // 這個(gè)成員方法,專(zhuān)門(mén)私語(yǔ)獲取age的數(shù)據(jù)
    public int getAge() {
        return age;
    }

}

使用Getter蜗侈、Setter方法以及注意事項(xiàng)

    1. Getter篷牌、Setter方法用于專(zhuān)門(mén)訪(fǎng)問(wèn)類(lèi)的私有成員,這樣做的好處是保證數(shù)據(jù)的安全踏幻,比如調(diào)用者不能直接設(shè)置私有屬性枷颊,必須通過(guò)Setter(可在內(nèi)部設(shè)置檢查規(guī)則)才可以;調(diào)用者不能直接訪(fǎng)問(wèn)私有屬性,必須通過(guò)Getter(驗(yàn)證)夭苗。
    1. 對(duì)于Getter來(lái)說(shuō)信卡,不能有參數(shù),返回值類(lèi)型和成員變量對(duì)應(yīng)题造;必須叫g(shù)etXxx命名規(guī)則
    1. 對(duì)于Setter來(lái)說(shuō)傍菇,不能有返回值,參數(shù)類(lèi)型和成員變量對(duì)應(yīng)界赔。必須叫SetXxx命名規(guī)則
    1. 對(duì)于基本類(lèi)型當(dāng)中的boolean值丢习,Getter方法一定要寫(xiě)成isXxx的形式,而setXxx規(guī)則不變淮悼。

八咐低、this關(guān)鍵字

JVM根據(jù)規(guī)則將變量?jī)?chǔ)存在特殊的一種數(shù)據(jù)結(jié)構(gòu)中,到需要這種變量時(shí)會(huì)根據(jù)作用域規(guī)則逐級(jí)查找袜腥,直到找到變量值(或者引用);所以成員變量和局部變量同名不會(huì)報(bào)錯(cuò)见擦!離變量最近的塊優(yōu)先級(jí)越高。

假如當(dāng)前函數(shù)作用域與類(lèi)成員變量名相同羹令,但是我想使用類(lèi)成員變量鲤屡,怎么辦呢?使用this關(guān)鍵字特恬!當(dāng)方法的局部變量和類(lèi)的成員變量重名的時(shí)候执俩,根據(jù)“就近原則”,優(yōu)先使用局部變量癌刽。如果需要訪(fǎng)問(wèn)本類(lèi)當(dāng)中的成員變量役首。

需要使用格式this.成員變量名“通過(guò)誰(shuí)調(diào)用的方法,誰(shuí)就是this显拜『獍拢”

public class Person {

    String name; // 我自己的名字

    // 參數(shù)name是對(duì)方的名字
    // 成員變量name是自己的名字
    public void sayHello(String name) {
        System.out.println(name + ",你好远荠。我是" + this.name);
        System.out.println(this);
    }

}

九矮固、構(gòu)造方法

構(gòu)造方法是專(zhuān)門(mén)用來(lái)創(chuàng)建對(duì)象的方法,當(dāng)我們通過(guò)關(guān)鍵字new來(lái)創(chuàng)建對(duì)象時(shí)譬淳,其實(shí)就是在調(diào)用構(gòu)造方法档址。

格式:

public 類(lèi)名稱(chēng)(參數(shù)類(lèi)型 參數(shù)名稱(chēng)) {
    方法體
}

注意事項(xiàng)

  1. 構(gòu)造方法的名稱(chēng)必須和所在的類(lèi)名稱(chēng)完全一樣,就連大小寫(xiě)也要一樣
  2. 構(gòu)造方法不要寫(xiě)返回值類(lèi)型邻梆,連void都不寫(xiě)
  3. 構(gòu)造方法不能return一個(gè)具體的返回值
  4. 如果沒(méi)有編寫(xiě)任何構(gòu)造方法守伸,那么編譯器將會(huì)默認(rèn)贈(zèng)送一個(gè)構(gòu)造方法,沒(méi)有參數(shù)浦妄、方法體什么事情都不做尼摹。public Student() {}
  5. 一旦編寫(xiě)了至少一個(gè)構(gòu)造方法见芹,那么編譯器將不再贈(zèng)送。
  6. 構(gòu)造方法也是可以進(jìn)行重載的蠢涝。重載:方法名稱(chēng)相同玄呛,參數(shù)列表不同。
public class Student {

    // 成員變量
    private String name;
    private int age;

    // 無(wú)參數(shù)的構(gòu)造方法
    public Student() {
        System.out.println("無(wú)參構(gòu)造方法執(zhí)行啦和二!");
    }

    // 全參數(shù)的構(gòu)造方法
    public Student(String name, int age) {
        System.out.println("全參構(gòu)造方法執(zhí)行啦徘铝!");
        this.name = name;
        this.age = age;
    }

    // Getter Setter
    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }

}

十、Java Bean Java類(lèi)中標(biāo)準(zhǔn)的類(lèi)

一個(gè)標(biāo)準(zhǔn)的類(lèi)通常要擁有下面四個(gè)組成部分:

Alt + Ins 快捷創(chuàng)建Getter儿咱、Setter方法

  1. 所有的成員變量都要使用private關(guān)鍵字修飾
  2. 為每一個(gè)成員變量編寫(xiě)一對(duì)兒Getter/Setter方法
  3. 編寫(xiě)一個(gè)無(wú)參數(shù)的構(gòu)造方法
  4. 編寫(xiě)一個(gè)全參數(shù)的構(gòu)造方法
public class Student {

    private String name; // 姓名
    private int age; // 年齡

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末庭砍,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子混埠,更是在濱河造成了極大的恐慌,老刑警劉巖诗轻,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钳宪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡扳炬,警方通過(guò)查閱死者的電腦和手機(jī)吏颖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)恨樟,“玉大人半醉,你說(shuō)我怎么就攤上這事∪笆酰” “怎么了缩多?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)养晋。 經(jīng)常有香客問(wèn)我衬吆,道長(zhǎng),這世上最難降的妖魔是什么绳泉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任逊抡,我火速辦了婚禮,結(jié)果婚禮上零酪,老公的妹妹穿的比我還像新娘冒嫡。我一直安慰自己,他們只是感情好四苇,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布孝凌。 她就那樣靜靜地躺著,像睡著了一般蛔琅。 火紅的嫁衣襯著肌膚如雪胎许。 梳的紋絲不亂的頭發(fā)上峻呛,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音辜窑,去河邊找鬼钩述。 笑死,一個(gè)胖子當(dāng)著我的面吹牛穆碎,可吹牛的內(nèi)容都是我干的牙勘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼所禀,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼方面!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起色徘,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤恭金,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后褂策,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體横腿,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年斤寂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了耿焊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡遍搞,死狀恐怖罗侯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情溪猿,我是刑警寧澤钩杰,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站再愈,受9級(jí)特大地震影響榜苫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜翎冲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一垂睬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧抗悍,春花似錦驹饺、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至衔沼,卻和暖如春蝌借,著一層夾襖步出監(jiān)牢的瞬間昔瞧,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工菩佑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留自晰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓稍坯,卻偏偏與公主長(zhǎng)得像酬荞,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子瞧哟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容