`

java.lang.Object类 方法(转)

 
阅读更多
Object类的方法



构造方法:public Object()
在Object的源代码中并没有Object的构造方法,而是采用了java内置的默认构造方法。即在编译时由编译器完成这项工作。

值得注意的是在Object源码的开始,有这样一段:



    private static native void registerNatives();

    static {

        registerNatives();

    }



使用JNI特性(有其他语言实现这个功能)来做的这样一个方法,这个方法由Java虚拟机在创造对象时调用,其功能是初始化一个对象:分配内存空间,定义变量,产生this指针等等。



紧接着下面的静态代码块(当该类被实例化、继承、构造方法调用时都优先执行该代码块):也就是说,java中所有代码执行前都要执行这一个JNI实现的方法。



public final native Class<?> getClass();
native方法,返回当前对象的运行时类。(运行时类是指在程序运行时所确定的类型)

public native int hashCode();
native方法,返回对象的hash码值,支持此方法是为了提供hash表的性能。

这里需要特别注意:

在object类中,一般情况下不同的实例对象调用hashCode方法返回不用的哈希码值,但当对象数量太多时就会出现重复。所以不建议使用比较哈希码值的方法来判断实例对象是否同一。



public boolean equals(Object obj)
源码如下:

public boolean equals(Object obj) {

   return (this == obj);

}

可以发现,此处使用了关系运算符"=="所判断的是实例对象而不是实例对象的取值.这里我们不难推测关系运算符判断引用数据类型都是从实例对象出发的。

其实就是,Object中的equals方法等价于”==”操作。当继承类复写了equals方法时才会有equal()与”==”不等的说法。

equals()方法需要具有如下特点:

u  自反性(reflexive):任何非空引用x,x.equals(x)返回为true。

u  对称性(symmetric):任何非空引用x和y,x.equals(y)返回true当且仅当y.equals(x)返回true。

u  传递性(transitive):任何非空引用x和y,如果x.equals(y)返回true,并且y.equals(z)返回true,那么x.equals(z)返回true。

u  一致性(consistent):两个非空引用x和y,x.equals(y)的多次调用应该保持一致的结果,(前提条件是在多次比较之间没有修改x和y用于比较的相关信息)。

u  约定:对于任何非空引用x,x.equals(null)应该返回为false。

  并且覆写equals()方法时,应该同时覆写hashCode()方法,反之亦然。





protected native Object clone() throws CloneNotSupportedException
native方法,创建并且返回该对象的一个副本。要调用这个方法必须实现cloneable接口。该方法的注释有这样一个描述:

x.clone() != x

x.clone().getClass() == x.getClass()

x.clone().equals(x)

都为真



notify()方法
方法申明如下:

public final native void notify ();

唤醒在此对象监视器上等待的单个线程。如果所有线程都在此对象上等待,则会选择唤醒其中一个线程。选择是任意性的,并在对实现做出决定时发生。线程通过调用其中一个 wait 方法,在对象的监视器上等待。

notifyAll()方法
方法申明:

public final native void notifyAll();

唤醒在此对象监视器上等待的所有线程。线程通过调用其中一个wait 方法,在对象的监视器上等待。





wait(long timeout)方法
源码:

public final native void wait(long timeout) throws InterruptedException;

在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。

也就是说wait方法要在其他线程调用对象的 notify方法或notifyAll方法或超过指定的时间量前调用才有意义。



9. String toString()方法

源码如下:

public String toString() {

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

    }

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



10. protected void finalize() throws Throwable

源码:



注释说的是:当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。子类重写 finalize 方法,以配置系统资源或执行其他清除。

也就是说:

子类如果想在释放该对象的同时释放掉其他对象的话就重写该方法,但要注意如释放的对象仍然有引用的话容易出现错误,抛出异常
分享到:
评论

相关推荐

    java.lang.IllegalArgumentException Cannot format given Object as a Date

    java.lang.IllegalArgumentException Cannot format given Object as a Date

    WebLogic错误 java.lang.AssertionError: Registered more than one

    weblogic日志报如下错误原因及解决方法: WebLogic Server 9.2 Repeatedly Throws: java.lang.AssertionError: Registered more than one instance with the same objectName

    Java总结篇系列:java.lang.Object

     Java作为一个庞大的知识体系,涉及到的知识点繁多,本文将从Java中基本的类java.lang.Object开始谈起。  Object类是Java中其他所有类的祖先,没有Object类Java面向对象无从谈起。作为其他所有类的基类,Object...

    java.lang包.ppt

    了解 java.lang 包 掌握包装类 掌握String 和 StringBuffer 类 运用以下类的方法: Math Class Object

    java jdbc帮助类 v1.0 自带连接池

    boolean delete(java.lang.String sql, java.util.Map&lt;java.lang.Integer,java.lang.Object&gt; elements) 根据传入的参数删除单条记录的方法 boolean delete(java.lang.String sql, java.lang.Object[] elements)...

    在Java中异常分析

    java.lang.Object java.lang.Throwable java.lang.Exception java.lang.RuntimeException java.lang.ArithmeticException 当出现异常的运算条件时,抛出此异常。  这个异常的解释是 "数学运算异常 ",...

    jdbc 帮助类 java 自带连接池 v1.01

    boolean delete(java.lang.String sql, java.util.Map&lt;java.lang.Integer,java.lang.Object&gt; elements) 根据传入的参数删除单条记录的方法 boolean delete(java.lang.String sql, java.lang.Object[] elements)...

    java.lang.object源码-finalize-:个人博客(http://bit.ly/javafinalize)上java.lang

    java.lang.object原始码最终不推荐使用java.lang.Object.finalize() 我的博客文章中的示例的Gradle源代码存储库。 在Linux Mint(SUSE Linux)上构建和测试。 由于gradle当前不支持Java 11,因此可以使用标准Java...

    javax.activation.UnsupportedDataTypeException: no object DCH for MIME type

    在Oracle 11.2.0.4中调用 javax.mail 发送邮件时...EXEC dbms_java.grant_permission( '&lt;your_schema_please_change&gt;','SYS:java.lang.RuntimePermission', 'setContextClassLoader', '' ); 第二步:解决方案看文档中。

    java源码阅读之java.lang.Object

    主要介绍了java源码阅读之java.lang.Object,具有一定借鉴价值,需要的朋友可以参考下

    java.lang包介绍

    提供利用 Java 编程语言进行程序设计的基础类。最重要的类是 Object(它是类层次结构的根)和 Class(它的实例表示正在运行的应用程序中的类)。

    CRASH问题:java.lang.NullPointerException

    java.lang.NullPointerException: Attempt to invoke virtual method ‘void android.widget.ImageView.setImageResource(int)’ on a null object reference 今天在家练习ListView的时候,遇到一个java.lang....

    dubbo-monitor-simple.zip

    dubbo-monitor监控中心,基于alibaba dubbo.jar开发,解决Decode rpc invocation failed: expected map/object at java.lang.String (Ljava/lang/String)、com.alibaba.dubbo.common.URL' could not be instantiated...

    JAVA之Object类所有方法

    java.lang.Object下的各种方法

    北大青鸟JAVA培训教程-java.lang包

    学习目标 了解 java.lang 包 掌握包装类 掌握String 和 StringBuffer 类 运用以下类的方法: Math Class Object

    stuts2.2_API文档

    java.lang.Object com.opensymphony.xwork2.ActionContext (implements java.io.Serializable) org.apache.struts2.ServletActionContext (implements org.apache.struts2.StrutsStatics) org.apache.struts2....

    oaid_sdk_1.2.1资源包及说明

    java.lang.UnsatisfiedLinkError: No implementation found for int com.bun.miitmdid.e.a() (tried Java_com_bun_miitmdid_e_a and Java_com_bun_miitmdid_e_a__) 下面这个异常,多半是由于没有调用System....

    Beginning iOS 6 Development Exploring the iOS SDK SourceCode

    Beginning iOS 6 Development Exploring the iOS SDK SourceCode

    Java基础知识点总结.docx

    Array方法类汇总 304 Java数组与集合小结 305 递归 309 对象的序列化 310 Java两种线程类:Thread和Runnable 315 Java锁小结 321 java.util.concurrent.locks包下常用的类 326 NIO(New IO) 327 volatile详解 337 ...

    JAVA_API1.6文档(中文)

    java.lang.reflect 提供类和接口,以获得关于类和对象的反射信息。 java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java....

Global site tag (gtag.js) - Google Analytics