注解、正则表达式和单例模式

注解

概念

  • 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方法时才会创建对象,(延时加载)
    • 好处

      • 不会有空间浪费
    • 弊端

      • 若不使用锁,可能会有安全问题
上一篇:设计模式的SOLID原则和创建式设计模式 一


下一篇:LeetCode 260. Single Number III