被賦予了特殊java含義的單詞。
- 關鍵字全都是小寫
1.行注釋:使用 // 來注釋一行文字或代碼。
//這是行注釋的內容
2.塊注釋: 塊前使用 /* ,塊后使用 */ 包裹住要注釋的塊內容
/*這是塊注釋這是塊注釋*/
3.文檔注釋:文檔前使用 /** ,文檔后使用 */ 包裹文檔注釋的內容。
/**這是文檔注釋*/
注釋的作用:
- 注解說明程序
- 調試程序
- 常量表示不能改變的數值。代碼中直接出現的值。
- java中常量的分類:
- 整數常量。所有整數
- 小數常量。所有小數
- 布爾常量,true或false
- 字符常量。將一個符號,數字或字母用單引號(’’)標識
- 字符串常量。將一個或多個數字,符號或字母用雙引號(””)標識
- null常量,只有一個值 即 null,表示空
用來不斷的存放同一類型的常量,并可以重復利用
java是強類型語言,對每一種數據都定義了明確的具體數據類型,在內存中分配了不同大小的區域。
整數默認:int 小數默認:double
取值范圍:
byte : -128~127 , 1個字節
short: -2^15~2^15-1 ,2個字節
int : -2^31~2^31-1 ,4個字節
long:-2^63~2^63-1 , 8個字節
float : 4個字節
double: 8個字節
char: 0~65535, 2個字節
變量的定義:
byte b = 3;short s = 4000;int x = 12;long l = 1234567890123l;//最后一個字符不是數字1,而是字母Lfloat f = 2.3f;double d = 2.3;char ch = 'a'; boolean bl = true;
整數的類型提升和強制類型轉換:
類型提升,如:
int a = 12;byte b = 3;a = a + b;
運算過程:a+b時,由于a為4個字節,b為1個字節,在運算時,java會自動類型提升,并且以a為主,即把b轉換為4個字節,前三個字節全為0,再進行相加,結果為4個字節,最后把結果賦值給a。
強制類型轉換,如:
int a = 12;byte b = 3;b = (byte)(a + b);運算過程:和上面一樣,a+b的結果為4個字節,不能直接賦值給byte類型的b,需要進行強制類型轉換,將結果的第一個字節保留后賦值給byte類型的b。要對整數進行強制類型轉換,必須確保要轉換的值在byte范圍之內,否則后丟失數據。
注意:字符型數據和int類型數據運算時,取字符類型數據的Ascii碼再和這個int數據運算,結果為int數據。
到這里,我有了一個疑問:在定義和初始化byte類型數據時,byte b = 4; 4不是int類型數據嗎?怎么不用強制類型轉換,就可以把4賦值給byte類型的變量b。
原因:java在運行byte b = 4這句代碼時,編譯器會自動判斷4這個int型數據是否超過byte型數據所能表示的范圍(-128~127)之內,如果4這個數在這個范圍內,自動類型轉換為byte數據,沒有丟失數據;如果4這個數超出這個范圍,編譯就會報 可能丟失精度的錯誤。
面試題:下面兩個代碼為什么出現不同的結果。
1.
byte b = 4;b = 3+7;System.out.PRintln(b);
2.
byte b = 4;byte b1 = 3;byte b2 = 7;b = b1 + b2;System.out.println(b);
結果:第一個代碼運行不會報錯,第二個會報b = b1 + b2 這句可能損失精度的錯誤。
原因分析:第一個代碼分析同上面疑問的原因,第二個,由于b1和b2是變量,編譯器不確定它們的值會不會超出byte表示數據的范圍。所以也就檢查不了。第一個為常量,可以判斷和檢查3+7的結果有沒有超出byte類型所表示的范圍。
聯想:以下代碼不會報錯:
int x ;int x1 = 100;int x2 = 98;x = x1 + x2;System.out.println(x);
原因:int是整數的默認類型。就算這個結果超出了int數據表示的范圍,底層也會進行強制類型轉換,不管是不是損失精度。
新聞熱點
疑難解答