時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)
在Java程序中,類是其實現(xiàn)功能的核心。如果說開發(fā)Java應(yīng)用程序,就是一個類的構(gòu)建與使用的過程這一點都不為過。可惜的是,不少程序員在編寫類的時候,還是會犯一些常規(guī)的錯誤。筆者就對此做一個總結(jié),望各位讀者能夠引起重視。
一、基本數(shù)據(jù)類型的初始化問題。
在Java語言中,跟其他開發(fā)語言一樣,都定義了一些基本的數(shù)據(jù)類型。程序員可以拿來直接使用,還可以用來構(gòu)造其他一些復(fù)雜的應(yīng)用程序。不過在Java中使用這些基本數(shù)據(jù)類型有些不同。在Java語言中,這個基本數(shù)據(jù)類型主要用在兩個地方,分別為類中的成員或者局部變量。對于這些基本的數(shù)據(jù)類型,常犯的錯誤就是沒有進(jìn)行初始化。
如果將某些變量是屬于這些基本數(shù)據(jù)類型的,當(dāng)他們作為一個類的成員使用時,默認(rèn)情況下編譯器會給其一個默認(rèn)值。以保證那些是基本類型的成員變量得到初始化,防止產(chǎn)生程序的錯誤。但是,這些默認(rèn)的初始值大部分情況下可能都不符合程序員的需要,可能是不準(zhǔn)確的,也可能是不合法的。為此筆者的建議是,開發(fā)人員要養(yǎng)成一個好習(xí)慣,在定義變量的時候(用于類成員),就最好明確的對變量進(jìn)行初始化。另外需要注意的是,跟C++等編程語言相比,Java在這方面有了很不錯的改善。如如果開發(fā)人員忘記對其進(jìn)行初始化,Java至少還會采用默認(rèn)值對其進(jìn)行初始化,來防止程序錯誤。但是在C++中,則不會對其進(jìn)行自動初始化。在這種情況下,由于變量沒有及時初始化,而很容易出現(xiàn)程序的崩潰。
基本類型的另外一種用途就是當(dāng)作局部變量來使用,如在循環(huán)語句中當(dāng)作循環(huán)條件來使用。此時跟類成員不同,系統(tǒng)不會自動對局部變量進(jìn)行初始化。很多程序開發(fā)員會在這里栽跟頭。因為在類成員中會對其進(jìn)行自動初始化,而在局部變量也如此。其實不然。當(dāng)利用int y 等語句定義了一個局部變量時,Java跟其他開發(fā)語言一樣,是不會對其進(jìn)行自動初始化的。開發(fā)人員需要在定義變量時就對其進(jìn)行初始化,這是筆者強(qiáng)烈建議的。如果在代碼編譯的時候,局部變量沒有被正確的初始化,則系統(tǒng)編譯器就會返回一個錯誤信息,告訴開發(fā)人員某個局部變量沒有被正確的初始化,便以不會成功。在這方面,Java跟其他語言也有所不同。如在C++中,如果變量沒有初始化,那么系統(tǒng)只是拋出一個警告信息,便以仍然可以正常進(jìn)行。這無疑后以后程序運(yùn)行埋下了一顆定時炸彈。為此筆者認(rèn)為,Java這種做法是比較安全的。當(dāng)局部變量沒有初始化時,系統(tǒng)會拒絕進(jìn)行編譯,而不是簡單的只是一個警告信息。有時候,警告信息并不能夠引起程序開發(fā)人員的重視。
總之,基本數(shù)據(jù)類型無論是作為類成員變量來使用,還是作為局部變量來使用,程序開發(fā)人員都要養(yǎng)成一個好習(xí)慣,即在變量定義的時候馬上進(jìn)行初始化。即使不知道還賦予什么值合適,那么最好也是手工的賦予其一個默認(rèn)值。等到變量使用時,在根據(jù)實際情況給其重新賦值。無論什么情況下,變量一定以就要對其進(jìn)行初始化。
二、給方法設(shè)置合適的返回類型。
在Java類中,除了成員變量,最重要的就是方法了。而在方法中,比較容易出現(xiàn)問題的那就是其返回類型的問題。這里指的返回類型是指調(diào)用方法后返回的數(shù)據(jù)類型。也就是說,在方法內(nèi)部執(zhí)行一系列的運(yùn)算之后,要返回給外部的值。開發(fā)人員要根據(jù)這個值來設(shè)置方法的返回類型。如現(xiàn)在有一個方法age()。主要的用途就是根據(jù)身份證號碼來推算出這個人的年齡。此時在調(diào)用這個方法時,可利用如下的語句 int age1=getage.age()。
那么在定義這個方法的時候,需要注意哪些內(nèi)容呢?
首先在定義方法的時候,需要注意其數(shù)據(jù)的范圍類型。并不是說所有的方法都會返回結(jié)果。如果某個方法返回結(jié)果的話,并不是說不用指定返回的數(shù)據(jù)類型。仍然需要指定,只是利用關(guān)鍵字void,而不是采用int等基本數(shù)據(jù)類型。如假設(shè)上面這個age方法沒有返回任何的數(shù)據(jù)類型,則要按照如下的方法來定義,即void age()。注意前面的關(guān)鍵字void表示這個方法沒有返回值。如果有返回值的話,那么就要在方法開頭指明返回值的類型。如age這個方法,如果其返回的是年齡整數(shù)型的數(shù)據(jù),則就需要如下定義int age()。最好的情況是,返回的數(shù)據(jù)類型跟方法中指定的數(shù)據(jù)類型一致。,但是在實際工作中,沒有定義的這么嚴(yán)格。一般來說,這個數(shù)據(jù)類型只要兼容機(jī)即可。如雖然返回的數(shù)據(jù)是整數(shù),但是在方法處定義的可以是浮點數(shù)的數(shù)據(jù)類型。因為他們是兼容的。但是反過來則不行。如返回的值為浮點數(shù),而在方法中定義的卻是整數(shù)型的返回值。此時系統(tǒng)就會認(rèn)為是錯誤的。因為在整數(shù)型的變量中無法存儲浮點數(shù)的數(shù)據(jù)。
其次需要注意的是在調(diào)用這個方法時,需要將方法的返回值賦值給某個變量。為此,這個變量的數(shù)據(jù)類型必須同這個方法返回值的數(shù)據(jù)類型兼容。int age1=getage.age(),如在這個語句中,如果方法age返回的是整數(shù)型的數(shù)據(jù),就說明是可行的。但假設(shè)這個方法返回的不是整數(shù)型的數(shù)據(jù),而是浮點數(shù)的數(shù)據(jù)類型,那么就會發(fā)生數(shù)據(jù)類型不兼容的情況。所以在將某個方法的返回值賦值給變量時,一定需要注意這個方法的返回值到底是什么。如果這個方法是程序員自己編寫的,那么一般不會出現(xiàn)問題。自己編寫的方法,應(yīng)該清楚其會返回什么樣的值。現(xiàn)在的問題是,如果這個方法不是程序員自己開發(fā)的呢?在一些大型的應(yīng)用程序開發(fā)中,往往需要多個程序員合作才能夠完成一個項目。此時程序員就需要引用其他程序開發(fā)人員開發(fā)的類以及類中的方法。有時候程序開發(fā)人員還會從網(wǎng)上下載類直接拿來使用。無論是哪一種方式,都會涉及到這個數(shù)據(jù)類型的問題。為此如果是程序員自己開發(fā)的類供別人使用時,那么最好能夠在類或者方法的說明中,將這個方法會返回的數(shù)據(jù)類型寫清楚,并且要確保準(zhǔn)確。只有如此,程序員才能夠在引用某個方法時為其設(shè)置合適的數(shù)據(jù)類型,避免因為數(shù)據(jù)類型不一致而導(dǎo)致應(yīng)用程序編譯或者運(yùn)行錯誤。
三、參數(shù)列表的個數(shù)與數(shù)據(jù)類型。
在定義方法時,往往需要外部參入一些參數(shù)才能夠運(yùn)行。如在根據(jù)身份證號碼來判斷年齡的方法中,至少需要將身份證號碼這個參數(shù)傳遞放方法對內(nèi)部中去。有時候可能還不止一個參數(shù)。如由于身份證號碼新版與舊版是不同的。為此同時需要將身份證號碼的版本傳遞到方法里面去。在這個傳遞的過程中,主要需要注意的就是參數(shù)的個數(shù)與數(shù)據(jù)類型。
如果外部需要傳入多個參數(shù)到方法內(nèi)部的話,那么在定義方法時就需要設(shè)置這么多的參數(shù),傳入的參數(shù)與參數(shù)列表中的參數(shù)必須一一對應(yīng)。如上面這個案例中需要傳入身份證號碼與身份證的版本,那么在定義這個方法的時候就需要設(shè)置兩個參數(shù)。
其次需要注意數(shù)據(jù)類型。在參數(shù)列表中,也需要為參數(shù)指定其采用的數(shù)據(jù)類型。這個數(shù)據(jù)類型必須與實際傳入的數(shù)據(jù)類型一致或者兼容。為了保證這一點,往往需要在傳入這個參數(shù)之間進(jìn)行控制。如需要利用一個If語句來判斷傳入的參數(shù)是否符合要求。如果符合的話,調(diào)用這個方法。相反不符合的話,則會 拋出一個異常,并將錯誤信息返回給用戶。在大部分情況下,如果方法涉及到參數(shù),利用if語句來進(jìn)行判斷是比較合理的。另外,也可以事先利用數(shù)據(jù)類型轉(zhuǎn)換函數(shù),強(qiáng)制將傳輸參數(shù)的數(shù)據(jù)類型轉(zhuǎn)換成參數(shù)列表所定義的數(shù)據(jù)類型。不過需要注意的是,在轉(zhuǎn)換過程中可能會造成一些數(shù)據(jù)的誤差。開發(fā)人員需要預(yù)先評估一下能否接受這誤差。如果可以接收的話,則可以采用這種方法來強(qiáng)制數(shù)據(jù)的兼容性。如果不行的話,則就需要給用戶返回錯誤信息,讓其提供一個合法的參數(shù)。
另外在窗口中進(jìn)行類似的控制也是不錯的選擇。如可以通過必須填寫文本框這種機(jī)制來控制用戶必須傳入多少個參數(shù)?;蛘咴谖谋究蛑胁捎昧斜砘蛘呷掌谛偷倪x擇框等等來規(guī)范用戶傳入?yún)?shù)的數(shù)據(jù)類型。總之,這個方法傳入?yún)?shù)的控制,無論是數(shù)量上還是數(shù)據(jù)類型上,在越靠近用戶的那邊控制效果越好。如此用戶可以在最短的時間內(nèi)發(fā)現(xiàn)問題,而不會等到程序執(zhí)行錯誤了才知道自己提供的參數(shù)有問題。
關(guān)鍵詞標(biāo)簽:Java
相關(guān)閱讀
熱門文章 eclipse中如何設(shè)置字體大小_eclipse字體大小設(shè)置方法 jsp 實現(xiàn)在線人數(shù)統(tǒng)計 Eclipse優(yōu)化設(shè)置教程_Eclipse卡頓優(yōu)化設(shè)置技巧 JS截取字符串常用方法詳細(xì)整理
人氣排行 JS驗證日期格式是否正確 Java中3DES加密解密調(diào)用示例 Java技術(shù)-J2EE開發(fā)日記-MyEclipse快捷鍵與插件大全 eclipse中如何設(shè)置字體大小_eclipse字體大小設(shè)置方法 Eclipse優(yōu)化設(shè)置教程_Eclipse卡頓優(yōu)化設(shè)置技巧 JavaScript基本語法-常量和變量 用Java刪除文件夾里的所有文件 100多個很有用的JavaScript函數(shù)以及基礎(chǔ)寫法匯總