Java筆記之面向?qū)ο蠡A(chǔ)(5)_第1頁(yè)
Java筆記之面向?qū)ο蠡A(chǔ)(5)_第2頁(yè)
Java筆記之面向?qū)ο蠡A(chǔ)(5)_第3頁(yè)
Java筆記之面向?qū)ο蠡A(chǔ)(5)_第4頁(yè)
Java筆記之面向?qū)ο蠡A(chǔ)(5)_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、java中static的使用與包裝類(lèi)-static變量和方法的聲明及使用首先回顧一下前面的一個(gè)知識(shí)點(diǎn):對(duì)于java z內(nèi)存分為棧內(nèi)存(存儲(chǔ)對(duì)象的名字堆內(nèi)存(存儲(chǔ)對(duì)象的具體內(nèi)容,如屬性1全局代碼 區(qū)(保存所有方法1現(xiàn)在提出新的要求,要表示一個(gè)屬性,這個(gè)屬 性是所有對(duì)象都具有的,這就要用到static屬性。在類(lèi)中寫(xiě)的一個(gè)屬性,如果使用static聲明,則表示此屬性為公有屬 性,即所有對(duì)象都可以訪(fǎng)問(wèn)此屬性。下面用一段代碼來(lái)說(shuō)明。為了說(shuō)明方便,屬性暫不封裝,但是要注意,在實(shí)際開(kāi)發(fā)中,所有的屬性都是要封裝的。class personstatic string code;string name;strin

2、g shout()return"編碼:"+code+",姓名:h + name;public class odemo05public static void main(string args)pers on pl=new person();pers on p2=new pers on();pl.code=n110n;=m 小明:p2.code=h120h;p2.n ame 二”小麗:system.out.println(pl.shouto);system.out.println(p2.shout(); 這段代碼似乎與我們前面寫(xiě)過(guò)的許多代碼沒(méi)什么區(qū)別,

3、只是在聲明code變量時(shí)前面多了一個(gè)statico這就是static聲明變量的方式。卜面我們來(lái)看一下執(zhí)行結(jié)果:c: jauatestjauaobject>jauac odeno05 jauac:jauatestjauaobject>jaua odeno05編碼:120,姓名:/卜明編碼:120;姓名:/卜麗c: jauatestjauasobject>可以發(fā)現(xiàn)對(duì)象pl和p2的code屬性居然相同,可是我們?cè)谠O(shè)置時(shí)兩者是不同的。這就是靜態(tài)變量屬性的特點(diǎn)。在內(nèi)存中除了堆棧和全 局代碼區(qū)外,還有一塊區(qū)域叫做全局?jǐn)?shù)據(jù)區(qū),專(zhuān)門(mén)用于存放static類(lèi)型的屬性。聲明static屬性后,此屬

