注解
概念
- 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{