目录
一、Object类
1.前言
当我们创建一个子类继承自一个父类时,子类的构造方法中必须首先初始化父类(即使用super()关键字)。
在上面的代码中我们发现Date并没有继承自任何一个类,为什么在构造方法中使用super()时却没有报错呢?实际上Date继承了一个父类——Object类。
2.概念
object类是java中的root类,所有的类都有继承该类,所有类的对象都要使用Object引用。Object是最底层的基类。
3.object类中的多种方法
object类中也提供了多种定义好的方法,我们需要了解这三个。像wait()、notify()、这样的方法主要是在多线程管理线程时使用。
3.1 toString()方法
toString()方法主要是将对象中的内容转化为字符串输出,打印对象中的内容。
直接使用Object类中定义好的方法,打印结果如下:
一般来说,这样打印并不能实现我们的预期。如果我们要打印当前的时间,就需要将toString方法中的内容修改。像下面这样就符合我们的预期了。
toString()方法使用时,一般都需要子类重写方法的内容,实现自己想要实现的功能。
3.2 equals()方法
“==”是我们常用的判断两个对象是否相等,但是在不同情况下使用==的情况也是不同的。
在内置类型中使用==比较的是对象的内容;在引用类型中使用==比较的是地址。
但是Object类中定义的原始的equals方法也不一定会满足我们的需求。如果我们在引用类型中需要比较对象的值是否相等,在内置类型中想要知道地址是否相等,就需要重写equals方法。
下面的方法是实现引用类型中比较内容:
3.3 hashcode()
hashcode是利用哈希函数计算出在哈希表中的位置。它属于native本地方法,底层是由C/C++实现的。(JDK8 的默认hashCode的计算方法是通过和当前线程有关的一个随机数+三个确定值,运用Marsaglia's xorshift scheme随机数算法得到的一个随机数。)所以判断两个对象的hashcode是否相等的核心就是两个对象是否指向一个地址。
当两个对象中的内容相同时,我们还是期望能让hashcode的值相等。就需要重写hashcode()方法。用两个对象中的成员去计算哈希码,对于内容相同的对象结果一定是相同的。
二、String类
1.前言
在C语言中,字符串不是数据类型,所以使用很不方便。在java中提供了字符串的很多操作方法,有了字符串类型。
2.创建字符串的方法