2020.10.20(27~30)

27.写出java.lang.Object类的六个常用方法

  • public boolean equals(java.lang.Object) 比较对象的地址值是否相等,如果子类重写,则比较对象的内容是否相等。
  • public native int hashCode()获取哈希码
  • public java.lang.String toString() 把数据转变成字符串
  • public final native java.lang.Class getClass() 获取类结构信息
  • protected void finalize() throws java.lang.Throwable垃圾回收前执行的方法
  • protected native Object clone() throws java.lang.CloneNotSupportedException 克隆
  • public final void wait() throws java.lang.InterruptedException多线程中等待功能
  • public final native void notify() 多线程中唤醒功能
  • public final native void notifyAll() 多线程中唤醒所有等待线程的功能

28.权限修饰符的区别

同一个类 同一个包中 子类 所有类
private *
default * *
protected * * *
public * * * *
  • 类的访问权限只有两种:
    • public公共的 可被同一项目中所有的类访问。 (必须与文件名同名)
    • default 默认的 可被同一个包中的类访问
  • 成员(成员变量或成员方法)访问权限共有四种:
    • public 公共的 可以被项目中所有的类访问。(项目可见性)
    • protected 受保护的 可以被这个类本身访问;同一个包中的所有其他的类访问;被它的子类(同一个包以及不同包中的子类)访问。(子类可见性)
    • default 默认的被这个类本身访问;被同一个包中的类访问。(包可见性)
    • private 私有的 只能被这个类本身访问。(类可见性)

29.继承条件下构造方法的执行过程

  • 继承条件下构造方法的调用规则如下:
    • 情况1:如果子类的构造方法中没有通过super显式调用父类的有参构造方法,也没有通过this显式调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法。在这种情况下,写不写“super();”语句,效果是一样的。
    • 情况2:如果子类的构造方法中通过super显式调用父类的有参构造方法,那将执行父类相应构造方法,而不执行父类无参构造方法。
    • 情况3:如果子类的构造方法中通过this显式调用自身的其他构造方法,在相应构造方法中应用以上两条规则。
    • 特别注意的是,如果存在多级继承关系,在创建一个子类对象时,以上规则会多次向更高一级父类应用,一直到执行顶级父类Object类的无参构造方法为止。

30. ==equals的区别和联系

  • “==”是关系运算符,equals()是方法,同时他们的结果都返回布尔值;
  • “==”使用情况如下:
    • 基本类型,比较的是值
    • 引用类型,比较的是地址
    • 不能比较没有父子关系的两个对象
  • equals()方法使用如下:
    • 系统类一般已经覆盖了equals(),比较的是内容。
    • 用户自定义类如果没有覆盖equals(),将调用父类的equals(比如是Object),而Object的equals的比较是地址(return (this == obj);)
    • 用户自定义类需要覆盖父类的equals()
  • Object的==和equals比较的都是地址,作用相同
posted @ 2020-10-20 08:54  xiaokai9527  阅读(36)  评论(0)    收藏  举报