Java基础-Object类

2019-02-28  本文已影响0人  若一爸爸

Object是Java所有类的父类,其重要方法包括:

//创建与该对象的类相同的新对象
Object clone()  
//返回一个对象运行时的实例类
Class getClass()    
//返回该对象的字符串表示
String toString()   
//比较两对象是否相等
boolean equals(Object)  
//返回该对象的散列码值
int hashCode()  
//激活等待在该对象的监视器上的一个线程
void notify()   
//激活等待在该对象的监视器上的全部线程
void notifyAll()    
//在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待
void wait() 

一、clone()

clone()方法创建并返回该对象的一个副本,其实现了对象中各个属性的复制,以下两点需要注意:

  1. Object类本身并未实现Cloneable接口,因此实现类需要实现Cloneable接口才能使用clone()方法,否则会抛出 CloneNotSupportedException 异常。
  2. 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();
    }
}
上一篇 下一篇

猜你喜欢

热点阅读