一.單例開發模式
1.構造器私有化
2.對象只能通過方法中獲取
例子:
餓漢模式:
不管你什麼情況,我都先把對象new出來
public class Product {
private static Product product = new Product();
private Product() {
};
public static Product getProduct() {
return product;
}
}
懶漢模式:
只有需要的時候,我纔想到要new個新對象
public class Product {
private static Product product;
private Product() {
};
public static Product getProduct() {
if(product == null) {
synchronized (Product.class) { //雙檢鎖,解決高併發下,單例模式的線程安全
if(product == null) {
product = new Product();
}
}
}
return product;
}
}
二.static 靜態代碼塊
static代碼塊,完全可以看做一個沒有參數,沒有名稱,沒有返回值的靜態方法.它會在類加載時自動調用,並在main方法前面調用。
靜態代碼塊與靜態方法區別:
靜態代碼塊:自動調用
靜態代碼方法:被動調用
三.java正則表達式
在java.util.regex.*包下,主要由Pattern和Mathcher這倆個類組成
Pattern:如下官方文檔的例子,很容易可以得知,主要調用類裏面的compile的方法,傳入正則的規則
Mathcher:這就是真正影響搜索內容的類
官方實例:
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
注意:如果輸入的內容爲空,將會報空指針異常
java中不只只Pattern類支持regex正則,
String類中的部分方法也同樣支持正則,如mathes(),splite(),replaceAll(),repalceFirst()
四.多線程 synchronized關鍵字,wait(),notify(),sleep()
Thread線程
synchronized: 當多個線程同時使用一個對象的時候,這是時候需要加上synchonized(同步鎖);
wait(): 調用後會釋放掉對象的鎖,之後線程需要通過notify()喚醒
sleep():休眠,不會釋放對象的鎖