JAVA基礎知識|小知識點
1、強烈建議,不使用char類型
那麽,到底為什麽java裏不推薦使用char類型呢?其實,1個java的char字符並不完全等於一個unicode的字符。char采用的UCS-2編碼,是一種淘汰的UTF-16編碼,編碼方式最多有65536種,遠遠少於當今Unicode擁有11萬字符的需求。java只好對後來新增的Unicode字符用2個char拼出1個Unicode字符。導致String中char的數量不等於unicode字符的數量。
然而,大家都知道,char在Oracle中,是固定寬度的字符串類型(即所謂的定長字符串類型),長度不夠的就會自動使用空格補全。因此,在一些特殊的查詢中,就會導致一些問題,而且這種問題還是很隱蔽的,很難被開發人員發現。一旦發現問題的所在,就意味著數據結構需要變更,可想而知,這是多麽大的災難啊。
2、final修飾的常量
用關鍵字final指示常量,關鍵字final表示這個變量只能被賦值一次,一旦被賦值,就不能再更改了,習慣上,常量名使用全大寫。
如果經常希望某個常量可以在一個類中的多個方法中使用,通常將這些常量稱為類常量,使用關鍵字static final修飾。
3、檢查字符串是否為null也不為空串
if (str != null && str.length() != 0) { System.out.println("字符串不為空"); } else { System.out.println("字符串為空"); }View Code
4、“==”與“equals”的區別
“==”:
1)用於比較值類型(int、float、boolean等)
2)用於比較引用類型,如果兩個對象的引用地址相同,則返回true
“equals”:
1)用於比較引用類型,默認情況下與“==”的返回結果相同
2)由開發者覆寫此方法,自己定義邏輯。比如常見的String類對此方法的覆寫,覆寫過後,即使兩個對象的引用地址不同,返回結果仍然可以相同
public boolean equals(Object anObject) { if (this == anObject) { return true; }View Codeif (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
5、Objects.equals(A,B)與A.equals(B)比較
查看源碼,會發現Objects.equals(A,B)方法在比較之前,會先檢查A是否為空,避免程序報空指針的異常
public static boolean equals(Object a, Object b) { return (a == b) || (a != null && a.equals(b)); }View Code
6、LocalDate與Date
如果只想對日期進行操作,而不對時間點進行操作,建議使用LocalDate類,而不是Date類,前者擁有更多的操作方法,後者的方法已經逐漸被廢棄
7、在將父類轉換成子類之前,應該使用instanceof進行檢查
Object obj = "test"; if (obj instanceof String) { String str = (String) obj; System.out.println(str); }View Code
盡量避免進行強制類型轉換,可以通過重新設計父類的方式,來避免這種操作
8、public class 與 class
public class是公共類的意思,public是訪問修飾符。java規定一個類文件中,public修飾的class只有一個,並且類名必須和這個類的文件名一樣,所以一個類文件中可以有多個類,但由public修飾的類只能有一個
備註:protected、private很少會用於修飾類
9、public、protected、private修飾符
這裏說的修飾,主要是對類中的方法、域等進行修飾
在說明這四個關鍵字之前,我想就class之間的關系做一個簡單的定義,對於繼承自己的class,可以認為他們都是自己的子女,而對於和自己一個目錄(同一個包路徑)下的class,認為都是自己的朋友。
1、public:public表明該數據成員、成員函數是對所有用戶開放的,所有用戶都可以直接進行調用
2、private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有財產神聖不可侵犯嘛,即便是子女,朋友,都不可以使用。
3、protected:protected對於子女、朋友來說,就是public的,可以自由使用,沒有任何限制,而對於其他的外部class,protected就變成private。
作用域 | 當前類 | 同一個package | 子孫類 | 其他package |
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
private | √ | × | × | × |
friendly | √ | √ | × | × |
註:不寫時默認為friendly
10、Integer.valueOf()與Integer.parseInt()
Integer.parseInt()把String類型轉換為int類型
Integer.valueOf()把String類型轉換為Integer對象
11、格式化輸出
String message = String.format("Hello,%s.Next year,you‘ll be %d", "jyy", 24); System.out.println(message); System.out.printf("Hello,%s.Next year,you‘ll be %d", "jyy", 24);View Code
轉換符,不需要特意的記憶,使用的時候,再進行查找
12、switch語句
如果在case分支語句的末尾沒有break語句,那麽就會接著執行下一個case語句,這種情況相當危險,為此,我們程序中從不使用switch語句。
13、不定長數組-ArrayList
//初始化 ArrayList<Car> arrayList = new ArrayList<>(); //添加 arrayList.add(new Car(1001, "奔馳", 200)); arrayList.add(new Car(1002, "寶馬", 300)); //在中間位置添加 arrayList.add(1, new Car(1003, "保時捷", 500)); //修改 arrayList.set(0, new Car(1001, "奧迪", 400)); //查詢 Car c = arrayList.get(0); System.out.println(c.toString()); //刪除 arrayList.remove(2); //查詢長度 arrayList.size(); //轉數組 Car[] cars = new Car[arrayList.size()]; arrayList.toArray(cars);View Code
對數組實施插入和刪除元素的操作其效率很低。對於小型數組來說,這一點也不必擔心。但如果數組存儲的元素數比較多,又經常在中間位置插入、刪除元素,就應該考慮使用鏈表來處理了。
JAVA基礎知識|小知識點