1. 程式人生 > >JAVA基礎知識|小知識點

JAVA基礎知識|小知識點

刪除元素 -s clas sage lean height ucs 數量 編碼方式

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;
        }
        
if (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; }
View Code

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基礎知識|小知識點