官术网_书友最值得收藏!

3.7 技術解惑

3.7.1 定義常量時的注意事項

在Java語言中,主要利用final關鍵字(在Java類中靈活使用Static關鍵字)來進行Java常量的定義。當常量被設定后,一般情況下就不允許再進行更改。在定義常量時,需要注意如下3點。

(1)在定義Java常量的時候,就需要對常量進行初始化。也就是說,必須在聲明常量時就對它進行初始化。跟局部變量或類成員變量不同,在定義一個常量的時候,進行初始化之后,在應用程序中就無法再次對這個常量進行賦值。如果強行賦值的話,編譯器會彈出錯誤信息,并拒絕接受這一新值。

(2)需要注意final關鍵字的使用范圍。final關鍵字不僅可以用來修飾基本數據類型的常量,還可以用來修飾對象的引用或方法,比如數組就是對象引用。為此,可以使用final關鍵字定義一個常量的數組。這是Java語言中的一大特色。一個數組對象一旦被final關鍵字設置為常量數組之后,它就只能恒定地指向一個數組對象,無法將其指向另一個對象,也無法更改數組中的值。

(3)需要注意常量的命名規則。在定義變量或常量時,不同的語言,都有自己的一套編碼規則。這主要是為了提高代碼的共享程度與易讀性。在Java中定義常量時,也有自己的一套規則。比如在給常量取名時,一般都用大寫字母。在Java語言中,區分大小寫字母。之所以采用大寫字母,主要是為了跟變量進行區分。雖然說給常量取名時采用小寫字母,也不會有語法上的錯誤,但是為了在編寫代碼時能夠一目了然地判斷變量與常量,最好還是能夠將常量設置為大寫字母。另外,在常量中,往往通過下劃線來分隔不同的字符,而不像對象名或類名那樣,通過首字母大寫的方式來進行分隔。這些規則雖然不是強制性的,但是為了提高代碼的友好性,方便開發團隊中的其他成員閱讀,這些規則還是需要遵守的。

總之,Java開發人員需要注意,被定義為final的常量需要采用大寫字母命名,并且中間最好使用下劃線作為分隔符來連接多個單詞。定義為final的數據不論是常量、對象引用還是數組,在主函數中都不可以改變,否則會被編輯器拒絕并提示錯誤信息。

3.7.2 char類型中單引號的意義

char類型使用單引號括起來,而字符串使用雙引號括起來。關于String類的具體用法以及對應的各個方法,讀者可以參考查閱API文檔中的信息。其實Java語言中的單引號、雙引號和反斜線都有特殊的用途,如果在一個字符串中包含這些特殊字符,應該使用轉義字符。例如希望在Java程序中表示絕對路徑"c:\daima",但這種寫法得不到我們期望的結果,因為Java會把反斜線當成轉義字符,所以應該寫成"c:\\daima"的形式。只有同時寫兩個反斜線,Java才會把第一個反斜線當成轉義字符,與后一個反斜線組成真正的反斜線。

3.7.3 正無窮和負無窮的問題

Java還提供了3個特殊的浮點數值—正無窮大、負無窮大和非數,用于表示溢出和出錯。例如,使用一個正浮點數除以0將得到正無窮大,使用一個負浮點數除以0將得到負無窮大,用0.0除以0.0或對一個負數開方將得到一個非數。正無窮大通過Double或Float的POSITIVE_INFINITY表示,負無窮大通過Double或Float的NEGATIVE_INFINITY表示,非數通過Double或Float的NaN表示。

請注意,只有用浮點數除以0才可以得到正無窮大或負無窮大,因為Java語言會自動把和浮點數運算的0(整數)當成0.0(浮點數)來處理。如果用一個整數除以0,則會拋出“ArithmeticException:/by zero”(除以0異常)。

3.7.4 移位運算符的限制

Java移位運算符只能用于整型,不能用于浮點型。也就是說,>>、>>>和<<這3個移位運算符并不適合所有的數值類型,它們只適合對byte、short、char、int和long等整型數進行運算。除此之外,進行移位運算時還有如下規則:

(1)對于低于int類型(如byte、short和char)的操作數來說,總是先自動類型轉換為int類型后再移位。

(2)對于int類型的整數移位,例如a>>b,當b>32時,系統先用b對32求余(因為int類型只有32位),得到的結果才是真正移位的位數。例如,a>>33和a>>l的結果完全一樣,而a>>32的結果和a相同。

(3)對long類型的整數移位時,例如a>>b,當b>64時,總是先用b對64求余(因為long類型是64位),得到的結果才是真正移位的位數。

當進行位移運算時,只要被移位的二進制碼沒有發生有效位的數字丟失現象(對于正數而言,通常指被移出的位全部都是0),不難發現左移n位就相當于乘以2n,右移則相當于除以2n。這里存在一個問題:左移時,左邊舍棄的位通常是無效的,但右移時,右邊舍棄的位常常是有效的,因此通過左移和右移更容易看出這種運行結果,并且位移運算不會改變操作數本身,只是得到一個新的運算結果,原來的操作數本身是不會改變的。

主站蜘蛛池模板: 鲜城| 民勤县| 香港| 荔波县| 临西县| 云霄县| 如皋市| 庆云县| 阿坝| 英山县| 隆安县| 郁南县| 蓬溪县| 四川省| 松潘县| 开远市| 东港市| 沽源县| 酉阳| 昌吉市| 朝阳区| 丰宁| 福泉市| 金溪县| 五台县| 金沙县| 德州市| 奎屯市| 邹平县| 滦平县| 册亨县| 三原县| 天峻县| 淄博市| 奈曼旗| 东安县| 文安县| 大悟县| 拉孜县| 迁安市| 明光市|