Java對大小寫很「敏感」,所以先來說「命名規則」
識別子(Identifier),因為用來識別,所以名稱必須要有意義
首先
第一個字必須是文字、或用_、$
第二個字起可以用文字、數字、_、&
不可與Java關鍵字相同
大小寫有別,但沒有長度上限
再來
套件(Package),以小寫英文命名,例com.uuu.domin
類別(Class)、介面(Interface)、列舉型別(enum),字母開頭為大寫英文的名詞或片語,例SavingsAccount
方法(Method),字母開頭為小寫英文的動詞,並限制_底線的使用,例getAccount()
區域(Local)變數,簡短有意義可適當使用縮寫,例buf代表buffer
成員變數,第一個字母應小寫,亦使用混合模式,例currentCustomer, maxSize
常數,全部使用大寫,以底線斷詞,例HEAD_COUNT
那麼,方法和成員變數很像,該怎麼區分他們?
從名字後方有沒有(),如果有( )表示是一個方法;若沒有則為變數名稱
關於變數與型態
什麼是成員變數?
修飾子 資料型別 變數識別子;
例:Public int x; 或 Public int x = 20;
※修飾子之後會說明
好比一個人,擁有姓名、身份字號、種族....等等,若把人當作一個物件來看,這些擁有的東西就是此物件的屬性!而產生一個人(產生物件)時,這些屬性自然的會出現在這地球上
每個人(物件)雖然都擁有姓名、身份字號、種族,但值都是不一樣的,這個大家應該都可以認同,既然如此,這些屬性都要在人這個物件下設定成「變數」
好在每一次產生人(哎呀.....不要想歪)的時候,可以輸入不同的值給這些屬性
我們就稱這些變數為物件的成員變數
當然也必須等到人死這些成員變數才會跟著消失,而它們隨著物件建立後儲存在HEAP Memory
Java的資料型態一共有八種
byte, char, short, int, long, float, double, boolean (請記住這個順序)
整數類:byte(8bits), short(16bits), int(32bits), long(64bits)
整數預設為int,若要明確給予型別long時,在數值最右加上L,例1234L
浮點數類:float(32bits), double(64bits)
浮點數預設為double,若要明確給予型別float時,在數值最又加上F,例3.14F
文字類:char(2bits)
沒錯,這只能存放一個字元,並用'單引號包起來表示,例'a'
邏輯類:boolean
在Java裡,沒有任何型態可以轉型變成boolean;而它本身僅能轉型成字串String,而且值只有true和false(全部小寫)
區域變數的宣告
資料型別 變數識別子;
例:boolean isHuman;
區域變數用來存放暫時的資料,譬如人要出門時,才會拿起鞋子穿上
人(物件)、出門(方法),那麼在方法裡我們可以宣告一個區域變數穿什麼樣的鞋子
於是每次出門都可以穿上不同鞋子,但是,它不屬於人身上的任一屬性,相信沒有人會覺得人一出生就會自動配雙鞋子一輩子到死都不離身體吧!
這種暫時存放的就叫「區域變數」
在使用它時,務必要給予初始值!!ㄟ~那為什麼成員變數不用呢?因為系統在一產生物件就先給所有成員變數初始值!但區域變數又並非天生該有,系統不會雞婆幫你預設,但你也不能用到它時,卻沒給它初始,這就像你出門時宣告了鞋子,卻不穿上光著腳出門(沒有給值),然後在大馬路上突然要求:脫下鞋子!脫下!
它存放在STACK Memory,至於何時會被系統清除,必須由系統決定,當它覺得很久沒用是垃圾時就會幫你處理回收!就算你對系統下了「清垃圾」系統也不一定馬上執行,它只是參考你意見!!
※以下是補充
試問
float x = 0.3f;
float y = 0.1f + 0.1f + 0.1f;
if (x == y) {
System.out.println("yes");
}
會印出yes嗎?x換和y相等嗎?
答案是不會印出,他們不相等,可是對我們來說這個算式並沒有錯阿?
電腦是二位元,只有1和0做運算!
所以都是以2次方做計算,例如
0.5= 1/2^1 ;
0.25 = 1/2^2 ;
0.75 = 1/2^1 + 1/2^2 ;
所以0.1該如何算出?電腦只能盡可能逼近0.1
所以浮點數在運算時,三個不等同0.1的值去做計算就不會剛好等於0.3了!!
通常我們會直接定義好位數,因為正整數做運算不會有此情況發生
那麼 x = 3, y = 1 + 1 + 1,之後再除以10就會是0.3 = 0.3 了!!
修訂:
回覆刪除float x = 0.3f;
float y = 0.1f + 0.1f + 0.1f;
大師兄說的是!!!!
回覆刪除