`

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编程中,`java.lang.IllegalArgumentException` 是一个标准的运行时异常,它通常表示一个方法接收到的参数值不在预期范围内或者不合法。当尝试将一个无法转换为日期的对象格式化时,就会抛出"Cannot format ...

    Java.lang.reflect 包下常用的类及方法简介

    在Java编程语言中,`java.lang.reflect`包是核心库的一部分,它提供了运行时访问类、接口、字段和方法的能力。这个包对于理解和操作对象的动态特性至关重要,尤其是在实现反射机制时。反射允许我们在程序运行期间...

    java.lang.runtimeexception unexpected subelement

    在Java编程中,`java.lang.RuntimeException` 是一个非检查异常(unchecked exception),它表示程序运行时出现的不正常情况。通常,这类异常是由于程序员的错误或代码逻辑的疏忽造成的,例如类型转换错误、空指针...

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

    Caused by: java.lang.RuntimeException: javax.management.remote.JMXServerErrorException: java.lang.AssertionError: Registered more than one instance with the same objectName : com.bea:Name=wl04,Type=...

    java.lang包介绍

    `java.lang`包中最基本的类是`Object`,它是所有类层次结构的根,而`Class`类的实例则代表运行时的类。 `java.lang`包包括以下关键类: 1. **Boolean**: 表示布尔值`true`和`false`。 2. **Long, Short, Byte, ...

    java.lang包

    `Object`类是所有Java类的最终超类,包含所有对象共有的属性和方法,如`equals()`比较两个对象是否相等,`hashCode()`返回对象的哈希码,`toString()`返回对象的字符串表示。 通过理解并熟练使用`java.lang`包中的...

    java.lang.NoSuchMethodException: .getPortClassMap()

    在给出的标题 "java.lang.NoSuchMethodException: .getPortClassMap()" 中,异常指向了 `getPortClassMap()` 这个方法,暗示在程序运行时,尝试访问或调用的这个方法在相应的类中没有被找到。 `getPortClassMap` ...

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

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

    android java.lang.IllegalArgumentException contains a path separator

    在Android开发中,Java编程时常会遇到`java.lang.IllegalArgumentException`异常,这通常表示传入的参数不符合方法的要求。在本例中,错误信息“contains a path separator”提示我们问题可能与路径分隔符有关,这...

    java.lang包.ppt

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

    在Java中异常分析

    - **异常路径**:`java.lang.Object -&gt; java.lang.Throwable -&gt; java.lang.Exception -&gt; java.lang.RuntimeException -&gt; java.lang.IndexOutOfBoundsException -&gt; java.lang.ArrayIndexOutOfBoundsException` ...

    java.lang.ClassNotFoundException: org.jdom.input.SAXBuilder 处理

    当Java程序通过`Class.forName()`方法或者使用`ClassLoader`加载类时,如果在当前的类路径(Class Path)下找不到指定类的`.class`文件,就会抛出这个异常。这可能是由于以下原因: 1. **类路径设置不正确**:确保...

    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.lang.Class类

    Java.lang.Class类 Java.lang.Class类是Java语言中一个非常重要的类,它封装了对象和接口的运行时状态。当Java程序在运行时,Java虚拟机(JVM)会对所有对象进行类型标识,这项信息记录了每个对象所属的类。Class类...

    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...

    java.lang.ClassCastException

    在Java编程中,`java.lang.ClassCastException`是一个运行时异常,通常发生在强制类型转换时,如果尝试将一个对象转换为其非兼容类型时就会抛出。这个异常表明在编译时可能成功的类型转换,在运行时被证明是错误的。...

    java.lang研究

    `Object`类是所有Java类的根,它定义了所有对象共有的行为,如`equals()`、`hashCode()`和`toString()`方法。`System`类提供了系统级的服务,如标准输入、输出流,以及全局变量`out`、`err`和`in`。 `Thread`类是多...

    Java类库复习——java.lang.String

    在Java编程语言中,`java.lang.String`是最重要的类之一,它是所有字符串操作的基础。这个类位于核心类库中,因此无需显式导入即可使用。本文将深入探讨`String`类的一些关键知识点,包括它的特性、构造方法、常用...

Global site tag (gtag.js) - Google Analytics