久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    封裝這件小事

     岑經(jīng)滄海難為水 2014-07-22
    封裝 (encapsulation) 
    隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對(duì)外公開接口,控制在程序中屬性的讀取和修改的訪問級(jí)別
    簡(jiǎn)言之,就是把對(duì)象保護(hù)起來(lái)不讓對(duì)象(你)之間訪問到,然后呢?當(dāng)然為了你的訪問會(huì)給你提供接口供你訪問比如setter和getter方法
    封裝方法 在需要封裝的變量前加修飾詞 private
    下面就舉一個(gè)簡(jiǎn)單的例子
    ——————————————————————————————————————————————————————————------
    例1
    class Person
    {
    private String name;
    private int age;
    public void setName(String name)
    {
    this.name=name;
    }
    public void setAge(int age)
    {
    this.age=age;
    }
    public String getName()
    {
    return name;
    }
    public int getAge()
    {
    return age;
    }
    }
    class Demo
    {
    public static void main(String args[])
    {
    Person p=new Person();
    p.setName("雪飛揚(yáng)");
    p.setAge(20);
    System.out.println(p.getName()+","+p.getAge());
    }
    }
    輸出結(jié)果:雪飛揚(yáng),20
    _________________________________________________________________________________________________________
    為什么要封裝?
    那必須是為了安全啊,你想啊你買了一臺(tái)電腦,沒有主機(jī)箱直接放在那里你敢用嗎?電腦容易進(jìn)水壞了是小事,你要是那個(gè)啥有個(gè)萬(wàn)一………是不是。
    以上面的例子為例如果上面年齡傳入了-20,那么會(huì)直接輸出年齡-20歲,這顯然是不科學(xué)的,對(duì)數(shù)據(jù)來(lái)說(shuō)是不安全的。所以呢
    輸出結(jié)果:雪飛揚(yáng),-20
    這顯然不是我們想要的結(jié)果,如果沒有進(jìn)行數(shù)據(jù)的封裝,我們沒有辦法解決這個(gè)問題,但是我們現(xiàn)在進(jìn)行了封裝,我們可以很簡(jiǎn)單的解決這個(gè)問題
    例2
    class Person
    {
    private String name;
    private int age;
    public void setName(String name)
    {
    this.name=name;
    }
    public void setAge(int age)
    {
    this.age=age;
    }
    public String getName()
    {
    return name;
    }
    public int getAge()
    {if (age>0&&age<130)
    return age;   
    else
        {System.out.println("您輸入的年齡信息有誤,請(qǐng)重新輸入后操作");
    System.exit(1);
        return 0;}
    }
    }
    class Demo
    {
    public static void main(String args[])
    {
    Person p=new Person();
    p.setName("雪飛揚(yáng)");
    p.setAge(-20);
    System.out.println(p.getName()+","+p.getAge());
    }
    }
    輸出結(jié)果:您輸入的年齡信息有誤,請(qǐng)重新輸入后操作
    這樣就提高了數(shù)據(jù)的安全性,提高了代碼的健壯性
    ————————————————————————————————————————————————————————————
    當(dāng)然,以上是大多數(shù)書本上都會(huì)提到的內(nèi)容,不多說(shuō)。下面咱們晚點(diǎn)其他的。
    既然成員變量被私有化了,我們想要用到他們是否一定要用到setter和getter方法呢?
    答案可定時(shí)否定的,接下來(lái)我們就看看其他方法
    例3
    class Demo
    {
        public static void main(String[] args)
        {
        Person p=new Person("哈哈",20);
        System.out.println(p);
    }
    }
    class Person {
    private String name;
    private int age;
    Person(String name,int age){//構(gòu)造函數(shù)初始化,相當(dāng)于setName和setAge方法
    this.name=name;
    this.age=age;
    }
    public String toString()//復(fù)寫toString方法,返回年齡和姓名信息,相當(dāng)于getAame和getAge方法
    {
    return this.name+","+this.age();
    }
    }
    輸出結(jié)果:雪飛揚(yáng),20
     大家第一眼看到這個(gè)代碼是不是覺得,哇塞這個(gè)代碼好  啊 ……好啊  ,好短啊……
    ————————————————————————————————————————————————————————————
    構(gòu)造函數(shù)???

    好吧,在這里再給大家說(shuō)說(shuō)構(gòu)造函數(shù)
    什么事構(gòu)造函數(shù)?
    所謂構(gòu)造函數(shù),就是構(gòu)造對(duì)象的函數(shù),就是創(chuàng)建對(duì)象的函數(shù)
    構(gòu)造函數(shù)有什么特點(diǎn)?
    1.隨著類的建立而出現(xiàn),默認(rèn)為空,用戶可以自己定義構(gòu)造函數(shù)
    2.構(gòu)造函數(shù)不能有return語(yǔ)句,不用寫返回值。
    3.構(gòu)造函數(shù)在對(duì)象建立時(shí)調(diào)用有且僅有的一次。
    4.構(gòu)造函數(shù)用于對(duì)象的初始化。
    舉個(gè)例子:
    例4
    class Person{
    public Person()
    {
    System.out.println("我出生了****");
    }
    }
    class Demo
    {
    public static void main(String args[])
    {
    Person p=new Person();
    }
    }
    輸出結(jié)果:我出生了****
    大家是不是有點(diǎn)覺得這段代碼不可思議,就創(chuàng)建了一個(gè)對(duì)象,怎么就出現(xiàn)了輸出語(yǔ)句呢?
    這就是構(gòu)造函數(shù)完成的,它定義了函數(shù)初始化的值
    大家明白了這個(gè)原理,上面封裝的例子就不難理解了。
    ————————————————————————————————————————————————————————————
    什么還有toString() ?
    toString()方法隸屬于Object類,而所有的類都繼承Object類,也就是說(shuō)所有的類都具有這個(gè)方法 所有的對(duì)象都可以調(diào)用這個(gè)方法。
    例5
    public class A{
    public String toString(){return "this is A";}
    }
    如果某個(gè)方法里面有如下句子:
    A obj=new A();
    System.out.println(obj);
    輸出結(jié)果:this is A 
    它通常只是為了方便輸出,比如System.out.println(xx),括號(hào)里面的“xx”如果不是String類型的話,就自動(dòng)調(diào)用xx的toString()方法

    它只是sun公司開發(fā)java的時(shí)候?yàn)榱朔奖闼蓄惖淖址僮鞫匾饧尤氲囊粋€(gè)方法。
    依然以上面的例子為例
    例6
    class Demo
    {
        public static void main(String[] args)
        {
        Person p=new Person("哈哈",20);
        System.out.println(p);
    }
    }
    class Person {
    private String name;
    private int age;
    Person(String name,int age){//構(gòu)造函數(shù)初始化,相當(dāng)于setName和setAge方法
    this.name=name;
    this.age=age;
    }
    }

    輸出結(jié)果:Person@5ac2480b
    沒錯(cuò)大家看到的是一個(gè)Person對(duì)象的地址

    那么當(dāng)我們復(fù)寫了ToString類之后呢?代碼同例3
    輸出結(jié)果:輸出結(jié)果:雪飛揚(yáng),20
     另外需要提示的一點(diǎn)toString方法是System.out.println()當(dāng)中唯一一個(gè)java提前幫你定義的地方。

    好了總結(jié)句話
    私有是封裝實(shí)現(xiàn)方式的一種,實(shí)現(xiàn)封裝有多種方式。
    封裝可以提高代碼的安全性和健壯性。
    封裝可以用setter和getter方法進(jìn)行訪問。
    封裝中的setter和setter方法可以用構(gòu)造函數(shù)和復(fù)寫toString方法代替。
    封裝只能修飾成員變量和成員函數(shù)。


    說(shuō)道做到,三句就三句,絕不多說(shuō)。

      本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
      轉(zhuǎn)藏 分享 獻(xiàn)花(0

      0條評(píng)論

      發(fā)表

      請(qǐng)遵守用戶 評(píng)論公約

      類似文章 更多

      主站蜘蛛池模板: 无码8090精品久久一区| 久久久无码精品亚洲日韩按摩| 午夜无码片在线观看影院A| 国产在线精品中文字幕| 秋霞鲁丝片成人无码| 色窝窝无码一区二区三区成人网站| 日本午夜精品一区二区三区电影| 正在播放酒店约少妇高潮| 波多野结衣一区二区三区AV高清| 色欲国产精品一区成人精品| 无码人妻一区二区三区四区AV| 日韩精品区一区二区三vr| 日韩女同在线二区三区| 特级毛片A级毛片免费观看网站 | 2021国产成人精品久久| 免费VA国产高清大片在线| 免费看国产美女裸体视频| 任我爽精品视频在线播放| 久久精品人妻中文系列葵司| 亚洲AV无码午夜嘿嘿嘿| 国产免费看插插插视频| 三级三级三级A级全黄| 鲁丝片一区二区三区免费| 久久不见久久见免费视频观看| 午夜国产精品福利一二| 内射口爆少妇麻豆| 国产AV老师黑色丝袜美腿| 久久人人爽人人爽人人av| 伊人热热久久原色播放WWW| 国厂精品114福利电影免费| 日韩欧美一卡2卡3卡4卡无卡免费2020| 日本高清在线天码一区播放| 26uuu另类亚洲欧美日本| 午夜精品一区二区三区免费视频| 成人网站网址导航| 国产成人午夜福利在线播放| 欧美性XXXX极品HD欧美风情| 国产成人午夜福利院| 欧美国产日产一区二区| 波多野结AV衣东京热无码专区| 国产偷国产偷亚洲清高APP|