java设计原则(https://www.cnblogs.com/pony1223/p/7594803.html)
1.单一职责
一个类只有一个引起变化的原因简单说一个类只负责一项职责
2.里氏替换原则 (Liskov Substitution Principle)
任何基类可以出现的地方,子类一定可以出现。简单讲子类可以可扩展父类功能,但不能改变父类原有的功能
3.依赖倒置原则 (Dependence Inversion Principle)
依赖于抽象,不要依赖于具体,高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。
依赖倒置原则的核心思想是面向接口编程
4.接口隔离原则 (Interface Segregation Principle)
建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少
5.迪米特法则(最少知道原则) (Demeter Principle)
一个对象应该对其他对象保持最少的了解。
6.开闭原则(Open Close Principle)
开闭原则就是说对扩展开放,对修改关闭。
final 和 static之间的区别和联系
https://www.cnblogs.com/skye-you/p/10214525.html
重写和重载的区别
重写(Override)
1.发生在父类与子类之间
2.方法名,参数列表,返回类型(除过子类中方法的返回类型是父类中返回类型的子类)必须相同
3.访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
4.重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常
重载(Overload)
https://blog.csdn.net/wintershii/article/details/80558739
java的23种设计模式
https://www.cnblogs.com/pony1223/p/7608955.htm
1.创建型模式:对象实例化的模式,解耦对象实例化过程(5)
单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式
2.结构型模式:把类或对象结合在一起形成更大的结构(7)
代理模式、装饰模式、外观模式、适配器模式、桥接模式、组合模式、享元模式
3.行为行模式:类和对象如何交互及划分(11)
访问者模式、模板模式、策略模式、状态模式、观察者模式、备忘录模式、中介者模式、迭代器模式、解释器模式、命令模式、责任链模式
单例模式
1.懒汉式 :用到实例才去创建 有线程安全和非安全两种
public class LHanSingle {
private static LHanSingle instance;
private LHanSingle(){}
public static LHanSingle getInstance(){
if(instance==null){
instance=new LHanSingle();
}
return instance;
}
}
2.饿汉式:饿汉式,从名字上也很好理解,就是“比较勤”,实例在初始化的时候就已经建好了,不管你有没有用到,都先建好了再说。好处是没有线程安全的问题,坏处是浪费内存空间。
public class EHanSingle {
private static EHanSingle instance=new EHanSingle();
private EHanSingle(){}
public static EHanSingle getInstance(){
return instance;
}
}
3.双检锁
又叫双重校验锁,综合了懒汉式和饿汉式两者的优缺点整合而成。看上面代码实现中,特点是在synchronized关键字内外都加了一层 if 条件判断,这样既保证了线程安全,又比直接上锁提高了执行效率,还节省了内存空间。
public class DoubleSingle {
private static DoubleSingle instance;
private DoubleSingle(){}
public static DoubleSingle getInstance(){
if(instance==null){
synchronized (DoubleSingle.class){
if(instance==null){
instance=new DoubleSingle();
}
}
}
return instance;
}
}
4.静态内部类:静态内部类的方式效果类似双检锁,但实现更简单。但这种方式只适用于静态域的情况,双检锁方式可在实例域需要延迟初始化时使用。
public class Single {
private static class SingletonHolder{
private static final Single INSTANCE=new Single();
}
private Single(){}
public static final Single getInstance(){
return SingletonHolder.INSTANCE;
}
}
5.枚举