一、局部代码块 构造代码块 静态代码块 同步代码块(多线程)
局部代码块:方法中 限定生命周期 同一类同一方法的多个代码块 执行是自上而下
构造代码块:类中方法外 创建对象时调用 构造代码块和构造方法存在时 创建对象时 先执行构造代码块 代码块自上而下 然后再执行构造方法
静态代码块:类中方法外 加static 优先其他代码块之前 静态代码块--局部代码块--构造代码块--构造方法 在加载的时候执行 只执行一次
总结: 静态代码块--局部代码块--构造代码块--构造方法
二、继承的好处:
1、提高了代码的复用性 看一看父类
2、提高了代码的维护性 只需要修改父类的内容
3、让类与类之间产生了继承关系,为了后面多态做铺垫(要有继承才能有多态)
继承的坏处:
1、类的耦合性增强了。(内聚)
开发的原则: 低耦合,高内聚
耦合:类与类之间的关系
内聚:类自己本身可以完成的事情
三、
子类不能继承父类私有成员变量
子类不能继承父类私有成员方法
四、继承与成员变量之间的关系:
// 1、当子类中的成员变量与父类中的成员变量名字一样的时候
// 查找:(就近原则)
// 1)先在方法的局部范围内进行查找,如果找到就返回
// 2)如果在方法局部范围找不到,去本类中成员位置上查找,如果找到就返回
// 3)如果在中成员位置上找不到,去父类中成员位置上查找,如果找到就返回
// 4)如果在父类中成员位置上找不到,报错。
// 2、当子类中的成员变量与父类中的成员变量名字不一样的时候,使用什么变量名,就访问谁
//
//
// *****就近原则输出
五、面试题:this关键字与super关键字的使用区别?
// this代表的是调用该类的当前对象
// super代表的是父类存储空间的标识(父类的引用,可以操作父类的成员)
//
// 怎么用呢?
// 1、访问成员变量
// this.成员变量 访问的是本类中的成员变量
// super.成员变量 访问的是父类中的成员变量
// 2、访问构造方法
// this(...)
// super(...)
// 3、访问成员方法
// this.成员方法()
// super.成员方法()
六、继承与构造方法的关系:
// 1、要想初始化子类,必选先初始化父类
// 2、为什么?
// 因为子类会继承父类的数据,甚至可能会使用父类的数据
// 所以在子类初始化之前,一定会先完成父类的初始化
//
// 注意:
// 每个子类的构造方法的第一句话默认是super().
//
//
// 每个子类构造方法默认super() 子类初始化之前一定完成父类初始化
七、子类的方法名能不能和父类方法的声明一样?
如果子类的方法声明与父类的方法声明一样,这样的现象叫做方法的重写。
重写现象是发生在继承的关系中。
面试题:
重写与重载的区别:
重写是发生在继承的关系的关系中,重载是发生在本类中。
重载是方法名一致,参数列表不一致就是重载。
重写是方法名,参数列表,返回值都一样,实现不一样,叫方法的重写。
重载的英文单词:overload
重写的英文单词:override
生活中有哪些重写的案例?
水杯--保温杯
八、一个类的初始化过程:
1、栈开辟空间
2、堆开辟空间给对象
3、成员变量的值是系统默认值
4、成员变量显式赋值
5、构造方法赋值