Object是Java所有类的父类,其重要方法包括:
//创建与该对象的类相同的新对象
Object clone()
//返回一个对象运行时的实例类
Class getClass()
//返回该对象的字符串表示
String toString()
//比较两对象是否相等
boolean equals(Object)
//返回该对象的散列码值
int hashCode()
//激活等待在该对象的监视器上的一个线程
void notify()
//激活等待在该对象的监视器上的全部线程
void notifyAll()
//在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待
void wait()
一、clone()
clone()方法创建并返回该对象的一个副本,其实现了对象中各个属性的复制,以下两点需要注意:
- Object类本身并未实现Cloneable接口,因此实现类需要实现Cloneable接口才能使用clone()方法,否则会抛出 CloneNotSupportedException 异常。
- clone()方法在对原始对象进行拷贝时,对基本类型数据是值复制,而对引用类型是进行引用复制,即和拷贝对象指向同一对象,属于浅拷贝,如需实现对象深拷贝需要重写clone()方法。
二、getClass()
该方法返回实例的类型类对象,即Class对象,类似于其他两种方式:
1.Obeject.class
2.Class.forName(String className)
getClass和.class的区别在于前者有多态性,返回的是运行时类型对象,而后者属于静态解析,编译时确定类型信息。
class Car{
}
class Audi extends Car{
}
public static void main(String[] args) {
Car myCar = new Audi();
System.out.println(myCar.getClass());
System.out.println(Car.class);
}
//输出结果
class Audi
class Car
三、toString()
返回对象的string表示,常用于调试,通用的实体抽象基类如下,继承该类即可。
public abstract class BaseBean {
public String toString() {
StringBuffer sb = new StringBuffer();
try {
Class t = this.getClass();
Field[] fields = t.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
field.setAccessible(true);
sb.append("{");
sb.append(field.getName());
sb.append(":");
if (field.getType() == Integer.class) {
sb.append(field.getInt(this));
} else if (field.getType() == Long.class) {
sb.append(field.getLong(this));
} else if (field.getType() == Boolean.class) {
sb.append(field.getBoolean(this));
} else if (field.getType() == char.class) {
sb.append(field.getChar(this));
} else if (field.getType() == Double.class) {
sb.append(field.getDouble(this));
} else if (field.getType() == Float.class) {
sb.append(field.getFloat(this));
} else
sb.append(field.get(this));
sb.append("}");
}
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
}
}
网友评论