您的位置:首页 > 移动开发 > Objective-C

Object上帝类中方法的那些事儿

2017-03-18 15:32 183 查看
下面是Object类的大致描述图(6大核心,其余的知道就行):

Object

    |-Object()

    |-RegisterNatives() 

    |-getClass() 

    |-hashCode() 

    |-toString()

    |-notify(),notifyAll() 

    |-wait(),wait(long,int);wait(long)

    |-finalize()

    |-clone() 

现在一一介绍一番:

       1,Object()在源码中省略了,说明是默认构造器。

       2,使用RegisterNatives实现JNI(java native interface),即是调用本地方法的一种技术

       3,getClass()是被final修饰本地方法(final native),final意味着任何继承Object或继承Object子类的类都不能重写此方法, 只能调用父类中的该方法, 既然都是调用父类中的方法,故super.getClass()和this.getClass()方法效果是一样的,getClass()方法得到的类名是运行时的类,所以最终得到的还是当前运行类的类名(******)。

       4,hashCode():调用本地原生态代码返回对象的hash编码

       5,toString():将对象表示成字符串

       6,notify(),notifyAll():唤醒在此对象监视器上等待的单个或者所有线程

       7,wait(),wait(long timeout) :导致当前的线程等待,直到其他线程调用此对象的notify( ) 方法或 notifyAll( ) 方法,或者指定的时间过完。

       8,finalize:Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。 但是在Java中很不幸,如果内存总是充足的,那么垃圾回收可能永远不会进行,也就是说filalize()可能永远不被执行,显然指望它做收尾工作是靠不住的。那么finalize()究竟是做什么的呢?它最主要的用途是回收特殊渠道申请的内存。Java程序有垃圾回收器,所以一般情况下内存问题不用程序员操心。但有一种JNI(Java
Native Interface)调用non-Java程序(C或C++),finalize()的工作就是回收这部分的内存。

      9.clone():克隆(拷贝)对象,注意有浅拷贝和深拷贝之分

  特别说明:

        1,红色倾斜标注的方法为本地方法

        2,wait和notify的理解与使用 可以参考:http://blog.csdn.net/jianiuqi/article/details/53448849

        3,详解clone():http://blog.csdn.net/zhangjg_blog/article/details/18369201



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: