註解、正則表示式和單例模式
阿新 • • 發佈:2021-07-28
註解
概念
- Annotation,稱為元資料,屬於一種程式碼級別的註解。在jdk5.0版本新增的一個特性。與類、介面、列舉是同級別的,可以使用在類、方法、屬性、引數、區域性變數、包的前邊,可以參與程式碼的執行。
- 註解其實一個介面,是java.lang.annotation.Anotationde的子介面。
編寫是不要手動寫繼承,編譯器會自動補全
作用
- 1.替代配置檔案 (eg:Servlet xml 註解)
- 2.製作幫助文件(javadoc) @author @since...
- 3.在編譯時期做檢測 @Override @FunctionalInterface...
常見註解
- @Override @FunctionalInterface @Deprecated(已過時方法,不建議使用) @Test...
元註解
-
修飾註解的註解
-
@Target
-
被修飾的註解能在什麼位置使用
-
常用的值
- ElementType.TYPE
- ELementType.METHOD...
-
-
@Retention
-
被修飾的註解的生命週期
-
RetentionPolicy.SOUCE
- 參與編譯,但不在class檔案中
-
RetentionPolicy.CLASS
- 參與編譯,在class中,但不執行
-
RetentionPolicy.RUNTIME
- 參與編譯和執行
-
-
@Documented
- 是否參與生成幫助文件
-
@Inherited
- 是否被繼承
-
自定義註解
-
格式
- 修飾符 @interface 註解名{
屬性;……
}
- 修飾符 @interface 註解名{
-
屬性
- 可以參與執行,因此作用是用來傳遞引數資料的,使註解的功能增強
-
格式
-
資料型別 屬性名();
-
資料型別 屬性名() default 資料值
- 註解中一旦有屬性,這個屬性沒有預設值,那麼使用時必須給屬性賦值
如果有預設值,賦值不賦值都可以。
- 註解中一旦有屬性,這個屬性沒有預設值,那麼使用時必須給屬性賦值
-
資料型別:
- 基本型別、String、列舉、Class、註解
- 以上這些型別的陣列形式
-
特殊屬性名
-
value
- 無其他屬性、其他屬性不需重新賦值時,value=可省略
-
-
反射註解
- 1、獲取使用註解的類的Class物件
- 2、獲取使用註解的成員物件
- 3、獲取對應的註解
正則表示式
概念
- 本質是字串,具有特殊規則的字串
方法
-
boolean matches(String regex)
- 告知此字串是否匹配給定的正則表示式
- 使用字串與規則進行整體匹配,符合返回true,否則是false
-
String replaceAll(String regex,String replacement)
- 從頭開始,依次讀取字元,檢視是否符合規則,符合則替換
-
String[] split(String regex)
- 從頭開始,依次讀取字元,檢視是否符合規則,符合則切割
正則符號
-
轉移字元類
-
\
-
\t
- 製表符
-
\r
- 匹配一個回車符
-
\n
- 匹配換行符
-
-
字元類
- [abc] a、b 或 c(簡單類)
- [^abc] 任何字元,除了 a、b 或 c(否定)
- [a-zA-Z] a 到 z 或 A 到 Z,兩頭的字母包括在內(範圍)
- [a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](並集)
- [a-z&&[def]] d、e 或 f(交集)
- [a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](減去)
- [a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](減去)
-
預定義字元類
- . 任何字元(與行結束符可能匹配也可能不匹配)
- \d 數字:[0-9]
- \D 非數字: [^0-9]
- \s 空白字元:[ \t\n\x0B\f\r]
- \S 非空白字元:[^\s]
- \w 單詞字元:[a-zA-Z_0-9]
- \W 非單詞字元:[^\w]
-
Greedy 數量詞
- X? X,一次或一次也沒有
- X* X,零次或多次
- X+ X,一次或多次
- X{n} X,恰好 n 次
- X{n,} X,至少 n 次
- X{n,m} X,至少 n 次,但是不超過 m 次
-
邊界匹配器
- ^ 行的開頭
- $ 行的結尾
- \b 單詞邊界
- \B 非單詞邊界
單例設計模式
一個常規類,理論上可以建立n個物件,沒有上限(不考慮記憶體)
該類負責建立自己的物件,同時確保只有單個物件被建立。這個類提供了一種訪問其唯一的物件的方式,可以直接訪問,不需要例項化該類的物件。
注
- 1、單例類只能有一個例項。
- 2、單例類必須自己建立自己的唯一例項。
- 3、單例類必須給所有其他物件提供這一例項。
目標
- 實現一個無論怎麼使用,物件個數永遠是那個
- 要保證物件在記憶體中的唯一性
步驟
- 1、構造方法私有化
- 2、在類中建立一個該類物件
- 3、定義方法,返回該類物件
方式
-
1、餓漢式
- class Single{
//私有構造方法
private Single(){
}
//建立物件
private final static Single s = new Single();//呼叫物件
public static Single getInstance(){
return s;
}
}-
特點
- 類一載入,就建立了該類的物件
-
弊端
- 物件有可能不是使用,因此可能回有空間浪費
-
好處
- 沒有執行緒安全問題
- class Single{
-
2、懶漢式
- class Single{
//私有構造方法
private Single(){
}
//定義變數
private static Single s = null;//呼叫構造方法
public static Single getInstance(){//解決執行緒安全問題 if (s == null){ synchronized (Single.class){ if (s == null){ s = new Single(); } } } return s;
}
}-
特點
- 類載入時,不會建立物件,呼叫getInstance方法時才會建立物件,(延時載入)
-
好處
- 不會有空間浪費
-
弊端
- 若不使用鎖,可能會有安全問題
- class Single{