4、性對(duì)所有對(duì)象共享。對(duì)于static類(lèi)型的屬性,如果需要修改,最好是通過(guò)類(lèi)名稱(chēng)修改。這里我們對(duì)上面的代碼做一些修改來(lái)說(shuō)明這一問(wèn)題:class personprivate static string code;string name;string shout()return*1 編碼:,+code+,1 ,姓名:h + name;static void setcode(string c)code=c;public class odemo05public static void main (string args)person.setcode("110h);pers on pl=new p

5、erson();person p2=new person();="小明:p2.n ame 二”小麗";system.out.pri ntln(pl.shout();system.out.pri ntln (p2.shout();從紅字部分可以看出,我把code屬性定義成了私有屬性,然后用person類(lèi)的setcode方法去為這個(gè)靜態(tài)屬性賦值,賦值過(guò)程沒(méi)有涉及到任何對(duì)象,賦值后所有對(duì)象的code屬性將都是同樣的值。運(yùn)行結(jié)果如下:c: jauatestc: jauatest編碼110,姓名:丿 編確:110,妊玄:/c: jauatest jauaobject&g

6、t;jauac odemo05.jauabject>jaua odemo05、明'麗bject>.這里需要注意的一點(diǎn)是在setcode方法中,不能使用"this.code二code"作為賦值語(yǔ)句。因?yàn)閟tatic屬于所有對(duì)象共享的屬性,而this只能表示當(dāng)前對(duì)象,這樣作用范圍不匹配,程序 會(huì)報(bào)錯(cuò)。所以在"static"方法中不要出現(xiàn)this。對(duì)上面說(shuō)明的擴(kuò)展:靜態(tài)方法不能調(diào)用非靜態(tài)變量,即非靜態(tài)變量不 能夠出現(xiàn)在靜態(tài)方法中。不過(guò)反之是可以的。static代碼塊的使用代碼塊是java中的一個(gè)概念。在java中有四種代碼塊,分別是: 普通

7、代碼塊(寫(xiě)在一個(gè)方法之中的語(yǔ)句塊) 構(gòu)造塊(直接寫(xiě)在類(lèi)中的語(yǔ)句塊)靜態(tài)塊(直接寫(xiě)在類(lèi)中,通過(guò)static聲明的語(yǔ)句塊) 同步代碼塊(在學(xué)習(xí)多線(xiàn)程的時(shí)候會(huì)見(jiàn)到)#1.普通代碼塊首先用一個(gè)例子來(lái)介紹普通代碼塊,看下面代碼:public class odemo05public static void main(string args)int i=0;int i = 10;system.out.println(i);很顯然在這段代碼中變量i被重復(fù)定義了 ,如果不在第一次定義i時(shí) 加上括號(hào),那么程序肯定會(huì)報(bào)錯(cuò)。加上括號(hào),括號(hào)里面的內(nèi)容就形成 了一個(gè)普通代碼塊,它里面的變量定義只在代碼塊內(nèi)部有效。可想而

8、知,最后程序輸出的結(jié)果是10而不是0.#2.構(gòu)造塊疋兀伺例子:class pers onsystem.outprintlnchello world!");pers on()system.out.println("person 構(gòu)造方法?!?;public class odemo05public static void main (string args)new person();代碼中的紅色部分就是一個(gè)構(gòu)造塊。它不在構(gòu)造方法內(nèi)部,而且從下面的運(yùn)行結(jié)果可以看岀,構(gòu)造塊優(yōu)先于構(gòu)造方法執(zhí)行。:jauatestjauaxobject>jauac odeno05.jaua:ja

9、uatestjauaxobject>jaua odeno05ello world?euson構(gòu)造方法。:jauatestjauaxobject>.#3.靜態(tài)塊首先我們把上面的代碼做一些修改:class personstaticsystem.out.println("靜態(tài)塊 j;system.outprintlnchello world!*1);person()system.out.pnntln(nperson 構(gòu)造方法。n);public class odemo05public static void main (string args)new person();可以看到

10、我在person類(lèi)中又加入了一個(gè)靜態(tài)塊(注意靜態(tài)塊的書(shū)寫(xiě)格式),下面是執(zhí)行結(jié)果:c: jauatestjavaxobject >jauac odeno05.jauac: javatestjavaobject>jaua odeno05 靜態(tài)塊hello world?person構(gòu)造方法。c: jauatestjauaobject>從結(jié)果中我們得到結(jié)論:靜態(tài)塊是優(yōu)先于構(gòu)造塊與構(gòu)造方法執(zhí)行的。 靜態(tài)塊的作用是為靜態(tài)屬性初始化。下面我們還要進(jìn)一步硏究這個(gè)問(wèn)題,把上面的代碼在進(jìn)行一些修改: class pers onstaticsystem, out. printing'靜態(tài)塊

11、”);system.out.println(hhello world!11);pers on()system.out.printlnc'person 構(gòu)造方法。n);public class odemo05public static void main(string args)new person();new person(); 從紅字部分可以看出,我把調(diào)用person類(lèi)的語(yǔ)句復(fù)制了一次,現(xiàn)在 我們看一下運(yùn)行結(jié)果c: javatestjauaobject>javac odemo05.jauac: jauatestjauaobject>java odemo05 錚態(tài)塊lell

12、o world?person構(gòu)造方法。lello world?person構(gòu)造方法。我們發(fā)現(xiàn),在多次執(zhí)行person語(yǔ)句時(shí),靜態(tài)塊只執(zhí)行了一次,而構(gòu) 造塊和構(gòu)造方法執(zhí)行多次。這也是靜態(tài)塊的一大特點(diǎn)。三理解main方法有了這些準(zhǔn)備知識(shí),我們就來(lái)解決一個(gè)前面遺留的問(wèn)題。我們前面每 段代碼都有 main 方法。格式為"public static void main(string arg)”可是我們從沒(méi)有對(duì)這一格式作出任何解釋。這里就來(lái)處理一 下:l.public :表示此方法是公共的可被外部所訪(fǎng)問(wèn)。(main方法必須被外部所看見(jiàn))2.static :表示此方法為static方法,可被類(lèi)名直

13、接調(diào)用3.void :表示此方法無(wú)返4.main :系統(tǒng)規(guī)定的方法名稱(chēng)5.string args接受運(yùn)行時(shí)參數(shù)這里就string args重點(diǎn)解釋一下。首先觀(guān)察,其實(shí)args是一個(gè)string類(lèi)型的數(shù)組。下面我們用一段代碼來(lái)看看這個(gè)數(shù)組里有什么: public class odemo05public static void main (string args)for (int i=0;i<argsength;i + + )system.out.println(argsi);然后看一下運(yùn)行結(jié)果:k: jauatest jauaxobject>jauac odeno05 . jauac

14、: jauatestjauaobject>java odeno05 f irst second tbird first second third可以看到與往常不同的是我在執(zhí)行乂 class文件時(shí)后面加上了三個(gè)參 數(shù),而從顯示結(jié)果來(lái)看正是這三個(gè)參數(shù)傳入了 args數(shù)組中。四包裝類(lèi)通過(guò)上面這一知識(shí),我們想實(shí)現(xiàn)一些代碼功能。比如說(shuō)編寫(xiě)一個(gè) person類(lèi),類(lèi)中的內(nèi)容由程序運(yùn)行時(shí)輸入,person里面包括一個(gè)姓 名和一個(gè)年齡。我們對(duì)上面要求做f 簡(jiǎn)單的分析:姓名是string類(lèi)型的,年齡是 int類(lèi)型的。我們可以用args數(shù)組接收輸入的姓名和年齡數(shù)據(jù)。而我 們看到args數(shù)組是一個(gè)string類(lèi)

15、型的數(shù)組。那么問(wèn)題變成了我們需 要找一種方法,將string類(lèi)型數(shù)據(jù)變?yōu)閕nt類(lèi)型。這就是包裝類(lèi)。在java中有一種思想:一切皆對(duì)象。而我們知道數(shù)據(jù)類(lèi)型中占多數(shù) 的基本數(shù)據(jù)類(lèi)型并不符合對(duì)象的特點(diǎn)。所以java提供了對(duì)八種基本 數(shù)據(jù)類(lèi)型的包裝類(lèi)。列表如下:類(lèi)型包裝類(lèi)intintegercharcharacterfloatfloatdoubledoublebytebvteshortshortlonglongbooleanboolean卜面舉例來(lái)具體說(shuō)明一下public class odemo05public static void main(string args)string num二“123”

16、;int temp=lnteger.parselnt( num);system, out. printin (temp*2);代碼紅字部分就是int類(lèi)型對(duì)應(yīng)的_個(gè)對(duì)象操作parselnt是一個(gè)將當(dāng)前類(lèi)型轉(zhuǎn)換成int型的方法。f面是運(yùn)行結(jié)果c: jauatestjauaobject>jauac odeno05.jauac: javatestjavasobject >java odeno05246|c 二jauaxobject >這里要注意的一點(diǎn)是,如果要對(duì)數(shù)據(jù)進(jìn)行類(lèi)型轉(zhuǎn)換,則必須保證數(shù)據(jù) 在將要轉(zhuǎn)換成的類(lèi)型下是合法的。比如上面要求被轉(zhuǎn)換成整型的數(shù)據(jù) 不是t23"而是&

17、quot;abc",程序就會(huì)報(bào)錯(cuò)。回到開(kāi)始時(shí)的問(wèn)題,現(xiàn)在要求名字和年齡由系統(tǒng)運(yùn)行時(shí)輸入,代碼如下:class pers onstring name;int age;string shout()return “姓名:n+name+n ,年齡:n+age;public class odemo05public static void main(string args)if (argsength!=2)system.out.println("參數(shù)輸入有錯(cuò)誤,可按以下格式輸 入:");system.out.printlnc'java 類(lèi)名稱(chēng)名字年齡“);system

18、.exit(l);string namel=argso;int agel=lnteger.parselnt(argsl);person p=new person();p.n ame 二 n amel;p.age=agel;system.out.printl n(p.shout();在結(jié)果執(zhí)行時(shí)我輸入小明23 系統(tǒng)將其以string類(lèi)型接收,然后將23轉(zhuǎn)換為int類(lèi)型輸出。運(yùn)行結(jié)果如下:c: jauatest jauaobject >jaua o de no 05 小明 23 姓名:小明,年齡:23c: javatestct上面是以正確格式直接輸出的。注意代碼紅色部分,我加入了_些增 強(qiáng)程序健壯性的語(yǔ)句,當(dāng)輸入的格式有錯(cuò)誤時(shí)提示正確格式,并退出(system.exit(l) 下面是輸出結(jié)果:c: jauatestjauaobject>jauac odeno05.jauac: j

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論