第五章:面向?qū)ο蠡A(chǔ)——String類的常用方法雅任。

本章目標

  • 掌握三種引用傳遞的操作范例
  • 掌握引用傳遞的作用

1风范、具體內(nèi)容

1.1、三道引用傳遞范例

范例一:

class Demo{
    int temp = 30 ;     // 此處為了方便沪么,屬性暫時不封裝
};
public class RefDemo01{
    public static void main(String args[]){
        Demo d1 = new Demo() ;  // 實例化Demo對象硼婿,實例化之后里面的temp=30 
        d1.temp = 50 ;      // 修改temp屬性的內(nèi)容
        System.out.println("fun()方法調(diào)用之前:" + d1.temp) ;
        fun(d1) ;
        System.out.println("fun()方法調(diào)用之后:" + d1.temp) ;
    }
    public static void fun(Demo d2){        // 此處的方法由主方法直接調(diào)用
        d2.temp = 1000;                     // 修改temp值
    }
};
輸出結(jié)果:
fun()方法調(diào)用之前:50
fun()方法調(diào)用之后:1000

范例二:

public class RefDemo02{
    public static void main(String args[]){
        String str1 = "hello" ;         // 實例化字符串對象
        System.out.println("fun()方法調(diào)用之前:" + str1) ;
        fun(str1) ;                     // 調(diào)用fun()方法
        System.out.println("fun()方法調(diào)用之后:" + str1) ;
    }
    public static void fun(String str2){        // 此處的方法由主方法直接調(diào)用
        str2 = "MLDN" ;                 // 修改字符串內(nèi)容
    }
};
輸出結(jié)果:
fun()方法調(diào)用之前:hello
fun()方法調(diào)用之后:hello

范例三:

class Demo{
    String temp = "hello" ;     // 此處為了方便,屬性暫時不封裝
};
public class RefDemo03{
    public static void main(String args[]){
        Demo d1 = new Demo() ;  // 實例化Demo對象禽车,實例化之后里面的temp=30 
        d1.temp = "world" ;     // 修改temp屬性的內(nèi)容
        System.out.println("fun()方法調(diào)用之前:" + d1.temp) ;
        fun(d1) ;
        System.out.println("fun()方法調(diào)用之后:" + d1.temp) ;
    }
    public static void fun(Demo d2){        // 此處的方法由主方法直接調(diào)用
        d2.temp = "MLDN";                       // 修改temp值
    }
};
輸出結(jié)果:
fun()方法調(diào)用之前:world
fun()方法調(diào)用之后:MLDN

1.2寇漫、接收本類引用

例如,現(xiàn)在有以下一道程序:

class Demo{                     // 定義Demo類
    private int temp  = 30 ;    // 聲明temp屬性并封裝
    public void fun(Demo d2){   // 接收本類的引用
        d2.temp = 50 ;          // 直接通過對象調(diào)用本類的私有屬性
    }
    public int getTemp(){       // getter
        return temp ;
    }
    public void setTemp(int t){ // setter
        temp = t ;
    }
};
public class RefDemo04{
    public static void main(String args[]){
        Demo d1 = new Demo() ;  // 實例化Demo對象
        d1.setTemp(50) ;        // 只能通過setter方法修改內(nèi)容
        d1.fun(d1) ;            // 此處把Demo的對象傳回到自己的類中
        System.out.println("temp = " + d1.getTemp()) ;
    }
};

現(xiàn)在按照引用傳遞的方式將其傳入到其內(nèi)部殉摔,就相當(dāng)于自己接受自己本類的引用對象州胳。

輸出結(jié)果:
temp =50

只要是符合了引用傳遞的語法,則可以向任意的地方傳遞逸月。

1.3栓撞、范例講解:一對一關(guān)系

實際上使用引用傳遞,可以表述出生活中以下一種場景彻采。例如:一個人有一本書腐缤,一本書屬于一個人。從這樣一句話中可以得出這樣的結(jié)論:人應(yīng)該是一個具體的類肛响、書也應(yīng)該是一個具體的類岭粤,在人的類中應(yīng)該存在一個屬性表示書的,在書的類中也應(yīng)該存在一個屬性表示人特笋。

