一.单例开发模式
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():休眠,不会释放对象的锁