日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

封裝這件小事

 岑經(jīng)滄海難為水 2014-07-22
封裝 (encapsulation) 
隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對(duì)外公開接口,控制在程序中屬性的讀取和修改的訪問級(jí)別
簡(jiǎn)言之,就是把對(duì)象保護(hù)起來不讓對(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è)萬一………是不是。
以上面的例子為例如果上面年齡傳入了-20,那么會(huì)直接輸出年齡-20歲,這顯然是不科學(xué)的,對(duì)數(shù)據(jù)來說是不安全的。所以呢
輸出結(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)容,不多說。下面咱們晚點(diǎn)其他的。
既然成員變量被私有化了,我們想要用到他們是否一定要用到setter和getter方法呢?
答案可定時(shí)否定的,接下來我們就看看其他方法
例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ù)???

好吧,在這里再給大家說說構(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語句,不用寫返回值。
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)了輸出語句呢?
這就是構(gòu)造函數(shù)完成的,它定義了函數(shù)初始化的值
大家明白了這個(gè)原理,上面封裝的例子就不難理解了。
————————————————————————————————————————————————————————————
什么還有toString() ?
toString()方法隸屬于Object類,而所有的類都繼承Object類,也就是說所有的類都具有這個(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ù)。


說道做到,三句就三句,絕不多說。

    本站是提供個(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)論公約

    類似文章 更多