1 代码块
修饰符可选 只能写static
分为静态代码块和普通代码块
分号号可以省略
相当于另一种形式的构造器 可以做初始化操作
如果多个构造器中有重复的语句,可以抽取到初始化块中,提高代码的重用性
代码块的调用优先于构造器 是对构造器的一种补充机制
静态代码块随着类的加载而执行,只执行一次,而普通的代码块每创建一个对象就执行一次
如果使用的是类的静态成员,普通代码块不会被执行
类加载的时机
创建实例对象时
创建子类对象实例 父类会被加载
使用类的静态成员时候(静态属性 静态方法)
创建一个类时 在一个类调用顺序是
①调用静态代码块和静态属性初始化 (静态代码块和静态属性初始化调用的优先级一样,如果有多个静态代码块和多个静态变量初始化,则按他们定义的顺序调用)
②调用普通代码块和普通属性初始化优先级一样,也是按定义顺序调用
构造器最前面隐含了super()和调用普通代码块
静态相关的代码块,类加载时就执行完毕,因此优先于构造器和普通代码块
创建一个子类对象时 调用顺序
父类的静态代码块和静态属性
子类的静态代码块和静态属性
父类的普通代码块和普通属性
父类的构造方法
子类的普通代码块和普通属性
子类的构造方法
静态只和静态玩
2 单例设计模式
设计模式是静态方法和静态属性的经典使用
设计模式是在大量实验找那个总结和理论化后优选的代码结构,编程风格,以及解决问题的思考方式
设计模式就像经典的棋谱,不同的棋局,我们用不同的棋谱,免得自己再去思考和摸索
单例
采取一定方法保证在整个软件系统中,对某一个类只能存在一个对象实例,且该类只提供一个取得其对象实例的方法
①饿汉式
构造器私有化
类的内部创建对象
向外暴露一个静态的公共方法
②懒汉式
创建对象时先声明
后在方法内创立
只有当用户使用getxx方法时,才返回对象,后面再次调用时,会返回上次创建的对象
根本区别就是 两者创建对象的时机不同
因此饿汉式不存在线程安全问题,懒汉式则有线程安全问题
3 final关键字
可以修饰类 属性 方法 局部变量
不希望类被继承时
不希望类被继承时,不希望父类某个方法被子类覆盖/重写
不希望类的某个属性被修改
不希望某个局部变量被修改
final修饰的属性又叫常量
final修饰的属性在定义时就必须赋初始值,并且不能再修改,赋值的位置必须是如下之一
①定义时
②构造器中
③代码块中
如果final修饰的属性是静态的
①定义时
②静态代码块中 不能在构造器中赋值(静态的优先级高于构造器)
final类虽然不能被继承,但可以实例化对象
如果类不是final类,但是有final方法,该方法虽然不能被重写,但是可以被继承
final不能修饰构造器
如果一个类已经是final类,方法就没必要final了
final和static往往搭配使用 效率更高 底层编译器做了优化处理