1.单例模式
作用:保证只能有存在一个对象
懒汉式:调用功能时才创建对象
饿汉式:类第一次加载完成之后就创建对象
实现步骤:1.构造器私有化 2.私有的静态的该类的引用 3.公共的访问方式
饿汉式:
懒汉式:
同步锁的作用:防止多线程各自创建对象导致单线程失败
例如:A线程使用SingleTon02,调用newInstance方法,发现需要创建对象,而这时B线程也使用了SingleTon02(在A还没创建好对象前),他也创建了新对象,最后A和B都有个对象,单线程失败。
Synchronize同步锁就是在A使用时锁住SingleTon02,这样B就用不了,只能等A用完。
2.静态代理,简单工厂模式
真实角色需要和代理角色实现相同的接口,代理需要有真实角色的引用,需要有代理行为
优点:1.减少与真实角色的交流,安全性上升,解耦,便于后期维护,代理角色可以扩展功能
3.内部类
内部类可分为成员内部类,静态内部类,局部内部类,私有内部类,匿名内部类
成员内部类: 内部类中可以使用外部类中所有的内容,包括私有的; 除了静态内部类以外的内部类中不可以定义静态的内容,除了静态的常量; 在外部类中使用内部类中的成员,通过内部类的对象
静态内部类: 如果在外部类中使用静态内部类中的成员,需要跟随内部类对象使用,如果使用静态内部类中的静态内容,直接类名.调用; 如果在静态内部类中使用外部类中的成员,都要跟随外部类对象使用,如果使用静态内容,在内部类中可以直接使用
私有的内部类: 成员内部类如果一旦被private关键字修饰,就是私有内部类; 私有内部类只能在当前所定义的外部类中使用,其他类中无法使用; 在外部类中可以通过内部类的对象使用内部类中的内容,保扩私有的内容
局部内部类: 局部内部类只能在当前所定义的方法中使用,其他方法,其他类中无法使用; 局部内部中使用到当前所在的方法的参数时,这个参数默认被final修饰;
匿名内部类: 如果某个实现类本身没有自己的作用,为了重写某些抽象方法的,可以使用匿名内部类进行代替
4.Lambda表达式
作用:用来简化匿名内部类;
前提: 函数式接口——只有一个抽象方法的接口就是函数式接口
检查函数式接口: @FunctionalInterface
语法:写法
- ()->{} () ->抽象方法的参数列表 {} 抽象方法的方法体
- 如果方法体语句只有一句,前后的{}可以省略
- 如果抽象方法有参数,参数的数据类型可以省略
- 如果抽象方法参数只有一个,前后的()可以省略
- 如果语句体只有一句,但是是return的话,前后的{}与return关键字可以一起省略
5.异常
throw : 制造异常
抛出异常: throws 把异常抛给上一层 ,谁用谁处理
异常捕获: try..catch(){}:
- 一个try后可以跟多个catch
- 如果try中的代码没有出现异常,正常执行完毕,执行finally中的内容结束
- 如果try中出现异常,下面的代码不会执行,直接进入对应的catch中
- finally无论是否出现异常,都会执行的代码