class Person{           // 定義Person類
    private String name ;   // 姓名
    private int age ;       // 年齡
    private Book book ;     // 一個人有一本書
    public Person(String name,int age){
        this.setName(name) ;
        this.setAge(age) ;
    }
    public void setName(String n){
        name = n ;
    }
    public void setAge(int a){
        age = a ;
    }
    public String getName(){
        return name ;
    }
    public int getAge(){
        return age ;
    }
    public void setBook(Book b){
        book = b ;
    }
    public Book getBook(){
        return book ;
    }
};
class Book{             // 定義Book類
    private String title ;  // 標題
    private float price ;   // 價格
    private Person person ; // 一本書屬于一個人
    public Book(String title,float price){
        this.setTitle(title) ;
        this.setPrice(price) ;
    }
    public void setTitle(String t){
        title = t ;
    }
    public void setPrice(float p){
        price = p ;
    }
    public String getTitle(){
        return title ;
    }
    public float getPrice(){
        return price ;
    }
    public void setPerson(Person p){
        person = p ;
    }
    public Person getPerson(){
        return person ;
    }
};
public class RefDemo05{
    public static void main(String arg[]){
        Person per = new Person("張三",30) ;
        Book bk = new Book("JAVA SE核心開發(fā)",90.0f) ;
        per.setBook(bk) ;       // 設(shè)置兩個對象間的關(guān)系剃浇,一個人有一本書
        bk.setPerson(per) ;     // 設(shè)置兩個對象間的關(guān)系,一本書屬于一個人
        System.out.println("從人找到書 --> 姓名:" + per.getName()+"猎物;年齡:" 
            + per.getAge() +"虎囚;書名:" + per.getBook().getTitle() + ";價格:" 
            + per.getBook().getPrice()) ;   // 可以通過人找到書
        System.out.println("從書找到人 --> 書名:" + bk.getTitle() + "蔫磨;價格:"
            + bk.getPrice() + "淘讥;姓名:" + bk.getPerson().getName() + ";年齡:"
            + bk.getPerson().getAge()) ;    // 也可以通過書找到其所有人
    }
};
輸出結(jié)果:
從人找到書 --> 姓名:張三堤如;年齡:30蒲列;書名:JAVA SE核心開發(fā)窒朋;價格:90.0
從書找到人 --> 書名:JAVA SE核心開發(fā);價格:90.0蝗岖;姓名:張三侥猩;年齡:30

1.3、范例講解:進一步深入一對一關(guān)系

以上已經(jīng)玩曾了一個基本的關(guān)系抵赢,但是現(xiàn)在有了一個新的要求:一個人有一個孩子欺劳,每個孩子還會有一本書,那么該如何分析呢铅鲤?難道再單獨建立一個孩子類嗎划提?很明顯這樣做是很不可取的,因為一個孩子也是一個人邢享,所以此時腔剂,只需要簡單的修改Person類即可,在類中增加一個自己的引用驼仪。

