20220315
建造者(Builder)模式
@Builder
public class HardwareFeeEntity {
}
HardwareFeeEntity entity1 = HardwareFeeEntity.builder().accountPeriod("202202").applyStatus("Y").build();
静态工厂方法
Map<String, List<String>> m = HashMap.newInstance();
public Static <k,v> HashMap<K,V> new Instance(){
return new HashMap<k,v>();
}
静态工厂方法与用new语句调用的构造方法相比,有以下区别:
1:构造方法的名字必须与类名相同。这一特性的优点是符合Java语言的规范,缺点是类的所有重载的构造方法的名字都相同,不能从名字上区分每个 重载方法,容易引起混淆。静态工厂方法的方法名可以是任意的,这一特性的优点是可以提高程序代码的可读性,在方法名中能体现与实例有关的信息。
2:每次执行new语句时,都会创建一个新的对象。而静态工厂方法每次被调用的时候,是否会创建一个新的对象完全取决于方法的实现。
3:new语句只能创建当前类的实例,而静态工厂方法可以返回当前类的子类的实例,这一特性可以在创建松耦合的系统接口时发挥作用。
***静态工厂方法最主要的特点是:每次被调用的时候,不一定要创建一个新的对象。利用这一特点,静态工厂方法可用来创建以下类的实例。
<1> 单例类:只有惟一的实例的类。
<2>枚举类:实例的数量有限的类。
<3>具有实例缓存的类:能把已经创建的实例暂且存放在缓存中的类。
<4>具有实例缓存的不可变类:不可变类的实例一旦创建,其属性值就不会被改变。
提供静态工厂方法而不是公有的构造器,这样做有几大优势
1) 它们有名称.
2) 不必在每次调用它们的时候都创建一个新对象.
3) 它们可以返回原返回类型的任何子类型的对象.
equals方法是java.lang.Object类的方法
一、对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。
1、“==”比较两个变量本身的值,即两个对象在内存中的首地址。
(java中,对象的首地址是它在内存中存放的起始地址,它后面的地址是用来存放它所包含的各个属性的地址,所以内存中会用多个内存块来存放对象的各个参数,而通过这个首地址就可以找到该对象,进而可以找到该对象的各个属性)
2、“equals()”比较字符串中所包含的内容是否相同。
object.equals()
本身是对于对象地址值的比较(对象引用比较),String 、Math、Integer、Double等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法。
本身定义:
public boolean equals(Object obj) {
return (this == obj);
}
String重构方法:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n– != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
Math、Integer、Double等这些类都是重写了equals()方法的,从而进行的是内容的比较
基本类型是进行值的比较。
相等的对象,它们的hash code一定相等。
两个对象的hashCode相同,它们并不一定相同
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, rollbackFor = Exception.class)
propagation 事务属性
isolation 隔离等级
rollbackFor 回滚异常
其实Cloneable接口仅仅是一个标志,而且这个标志也仅仅是针对 Object类中 clone()方法的,如果 clone 类没有实现 Cloneable 接口,并调用了 Object 的 clone() 方法(也就是调用了 super.Clone() 方法),那么Object 的 clone() 方法就会抛出 CloneNotSupportedException 异常。
object.clone()
public class Person {
private String name;
private int age;
public Person(){}
public Person(String name,int age){
this.name=name;
this.age=age;
}
public Object clone(){
Object o=null;
try {
o=super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return o;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
这是浅拷贝
浅拷贝 拷贝对象复制会影响父对象 其他对象的引用仍然指向原对象
深拷贝 拷贝对象赋值不会影响父对象 ,深层复制要复制的对象引用的对象都复制一遍。
数据库与缓存数据一致性解决方案

浙公网安备 33010602011771号