面向对象
内部类:
类中的类的声明;当一个事物内的一个部分需要一个结构进行描述,一般只是为了让外部类使用用,且可以访问外部类中私有化属性
分类
1.成员内部类/普通内部类
等同看作成员变量,不需要static修饰;可以使用权限控制修饰符;可以使用权限控制符;内部不能有静态声明,可以直接访问外部类的所有属性;内部类类名:外部类$内部类
2.静态内部类
等同看作静态变量;可以使用权限控制符;可以声明所有属性,静态和成员都可以;可以直接访问外部类的静态属性,不能直接访问成员属性(通过对象跟方法)
3.局部内部类
等同看作局部变量,不能有静态声明,不能使用static修饰符;如果外部方法是静态方法,则内部类不能直接访问外部类的成员属性;如果是成员方法,可以直接访问外部类所有属性
4.匿名内部类
方法调用的时候,需要传入一个类的对象,可以传入一个匿名内部类;一般该对象是接口的实现类对象,匿名内部类相当于是子类,可以使用supre等关键字;会自动创建一个对象传入;好处:少定义一个类;缺点:无法重复使用;语法:方法(new 父类/接口(){类体})
设计模式
一套呗多人知晓,分类编目的,反复使用的,代码设计经验的总结.目的是为了代码的重用,更容易被他人理解,可读性更高.
1.单例模式
实例化多次得到同一个对象或结果;让某个对象制备实例化一次
步骤
因为要控制数量只有一个,权力就不能给用户
1.不能让用户创建对象:不让用户访问构造方法(构造方法私有化)
2.只创建一个给用户:给用户一个静态方法来获取对象(成员方法需要调用对象,获取对象又要调用方法,互相矛盾)
3.存储对象的变量:存储是为了重复使用,为了保证对象只有一个(创建一个静态变量)
局部:临时性,方法执行完就不存在了,下次调用又重新初始化
成员:静态方法中不能操作成员变量
静态:和类相关,不会消失
2.懒/饿汉模式(根据创建时机分类)
1.懒汉模式:用到的时候创建对象,也就是第一次获取的时候
2.饿汉模式:类加载的时候立即创建
区别
1.内存角度:懒汉省内存,用的时候才创建,被称为懒加载/迟加载
饿汉浪费内存,不用就开始创建对象
2.线程安全角度:饿汉是在类加载阶段就初始化,多线程下没问题,类只会加载一次
懒汉在多线程并发情况下不行,可能创建多个对象,但是可以通过双重校检加锁解决
一般我们使用懒汉,多线程也一样(通过双重校检加锁解决)