class Person{           // 定義Person類
    private String name ;   // 姓名
    private int age ;       // 年齡
    private Book book ;     // 一個人有一本書
    private Person child ;  // 一個人有一個孩子
    public Person(String name,int age){
        this.setName(name) ;
        this.setAge(age) ;
    }
    public void setName(String n){
        name = n ;
    }
    public void setAge(int a){
        age = a ;
    }
    public String getName(){
        return name ;
    }
    public int getAge(){
        return age ;
    }
    public void setBook(Book b){
        book = b ;
    }
    public Book getBook(){
        return book ;
    }
    public void setChild(Person c){
        child = c ;
    }
    public Person getChild(){
        return child ;
    }
};
class Book{             // 定義Book類
    private String title ;  // 標題
    private float price ;   // 價格
    private Person person ; // 一本書屬于一個人
    public Book(String title,float price){
        this.setTitle(title) ;
        this.setPrice(price) ;
    }
    public void setTitle(String t){
        title = t ;
    }
    public void setPrice(float p){
        price = p ;
    }
    public String getTitle(){
        return title ;
    }
    public float getPrice(){
        return price ;
    }
    public void setPerson(Person p){
        person = p ;
    }
    public Person getPerson(){
        return person ;
    }
};
public class RefDemo06{
    public static void main(String arg[]){
        Person per = new Person("張三",30) ;
        Person cld = new Person("張四",10) ;  // 定義一個孩子
        Book bk = new Book("JAVA SE核心開發(fā)",90.0f) ;
        Book b = new Book("一千零一夜",30.3f) ;
        per.setBook(bk) ;       // 設(shè)置兩個對象間的關(guān)系掸犬,一個人有一本書
        bk.setPerson(per) ;     // 設(shè)置兩個對象間的關(guān)系,一本書屬于一個人
        cld.setBook(b) ;        // 設(shè)置對象間的關(guān)系绪爸,一個孩子有一本書
        b.setPerson(cld) ;      // 設(shè)置對象間的關(guān)系湾碎,一本書屬于一個孩子
        per.setChild(cld) ;     // 設(shè)置對象間的關(guān)系,一個人有一個孩子
        System.out.println("從人找到書 --> 姓名:" + per.getName()+"奠货;年齡:" 
            + per.getAge() +"介褥;書名:" + per.getBook().getTitle() + ";價格:" 
            + per.getBook().getPrice()) ;   // 可以通過人找到書
        System.out.printl("從書找到人 --> 書名:" + bk.getTitle() + "递惋;價格:"
            + bk.getPrice() + "柔滔;姓名:" + bk.getPerson().getName() + ";年齡:"
            + bk.getPerson().getAge()) ;    // 也可以通過書找到其所有人
        // 通過人找到孩子萍虽,并找到孩子所擁有的書
        System.out.println(per.getName() + "的孩子 --> 姓名:"
            + per.getChild().getName() + "睛廊;年齡:" + per.getChild().getAge()
            + ";書名:" + per.getChild().getBook().getTitle() + "杉编;價格:"
            + per.getChild().getBook().getPrice()) ;
    }
};
輸出結(jié)果:
從人找到書 -->姓名:張三超全;年齡:30;書名:JAVA SE核心開發(fā)邓馒;價格:90.0
從書找到人 -->書名:JAVA SE核心開發(fā)嘶朱;價格:90.0;姓名:張三光酣;年齡:30
張三的孩子 -->姓名:張四疏遏;年齡:10;書名:一千零一夜;價格:30.3

2财异、總結(jié)

以上所用應(yīng)用范例下翎,到現(xiàn)在為止,只是在完成一些細小的模型宝当,但是這些模型都將成為日后Java EE開發(fā)中最重要的部分。希望可以反復(fù)理解引用傳遞的關(guān)系胆萧,并可以利用引用傳遞完成一些小的關(guān)系模型庆揩。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市跌穗,隨后出現(xiàn)的幾起案子订晌,更是在濱河造成了極大的恐慌,老刑警劉巖蚌吸,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锈拨,死亡現(xiàn)場離奇詭異,居然都是意外死亡羹唠,警方通過查閱死者的電腦和手機奕枢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來佩微,“玉大人缝彬,你說我怎么就攤上這事〔该校” “怎么了谷浅?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長奶卓。 經(jīng)常有香客問我一疯,道長,這世上最難降的妖魔是什么夺姑? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任墩邀,我火速辦了婚禮,結(jié)果婚禮上盏浙,老公的妹妹穿的比我還像新娘磕蒲。我一直安慰自己,他們只是感情好只盹,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布辣往。 她就那樣靜靜地躺著,像睡著了一般殖卑。 火紅的嫁衣襯著肌膚如雪站削。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天孵稽,我揣著相機與錄音许起,去河邊找鬼十偶。 笑死,一個胖子當(dāng)著我的面吹牛园细,可吹牛的內(nèi)容都是我干的惦积。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼猛频,長吁一口氣:“原來是場噩夢啊……” “哼狮崩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鹿寻,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤睦柴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后毡熏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坦敌,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年痢法,在試婚紗的時候發(fā)現(xiàn)自己被綠了狱窘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡财搁,死狀恐怖训柴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情妇拯,我是刑警寧澤幻馁,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站越锈,受9級特大地震影響仗嗦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜甘凭,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一稀拐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧丹弱,春花似錦德撬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至坯苹,卻和暖如春隆檀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工恐仑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留泉坐,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親挪拟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

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