目录
JDK库的根类:Object
/*
因为这些方法都是子类通用的,任何一个类默认继承Object,就算没有直接继承,最终也会间接继承
Object类中常用的方法:
如何查找:
1.查阅源代码(比较麻烦)
2.查阅Java的类库的帮助文档
API(Application Program interface):应用程序编程接口,整个JDK的类库就是一个JavaSE的API,每个API都会配置一套API帮助文档,就是sun公司提前写好的类库
常用方法:
protected Object clone() //负责对象克隆
boolean equals (Object obj) //判断两个对象是否相等
int hashCode() //获取对象哈希值
protected void finalize() //垃圾回收器负责调用的方法
String toString() //将对象转化为字符串形式
关于Object类中的toString()方法(返回值为String类型字符串)
源代码:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
源代码上toString()方法默认实现:
类名+@+对象的内存地址转换为十六进制的形式
作用:调用这个方法可以将这个java对象转换为字符串形式
建议所有的子类都去重写toString()方法
关于关于Object类中的equals()方法
源代码:
public boolean equals(Object obj) {
return (this == obj);
}
源代码上toString()方法默认实现:
默认实现上调用的还是==,而==不能判断两个java对象是否相等,Object类中的equals方法不够用,则需要重写equals方法
作用:以后编程的过程当中,都要通过equals方法来判断两个对象是否相等
//JAVA语言中的字符串String,重写了toString和equals方法
String类已经重写equals方法,比较两个字符串不能用==,必须使用equals方法,
String类已经重写toString方法。
//Java中基本数据类型的数据是否相等采用==,Java中所有引用数据类型的数据统一采用equals方法来判断
equals方法的深层理解:
//只要不是类中自带的重写equals方法,都要在类中重写equals方法,防止一个类中还有其他引用数据类型,
需要在里面创建对象,此时重写equals方法,有效避免比较引用类中的对象地址,从而比较内容
//关于Object类中的finalize方法
源代码;
protected void finalize() throws Throwable { }
finalize方法只有一个方法体,里面没有代码,用protected关键字修饰
这个方法不需要程序员手动调用,JVM垃圾回收器自动调用,只需要重写方法即可
当一个对象即将被垃圾回收器回收的时候,垃圾回收器负责调用finalize方法,同样也是为程序员准备了一个时机:垃圾回收时机
static{}静态代码块也准备了一个时机:类加载时机
//关于hashCode方法
源代码:
public native int hashCode();
这个方法不是抽象方法,带有native关键字,底层调用c++程序
作用:返回哈希码
实际上就是一个Java对象的内存地址,经过哈希算法,得出的一个值
所以hashCode方法的执行结果可以看成是一个Java对象的内存地址
*/
内部类:
在类的内部又定义了一个新的类
/*
内部类分为:
1.实例内部类:类似于实例变量
2.静态内部类:类似于静态变量
3.局部内部类:类似于局部变量
4.匿名内部类(局部内部类的一种):用的最多
本节代码没讲到匿名内部类
*/