標識符語法
1)java中定義標識符格式以字母,數字,下劃線,$符合組成,不能以數字開頭,且不能為java中的關鍵字。2)標識符意義要明確,不要亂起3)標識符區分大小寫例如 z和Z是不同的兩個標識符
4)java常用關鍵字
Java中的關鍵字
數據類型分類和轉換
1)布爾
基本數據類型中,布爾類型boolean佔有一個字節,由於其本身所代碼的特殊含義,boolean類型與其他基本類型不能進行類型的轉換(既不能進行自動類型的提升,也不能強制類型轉換), 否則,將編譯出錯。
2)基本數據類型中數值類型的自動類型提升
圖中依次表示了各數值類型的字節數和相應的取值範圍。在Java中,整數類型(byte/short/int/long)中,對於未聲明數據類型的整形,其默認類型為int型。在浮點類型(float/double)中,對於未聲明數據類型的浮點型,默認為double型。
public class TestCast {
public static void main(String[] args) {
byte a = 1000; // 編譯出錯
float b = 1.5; // 編譯出錯
byte c = 3; // 編譯正確
}
}
jvm在編譯過程中,對於默認為int類型的數值時,當賦給一個比int型數值範圍小的數值類型變量(在此統一稱為數值類型k,k可以是byte/char/short類型),會進行判斷,如果此int型數值超過數值類型k,那麼會直接編譯出錯。因為你將一個超過了範圍的數值賦給類型為k的變量,k裝不下,你又沒有進行強制類型轉換,當然報錯了。但是如果此int型數值尚在數值類型k範圍內,jvm會自定進行一次隱式類型轉換,將此int型數值轉換成類型k。如圖中的虛線箭頭。這一點有點特別,需要稍微注意下。
在其他情況下,當將一個數值範圍小的類型賦給一個數值範圍大的數值型變量,jvm在編譯過程中俊將此數值的類型進行了自動提升
自動類型轉換
表示範圍小的數據類型轉換成範圍大的數據類型,這種方式稱為自動類型轉換
自動類型轉換格式:
範圍大的數據類型 變量 = 範圍小的數據類型值
強制類型轉換格式
範圍小的數據類型 變量 = (範圍小的數據類型) 範圍大的數據類型值;
public class TestCast {
public static void main(String[] args) {
byte p = 3; // 編譯正確:int到byte編譯過程中發生隱式類型轉換
int a = 3;
byte b = a; // 編譯出錯
byte c = (byte) a; // 編譯正確
float d = (float) 4.0;
}
}
區別在於前者3是直接量,編譯期間可以直接進行判定,後者a為一變量,需要到運行期間才能確定,也就是說,編譯期間為以防萬一,當然不可能編譯通過了。此時,需要進行強制類型轉換。
3)其他情況
public class TestCast {
public static void main(String[] args) {
long a = 10000000000; //編譯出錯
long b = 10000000000L; //編譯正確
int c = 1000;long d = c;
float e = 1.5F;
double f = e;}
}
如上:定義long類型的a變量時,將編譯出錯,原因在於10000000000默認是int類型,同時int類型的數值範圍是-2^31 ~ 2^31-1,因此,10000000000已經超過此範圍內的最大值,故而其自身已經編譯出錯,更談不上賦值給long型變量a了。
此時,若想正確賦值,改變10000000000自身默認的類型即可,直接改成10000000000L即可將其自身類型定義為long型。此時再賦值編譯正確。
將值為1000的int型變量c賦值給long型變量d,按照上文所述,此時直接發生了自動類型提升, 編譯正確。同理,將e賦給f編譯正確。
接下來,還有一個地方需要注意的是:char型其本身是unsigned型,同時具有兩個字節,其數值範圍是0 ~ 2^16-1,因為,這直接導致byte型不能自動類型提升到char,char和short直接也不會發生自動類型提升(因為負數的問題),同時,byte當然可以直接提升到short型。