任何一个类默认继承Object。就算没有直接继承,最终也会间接继承。
目录
一、API:
应用程序编程接口。(Application Program Interface)
整个JDK的类库就是一个javase的API。
每一个API都会配置一套API帮助文档。
二、toString()方法
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
- 类的toString()方法是需要重写
- 重写规则:简单、明了
- System.out.println(引用变量名); 这里会自动调用“引用”的toString()方法。
- String类是SUN写的,toString方法已经重写了。
//String类的toString()方法
public String toString() {
return this;
}
三、equals()方法
public boolean equals(Object obj) {
return (this == obj);
}
- 类的equals方法需要重写,因为Object中的equals方法比较的是两个对象的内存地址,应该根据自己的规则比较,所以需要重写。
- 重写规则:根据对象的成员来定
- 注意:重写equals方法的时候要彻底。
基本数据类型比较 | 对象和对象比较 |
---|---|
== | 调用equals方法 |
- String类是SUN编写的,String类的equals方法重写了。
- 以后判断两个字符串是否相等,最好不要使用==,要调用字符串对象的equals方法。
//String类的equals()方法
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
四、finalize()方法
protected void finalize() throws Throwable { }
- 当垃圾收集确定没有对对象的引用时,由对象上的垃圾收集器调用。子类重写 finalize方法配置系统资源或执行其他清理。
- 对象被清理前:对象“遗嘱”
- 对比:static{ }:类加载就加载
- finalize()方法的使用
五、hashCode()方法
public native int hashCode();
-
返回一个对象的哈希代码值。
-
由类Object定义的 hashCode方法 返回不同的对象不同的整数。(这通常是通过将该对象的内部地址转换成一个整数)
-
如果根据equals(Object)方法两个对象是相等的,那么调用hashCode方法这两个对象必须产生相同的整数结果。 这说明了对象的 “==” 是比较相同的地址
六、静态代码块
private static native void registerNatives();
static {
registerNatives();
}
七、getClass()方法
public final native Class<?> getClass();
- 返回该 Object运行时类。
- getClass()方法是获得调用该方法的对象的类;getClass().getName()可以得到该类的路径;
- 通过getClass()方法得到该对象类Class后,可以通过Class获取这个类中的相关属性和方法;
- java中getClass()方法简介
八、clone()方法
protected native Object clone() throws CloneNotSupportedException;
- 创建并返回此对象的副本。
- 详解Java中的clone方法 – 原型模式
- Java对象克隆——浅克隆和深克隆的区别
- java clone 深拷贝、浅拷贝 的两种实现–override clone() 和 Serializable
九、关于线程的方法
//唤醒在此对象监视器上等待的单个线程
public final native void notify();
//唤醒在此对象监视器上等待的所有线程
public final native void notifyAll();
//线程从处于等待状态,直到其他线程调用此对象的notify() 方法和notifyAll() 方法,或者超过指定的时间量。时间精度是毫秒级。
public final native void wait(long timeout) throws InterruptedException;
//使当前线程等待-->另一个线程调用此对象的方法或 notify() notifyAll()方法,或者其他某个线程中断当前线程,或一定量的实际时间已经过去了。
public final void wait(long timeout, int nanos) throws InterruptedException {
if (timeout < 0) {
throw new IllegalArgumentException("timeout value is negative");
}
if (nanos < 0 || nanos > 999999) {
throw new IllegalArgumentException(
"nanosecond timeout value out of range");
}
if (nanos > 0) {
timeout++;
}
wait(timeout);
}
//线程从处于等待状态,直到其他线程调用此对象的notify() 方法和notifyAll() 方法。
public final void wait() throws InterruptedException {
wait(0);
}