访问修饰符:public、protected、private、friendly(default)
访问级别 访问控制修饰符 同类 同包 子类 不同包
公开的 public √ √ √ √
受保护的 protected √ √ √ --
默认的 无 √ √ -- --
私有的 private √ -- -- --
注:限定修饰词不能用在局部变量上
protected 不能修饰类
public修饰的类,类名必须与文件名一致
面向对象语言的三大特点:封装 继承 多态 (抽象)
封装的作用:
1.提高复用性
实现某一种功能的方法与属性独立保存,可以多调用这部分封装,使代码简洁
2.易维护:因为只需要修改一处代码就可以让多处收益,大大降低维护成本
3.数据隐藏:在Java中配合访问权限修饰符实现数据封装,用来控制封装的资源,可以被 修改和访问的程度,让部分数据资源隐藏,无法从外界直接访问,再让部分数据公开,这些资源有权操作外界无法访问的资源数据,可以代理外界对隐藏的数据操作
4.降低耦合:“高内聚,低耦合” 高内聚 就是类的内部数据操作细节自己完成,不允许外部干涉,编程上就是想对其它类或对象复杂的操作,通过调用目标自身开放接口实现 低耦合 是仅暴露少量的方法给外部使用,尽量方便外部调用 编程上就是不要直接读写其他类或对象的数据 即自己的数据自己管理 自己制定的维护规则,外界以请求的姿态修改或访问数据,能否获取数据修改数据 要看数据资源的持有者的决定
this:指未来调用该代码块的对象实例,该实例可能是调用new构造方法得到的新对象,也可能是调用实例方法的对象实例
本质是aload_0指令,意思是引用数据类型方式 读取栈中第一个局部变量而调用实例方法或构造器的实例对象被作为第一个参数(jvm隐式传参)传入栈的数据区,所以获取的就是调用该方法的对象
this();只能在构造方法中使用,且只能写在第一行,表示调用其他构造方法
重载:方法名相同,参数列表不同
不能通过访问权限、返回值类型、抛出的异常进行重载
方法的异常类型和数目不会对重载进行影响
构造器链问题:
1.构造器环链问题
构造器环链中不能出现闭环问题情况,对造成无限制的递归构造器,无法得到最终结果且可能造成栈溢出问题,所以禁止了这一种写法
2.构造器链的数据初始化赋值时机问题
由末端构造器进行初始化,一般由private修饰
3.构造器链执行中空对象泄露问题
构造器链设计时不管是this()还是super()都不允许将对象作为返回值传递出去