美文网首页
Java基础-Object类

Java基础-Object类

作者: 若一爸爸 | 来源:发表于2019-02-28 16:47 被阅读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();
        }
    }
    

    相关文章

      网友评论

          本文标题:Java基础-Object类

          本文链接:https://www.haomeiwen.com/subject/utqkuqtx.html