標籤:
這裡提幾個個人感覺需要注意的細節,具體的內容推薦隨便看本java書籍
一、標識符
1.標識符命名規則:
1)字母、底線、貨幣符號或者數字組成
2)字母、底線、貨幣符號開頭(不能是數字)(面試喜歡考這兩點)
3)大小寫敏感,長度無限制
4)不能和關鍵字、保留字重名
2.約定一般採用駝峰規則,並且是見名知意
3.注意命名不能夠有關鍵字 所有關鍵字,都是小寫字母
二、基礎資料型別 (Elementary Data Type)
byte,short ,int,long,char; boolean ;float,double
需要注意的是:
1)整型預設使用int, 浮點型預設使用double
比如要寫一個長整形long 的數,需要顯式地寫成 1000L (後面加個L,雖然寫小寫l也可以,但是推薦寫大寫L)
要寫一個float類型的浮點數,顯式寫成 1.23F
2)關於金融的行業對於資料精度要求很高的,一般會使用BigInteger和BigDecimal來表示整型和浮點型
3)char類型
java中的char底層採用unicode,英文是兩個位元組16位,一個漢字也是兩個位元組,也就是說 ‘a‘ ,‘中‘ ,對於java中的char來說是一樣長的
(雖然有些編碼裡面說的一個中文字元是兩個英文字元長度,但是在unicode下面,他們長度相同,都是兩個位元組)
三、操作符
1.賦值 = , 注意的是參考型別傳遞地址,基本類型傳遞值。
2.算術運算子:+、-、*、/、%等
注意的是進行整型運算底層採用的是int來進行, 比如
short s1,s2 = 1;
s2++;
s1=s2;//這裡會報錯,因為s++的時候,會自動將short類型轉為int類型,然後賦值的時候左邊衛short類型,右邊實際上變成了int類型
3.關係運算子
注意對象的比較,不能隨便用"=",而且說到"="就不得不提"equals",這裡提兩點
1)
1 public class A {} 2 3 public class Test { 4 5 public static void main(String[] args) { 6 7 A a1 = new A(); 8 9 A a2 = new A();10 11 System.out.println(a1 == a2); //false12 13 System.out.println(a1.equals(a2));//false 14 15 }16 17 }
第一個為false,因為比較的實際上是地址,兩個對象,地址不同
第二個也為false,可能你已經瞭解對象比較要用equals方法,但是這裡A對象並沒重寫equals方法,那麼就會調用Object的equals方法,Object的equals方法實際上還是在比較地址
2)
1 public class Test { 2 3 public static void main(String[] args ) { 4 5 String s1 = "hello"; 6 7 String s2 = "hello"; 8 9 System.out.println(s1 == s2); //true10 11 System.out.println(s1.equals(s2));//true12 13 }14 15 }
String雖然是物件類型,但是它很特殊,java裡面有String池,建立第一個hello的時候放入String池,第二次建立s2的時候JVM首先去找String池,發現已經有"hello"了,就直接讓s2也指向s1這個對象。
如果想建立另一個"hello",需要這麼寫:new String("hello");
(關於設計String池,原因之一也是java最開始出的版本裡面,String就是常量,這是JVM為了效率考慮的一次最佳化,後面詳細介紹String的時候還會講到StringBuilder,StringBuffer,它們則是java對於字串操作的第二次最佳化)
4.邏輯運算子 &, | ,! 注意兩點
1)a&&b 如果前一個為false ,則後一個不會執行;如果a||b ,第一個為true,第二個不會執行了;
而a & b 第一個為false,第二個也會執行;a|b 第一個為true,第二個也會執行。(這面試挺喜歡考的)
2)熟悉二進位操作的話
比如 01 & 11 結果為 01 , 01 | 11 結果為11 , 這裡是按照與或非的原則,每個位置進行計算的。現實中碰到要這麼做的情況很少。這是按位操作。
3)指數計算
1.39E9f = 1.39*10^9 用的比較少
4)移位操作(需要點二進位的知識來理解)
左移 <<
右移 >>
無符號右移 >>> 用的比較少,一般只是在進行2的倍數操作時候用
而且移位操作,short,byte等執行之前,系統會自動轉換成為int ,然後再移位
比較推薦的一種用法,就是當放大2的n次方的時候 ,可以 t<<n 這麼寫 , 左移一位相當於乘以2 ,右移一位相當於除以2 , 這個操作速度更快(這是裝B利器)。
5)三元操作符
a?b:c
如果a為true則執行b,a為false執行c
6)截取
Math.random() 四捨五入
Math.ceil() 升截
Math.floor() 降截
7)基礎資料型別 (Elementary Data Type)之間的自動轉換
容量小的自動轉換成為容量大的
布爾類型和其他類型之間不能互相轉換(這個和c++不同,比如 if(1)在c++中可以,在java中不行)
byte,short,char>int>long>float>double
byte,short,char之間不會相互轉化,他們三者發生計算,首先變成int
(整型運算,底層就是以int,所以小容量的這三個進行運算,在運算前,就被系統自動變為int)
四、控制流程程語句
1.迴圈
while,do-while,for , 注意do-while迴圈會比while多執行一次(這個面試常考)
比如:
1 public class Test { 2 public static void main(String[] args) { 3 int i=0; 4 while(i<2) {//執行2次 5 i++; 6 System.out.println("dd"); 7 } 8 9 int j=0;10 do {//執行3次11 j++;12 System.out.println("dd");13 }while(j<2);14 }15 }
2.謹記一個原則,別過多使用if、else, 超過5個加註釋(為更好維護)
3.switch語句 ,這個記得加break控制
雖然jdk版本出來都快版本9了,但是關於switch的和枚舉配合使用的貌似使用不普遍,見下例:
1 enum Spe { 2 NOT,YES 3 } 4 5 public class Test { 6 public static void main(String[]args) { 7 Spe s = Spe.NOT;//枚舉類型的值,本身也是這個枚舉類型 8 switch(s) {//s的位置放入一個枚舉類型 9 case NOT: System.out.println("not");break;10 case YES: System.out.println("yes");break;11 }12 }13 }
二、java文法基礎