疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

java中的Object 和Class 类


 

  java中的Object 是所有类的父亲,相信大家都知道吧。java中的Object是所有类的父类,所有对象都是Class的实例。广州软件培训整理了以下内容,分享给大家。

  1. public native int hashCode();

  这是一个native的方法,用C/C++来完成的,返回一个int类型的哈希码,这个hashcode是用来标注这个对象的唯一性的。

  这里doc上有两句话这么描述:

  如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。

  如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不 要求一定生成不同的整数结果。

  有兴趣的同学可以研究一下hash的问题,如果是计算机专业的应该还记得hash是怎么回事!

  2.public boolean equals(Object obj)

  根据上面的句子我们可以知道,equals比较的就是hashcode。

  但是字符串更多是字符串的内容,这是因为字符串覆盖equals方法。所以String和StringBuffer等于是不同的。

  3 . protected native Object clone() throws CloneNotSupportedException;

  clone方法对象的类不能实现cloneable接口,所有的数组都被视为实现接口 Cloneable。否则,此方法会创建此对象的类的一个新实例,并像通过分配那样,严格使用此对象相应字段的内容初始化该对象的所有字段;这些字段的内容没有被自我复制。所以,此方法执行的是该对象的“浅表复制”,而不“深层复制”操作。

  这句话明确的告诉了我们什么叫做浅表复制,和深层复制。对于一些问题的理解很有帮助。

  这里插入一个创建模式:原型模式

  用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.

  就是使用clone()方法完成的。

  4.public String toString() {

  return getClass().getName() + "@" + Integer.toHexString(hashCode());

  }

  返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。

  如果没有重写这个方法,那么返回的就是个classname@hashcode的形式。

  其他的就是3个多线程方法和一个protected的finalize()以及一个private的本地registerNatives方法。

  当然还有一个非常重要的方法:public final native Class getClass();

  这个方法就能返回每个对象的Class对象。也就是该类的类对象。通过这个方法我们就能找得到对象的Class对象并且完成反射。

  另外我们还能通过类的全名:Class.forName("jdbc.oracle.OracleDriver")来实例化类的Class对象。

  或者我们使用 类.class也可以获得Class的实例化对象。