1. 程式人生 > 其它 >註解、正則表示式和單例模式

註解、正則表示式和單例模式

註解

概念

  • 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 註解名{
      屬性;……
      }
  • 屬性

    • 可以參與執行,因此作用是用來傳遞引數資料的,使註解的功能增強
  • 格式

    • 資料型別 屬性名();

    • 資料型別 屬性名() 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;
    }
    }

    • 特點

      • 類一載入,就建立了該類的物件
    • 弊端

      • 物件有可能不是使用,因此可能回有空間浪費
    • 好處

      • 沒有執行緒安全問題
  • 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方法時才會建立物件,(延時載入)
    • 好處

      • 不會有空間浪費
    • 弊端

      • 若不使用鎖,可能會有安全問題