初學者筆記java
在java源代碼中,每一個變量都必須聲明一種類型(type)。
有兩種類型:primitive type和reference type。引用類型引用對象(reference to object),基本類型直接包含值(directly contain value)。數組
包括boolean類型以及數值類型(numeric types)共8種。
numeric types又分爲整型(integer types)和浮點型(floating-point type)。
整型有5種:byte short int long char(char本質上是一種特殊的int)。
浮點類型有:float和double。編碼
包括四種code
Java是強類型語言,全部的變量必須先聲明後使用,定義變量須要顯示的聲明一個在編譯時就能肯定的類型。
Java中的數據類型有兩種,基本類型(Primitive Type)和引用類型(Reference Type)。對象
Java提供了八種基本數據類型。六種數字類型(四個整數型,兩個浮點型),一種字符類型,還有一種布爾型。接口
通常把基本類型分爲4類,以下表:unicode
分類 | 類型 | 長度 |
---|---|---|
整數型 | int | 32位 |
--- | long | 64位 |
--- | short | 16位 |
--- | byte | 8位 |
字符型 | char | 16位 |
浮點型 | double | 64位 |
--- | float | 32位 |
布爾型 | boolean | 1位 |
int爲最經常使用的整型變量。系統中的整數常量會被看做int處理。但有如下兩個例外:字符串
示例:get
1. publicclass IntegerValTest{ 2. publicstaticvoidmain(String\[\]args){ 3. //下面代碼是正確的,系統會自動把56當成byte類型處理 4. bytea=56; 5. /* 6. 下面代碼是錯的,系統不會把9999999999999當成long類型處理, 7. 因此超出int的表數範圍,從而引發錯誤 8. */ 9. //longbigValue=9999999999999; 10. //下面代碼是正確的,在巨大的整數常量後使用L後綴,強制使用long類型 11. longbigValue2=9223372036854775807L; 13. //以0開頭的整數常量是8進制的整數 14. intoctalValue=013; 15. System.out.println(octalValue); 16. //以0x或0X開頭的整數常量是16進制的整數 17. inthexValue1=0x13; 18. inthexValue2=0XaF; 21. System.out.println(hexValue1); 22. System.out.println(hexValue2); 25. //定義二個8位的二進制數 26. intbinVal1=0b11010100; 27. bytebinVal2=0b01101001; 28. //定義一個32位的二進制數,最高位是符號位。 29. intbinVal3=0B10000000000000000000000000000011; 30. System.out.println(binVal1);//輸出212 31. System.out.println(binVal2);//輸出105 32. System.out.println(binVal3);//輸出-2147483645 33. /* 34. 定義一個8位的二進制,該數值默認佔32位,所以它是一個正數。 35. 只是強制類型轉換成byte時產生了溢出,最終致使binVal4變成了-23 36. */ 37. bytebinVal4=(byte)0b11101001; 38. /* 39. 定義一個32位的二進制數,最好位是符號位。 40. 但因爲數值後添加了L後綴,所以該整數的實際佔64位,第32位的1不是符號位。 41. 所以binVal5的值等於2的31次方+2+1 42. */ 43. longbinVal5=0B10000000000000000000000000000011L; 44. System.out.println(binVal4);//輸出-23 45. System.out.println(binVal5);//輸出2147483651 46. } 47. }
字符型用於表示耽擱的字符。字符常量一般用單引號(')括起來。Java使用unicode編碼方式,因此字符型變量可以表示大部分國家的文字字符。it
字符表示有如下幾種方式:
若是把一個整數(0~65535之間)常量賦給字符類型變量,系統會把整數看成char處理。
示例:
1. publicclassCharTest{ 2. publicstaticvoidmain(String\[\]args){ 3. //直接指定單個字符做爲字符常量 4. charaChar='a'; 5. //使用轉義字符來做爲字符常量 6. charenterChar='\\r'; 7. //使用Unicode編碼值來指定字符常量 8. charch='\\u9999'; 9. //將輸出一個'香'字符 10. System.out.println(ch); 11. //定義一個'瘋'字符常量 12. charzhong='瘋'; 13. //直接將一個char變量當成int類型變量使用 14. intzhongValue=zhong; 15. System.out.println(zhongValue); 16. //直接把一個0~65535範圍內的int整數賦給一個char變量 17. charc=97; 18. System.out.println(c); 19. } 20. }
Java中浮點型有兩種:double和float,兩個浮點型的長度分別爲64位和32位,且長度不因環境的改變而改變。浮點數的特色是不可以精確的表示一個小數位數較多的小數。
浮點數有兩種表示方式:
java中一個浮點數常量默認爲double類型,若是要系統把一個小數常量看成float處理,須要在小數後加上f字母。
示例:
1. publicclassFloatTest{ 2. publicstaticvoidmain(String\[\]args){ 3. floataf=5.2345556f; 4. //下面將看到af的值已經發生了改變 5. System.out.println(af); 6. doublea=0.0; 7. doublec=Double.NEGATIVE_INFINITY; 8. floatd=Float.NEGATIVE_INFINITY; 9. //看到float和double的負無窮大是相等的。 10. System.out.println(c==d); 11. //0.0除以0.0將出現非數 12. System.out.println(a/a); 13. //兩個非數之間是不相等的 14. System.out.println(a/a==Float.NaN); 15. //全部正無窮大都是相等的 16. System.out.println(6.0/0==555.0/0); 17. //負數除以0.0獲得負無窮大 18. System.out.println(-8/a); 19. //下面代碼將拋出除以0的異常 20. //System.out.println(0/0); 21. } 22. }
布爾型只有一個boolean類型,用於表示邏輯真或者邏輯假。boolean的值只能爲true或者是false,其餘基本類型不能轉換到boolean類型。
示例:
1. publicclassBooleanTest{ 2. publicstaticvoidmain(String\[\]args){ 3. booleanb1=true; 4. booleanb2=false; 5. //下面代碼將出現錯誤:字符串不能直接變成boolean型的值 6. //booleanb3="true"; 7. //使用boolean和字符串進行鏈接運算,boolean會自動轉換成字符串 8. Stringstr=true+""; 9. //下面將輸出true 10. System.out.println(str); 11. } 12. }
Java中基本類型有兩種轉換方式自動轉換和強制轉換。講一個表數範圍小的變量賦給一個表數範圍大的變量,系統將進行自動轉換,將小便量轉換爲大變量在進行賦值操做。
示例:
1. publicclassAutoPromote{ 2. publicstaticvoidmain(String\[\]args){ 3. //定義一個short類型變量 4. shortsValue=5; 5. //下面代碼將出錯:表達式中的sValue將自動提高到int類型, 6. //則右邊的表達式類型爲int,將一個int類型賦給short類型的變量將發生錯誤。 7. //sValue=sValue-2; 8. byteb=40; 9. charc='a'; 10. inti=23; 11. doubled=.314; 12. //右邊表達式中在最高等級操做數爲d(double型) 13. //則右邊表達式的類型爲double型,故賦給一個double型變量 14. doubleresult=b+c+i*d; 15. //將輸出144.222 16. System.out.println(result); 17. intval=3; 18. //右邊表達式中2個操做數都是int,故右邊表達式的類型爲int 19. //所以,雖然23/3不能除盡,依然獲得一個int整數 20. intintResult=23/val; 21. //將輸出7 22. System.out.println(intResult); 23. //輸出字符串Hello!a7 24. System.out.println("Hello!"+'a'+7); 25. //輸出字符串104Hello! 26. System.out.println('a'+7+"Hello!"); 29. } 30. }
若是系統把大範圍變量轉換爲小範圍變量就須要強制轉換,強制轉換的語法格式是(type)value,可將valae強制轉換爲type類型的變量。當強制轉換可能會致使數據精度的丟失,請看示例:
1. publicclassNarrowConversion{ 2. publicstaticvoidmain(String\[\]args){ 3. intiValue=233; 4. //強制把一個int類型的值轉換爲byte類型的值 5. bytebValue=(byte)iValue; 6. //將輸出-23 7. System.out.println(bValue); 8. doubledValue=3.98; 9. //強制把一個double類型的值轉換爲int 10. inttol=(int)dValue; 11. //將輸出3 12. System.out.println(tol); 13. } 14. }
當一個算術表達式中包含多個基本類型時,整個表達式的類型會發生自動提高,Java定義了以下的提高規則:
示例:
1. publicclassAutoPromote{ 2. publicstaticvoidmain(String\[\]args){ 3. //定義一個short類型變量 4. shortsValue=5; 5. //下面代碼將出錯:表達式中的sValue將自動提高到int類型, 6. //則右邊的表達式類型爲int,將一個int類型賦給short類型的變量將發生錯誤。 7. //sValue=sValue-2; 8. byteb=40; 9. charc='a'; 10. inti=23; 11. doubled=.314; 12. //右邊表達式中在最高等級操做數爲d(double型) 13. //則右邊表達式的類型爲double型,故賦給一個double型變量 14. doubleresult=b+c+i*d; 15. //將輸出144.222 16. System.out.println(result); 17. intval=3; 18. //右邊表達式中2個操做數都是int,故右邊表達式的類型爲int 19. //所以,雖然23/3不能除盡,依然獲得一個int整數 20. intintResult=23/val; 21. //將輸出7 22. System.out.println(intResult); 23. //輸出字符串Hello!a7 24. System.out.println("Hello!"+'a'+7); 25. //輸出字符串104Hello! 26. System.out.println('a'+7+"Hello!"); 27. } 28. }