Day07:始祖巨人

在学习Java继承的部分时,就想到进击巨人的设定,九大巨人的能力只要被其他人吃掉,能力就会被传承过去,不觉得很像Java的类别继承吗哈哈。

不过Java更复杂了一点,因为继承不会只有单线,而是像树状图般开枝散叶,其中最顶端的源头就是Object类别。

我们知道在宣告变数时,可以用父类别宣告型态,实际装入的实例只要是这个父类别的子类别,都可以装进来:

Number num = new Integer(10);

而Object为最源头类别的意思,就是只要宣告为Object的变数,他能够装进一切的实例,甚至是基本型别:

Object num = new Integer(10);
Object primitive = 10;

作为始祖类别还有一个实质上的意义,那就是所有实例都继承了Object类别中定义的方法,可以直接呼叫使用。这些方法是必须要认识一下的:

  • clone()
    可以拷贝物件至新的Heap Memory,返回Object型态,但object内部的field如果也是Heap Memory的参考,那就是直接照搬地址值,所以算是浅拷贝。
  • equals(Object obj)
    定义如何知道两个物件是否相等的方法,返回boolean。
  • finalize()
    在物件即将要被垃圾回收机制(garbage collector)回收前,所呼叫的方法。所以若有甚麽事情希望在被垃圾回收前执行,就可以覆写这个方法来实作。
  • getClass()
    返还Class类别,代表该变数的型态。
  • hashCode()
    返回int型态,代表该物件的hash code值。
  • notify()
    在有执行绪设计的程序中使用,可以通知此物件等待集中的随机一个执行绪。
  • notifyAll()
    在有执行绪设计的程序中使用,可以通知此物件等待集中的所有执行绪。
  • toString()
    平常使用的System.out.println(Object x),此方法实作中实际就是呼叫x.toString(); 可以在定义类别时覆写为自己想要的代表文字。
  • wait()
    在有执行绪设计的程序中使用,让当前的执行绪进入等待集。
  • wait(long timeout)
    在有执行绪设计的程序中使用,让当前的执行绪进入等待集,并等待timeout毫秒的时间後自动离开等待集。
  • wait(long timeout, int nanos)
    在有执行绪设计的程序中使用,让当前的执行绪进入等待集,并等待1000000*timeout+nanos 奈秒(nanosecond)的时间後自动离开等待集。

其中最常用到的2个方法是equals(Object obj)、hashCode()和toString();只要有任何程序会用到比较2个物件是否相等时,就会预设去呼叫equals及hashCode,这已经是Java程序的公认规则了,所以不管是官方API或者我们自己下载引用的第三方套件,这些套件的原始码一定都是呼叫物件的equals和hashCode来进行物件实例相等与否的判断,原因也很明确,因为Object类别的这2个方法是所有Java实例一定会有的方法。
toString()就比较单纯了,它就是我们常用的System.out.println()方法底层原始码所呼叫的方法,如果我们今天要System.out.println(一个物件),那底层程序就是呼叫这个物件的toString()方法得到代表这个物件的字串,然後印给我们看。


<<:  20.移转 Aras PLM大小事-自制快速新增专案工作产出文件

>>:  Day20 ( 中级 ) 拉不走的弹力球

Day11 - Google Kubernetes Engine(GKE) 轻松架起 k8s 环境

前言 要学习 DevOps 的进阶技术,Kubernetes 概念必不可少,但在本地端安装 Kube...

【Day 9】预训练任务大改:Splinter在QA任务上的成功尝试

BERT系列的预训练模型一个个出,RoBERTa、XLNet、DeBERTa等等一个比一个更能打,刷...

13 高中竞赛程序活动懒人包

要从新手入门程序其实很困难,若没有学长姐直接带领的话很容易无法厘清方向。以下的资讯通常是各校资讯领域...

[量化投资] 运用python量化投资平台backtrader 实现ETF动量资产配置回测

策略发想: 运用 两档两档台湾ETF 006208与00895 来进行投资组合建构 该策略使用 商品...

第五章

依照之前介绍的内容都是属於在Hostinger提供的功能面,当然还有许多细项的功能或建置时会用到的,...