object类的使用
object类是所有Java类的根父类。
如果在定义Java类中没有使用extends关键字指明父类,默认父类都是java.lang.object类。
在文档中写明object类在jdk1.0时就作为所有类的父类来使用。
内部没有定义多余的属性。
只有一个无参构造器。
但是有很多经常使用的方法,本文主要阐述这些常用方法。
clone()
克隆方法
语法:
对象类型 对象名 = (对象类型) 克隆对象名.clone();
Animal a2 = (Animal) a1.clone;
animal 是一个假象类,我们最开始实例化一个叫做a1的Animal对象,然后使用clone方法克隆一个叫做a2的Animal对象。修改a2的属性值不会影响a1。类似于深拷贝。
equals()
比较字符串
讲述equalse的一篇文章
finalize()
回收对象。
不建议使用这个方法,应该让Java自身的垃圾回收机制去回收。
强制垃圾回收前会自动调用该方法。
getclass()
查看自己是哪个类构造的。
hashcode()
返回当前对象的hash值
tostring
package com.advan.equal;
import java.util.Date;
public class ToStringTest {
public static void main(String[] args) {
Customer cust1 = new Customer("Tom",10);
System.out.println(cust1); // com.advan.equal.Customer@15db9742
System.out.println(cust1.toString()); // com.advan.equal.Customer@15db9742
// 他们输出的结果一样,然后我们来看一下toString的源码
// public String toString() {
// return getClass().getName() + "@" + Integer.toHexString(hashCode());
// }
// 他是由三部分拼接而成:类名+@+虚拟内存地址 虚拟内存地址是在jvm中分配的,不是真实的
// 然后比较一下string
// 然后我们重写一下Customer类的toString方法。
String str = new String("haha");
System.out.println(str); // haha
System.out.println(str.toString()); // haha
// public String toString() {
// return this;
// }
// String类的toString方法直接将对象本身返回
Date date = new Date();
System.out.println(date);
System.out.println(date.toString());
// public String toString() {
// // "EEE MMM dd HH:mm:ss zzz yyyy";
// BaseCalendar.Date date = normalize();
// StringBuilder sb = new StringBuilder(28);
// int index = date.getDayOfWeek();
// if (index == BaseCalendar.SUNDAY) {
// index = 8;
// }
// convertToAbbr(sb, wtb[index]).append(' '); // EEE
// convertToAbbr(sb, wtb[date.getMonth() - 1 + 2 + 7]).append(' '); // MMM
// CalendarUtils.sprintf0d(sb, date.getDayOfMonth(), 2).append(' '); // dd
// CalendarUtils.sprintf0d(sb, date.getHours(), 2).append(':'); // HH
// CalendarUtils.sprintf0d(sb, date.getMinutes(), 2).append(':'); // mm
// CalendarUtils.sprintf0d(sb, date.getSeconds(), 2).append(' '); // ss
// TimeZone zi = date.getZone();
// if (zi != null) {
// sb.append(zi.getDisplayName(date.isDaylightTime(), TimeZone.SHORT, Locale.US)); // zzz
// } else {
// sb.append("GMT");
// }
// sb.append(' ').append(date.getYear()); // yyyy
// return sb.toString();
// }
// Date的toString虽然看起来很复杂,但是最后返回的是 sb.toString();
// 而 sb 的声明是: StringBuilder sb = new StringBuilder(28); 也是一个 StringBuilder 对象
// 也就是Date类的toString 只是得到当前时间后经过了一些美化再原样输出。
}
class Customer{
String name;
int age;
public Customer(String name,int age){
this.name = name;
this.age = age;
}
// 在我们定义的类里面重写一下equals方法。
@Override // 表示重写
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof Customer) {
Customer ancust = (Customer)anObject;
return this.name.equals(ancust.name) && this.age == ancust.age;
}
return false;
}
@Override
public String toString() {
return "name:"+this.name+"age:"+this.age;
}
}
notify()/notifyAll()/wait()
涉及线程