为什么80%的码农都做不了架构师?>>>   

object类是类层次的根,每个类都有一个作为父类的Object。所有的对象,包含数组,实现了该类的方法。

final native Class<?> getClass();
    返回该对象运行时的class,返回的Class对象是由代表类的static synchronized方法。实际的结果类型是Class<? extends |X|>  ,|X|在getClass被调用后执行表达式的静态类型擦除,如:下代码段没有类型转换处理:
        Number n = 0;
        Class<? extends Number> c = n.getClass();
    
    final natve int hashCode();
    返回对象的hash code值,为支持hash tables的特性,如通过java.util.HashMap提供
    通常hashCode定义是:
        一个java应用程序执行期间,不论何时,不止一次的对同一对象的调用,hashCode方法必须始终返回相同的整数,在对象被修改没有提供相等比较信息。这个整数不需要保持一致,从一个应用到另一个相同的应用中。
        如果根据equals方法比较2个对象相等,则分别调用2个对象的hashCode方法必须产生相同的整数结果。
        如2个不相等的对象,则分别调用2个对象的hashCode方法产生不同的值。这点不是要求的,然而,程序员考虑为不同对象生成不同hashCode值可以提高hash tables的性能。
    通过Object类定义hashCode方法为不同对象生成不同hashCode值,是合理可行的(通常是转换对象内部地址到一个整数,但这不是java语言实现的)

boolean equals(Object obj)
    表明是否有其他对象”等于“该对象,该方法实现在一个non-null object引用的等价关系:
    自反性:non-null引用的值x,x.equals(x)应该返回true
    对称性:non-null引用的值x、y,当且仅当y.equals(x)为true,则x.equals(y)应该             为true;
    传递性:non-null引用的值x、y、z,如果x.equals(y)为true,y.equals(z)为                true,则x.equals(z)应该为true;
    一致性: non-null引用的值x、y ,多次调用x.equals(y)一致的返回true或false,在对象被修改没有提供相等比较信息;
     任何non-null引用的值x,x.equals(null)应该返回false;
    equals方法为Object实现了最有可能确定对象的等价关系。对于non-null引用的值x、y,当且仅当x和y引用同一个对象(x == y)时,则该方法返回true。注意,通常需要重写该方法,每次重写该方法时,保持通常hashCode定义方法,指出相等对象必须有相等的hashCode值

native Object clone();
    创建并返回此对象的拷贝,拷贝的精度取决于该对象的类。总的意图是,对于任何对象x,这表达式:
        x.clone() != x;//返回true
        x.clone().getClass() == x.getClass();//将返回true,但这些不是绝对要求
    然而,通常x.clone().equals(x) 返回true,但这些不是绝对要求。
    通常约定,返回对象通过调用super.clone方法应该可获取的。如果一个类和它所有的超类(除Object)服从这个约定, x.clone().getClass() == x.getClass();//将返回true
    通常约定,此方法返回的对象应该独立于该对象。为了实现这种独立性,可能需要在该方法返回它之前修改一个or多个返回对象的字段,这意味着,copy任何可变对象(包括内部的”深层结构“)被克隆对象的副本替换对这些对象的引用。如果一个类仅包含原始字段or引用不可变的对象,此时通过clone返回的对象没有字段需要修改。
    若对象的class没有实现Cloneable接口,则抛出CloneNotSupportedException。注意所有的数组被认为是实现了Cloneable接口并且clone方法返回一个数组类型T[],T为任何引用或原始类型。否则,这个方法创建一个该对象类的一个新实例,并初始化所有该对象相关的字段内容,如分配,字段内容没有自己克隆,因此,该方法执行了该对象的”shallow copy“,不是”deep copy“操作

String toString();
    返回对象的字符串表现形式,通常该方法返回该对象的的”文本表示“的一个字符串,结果应该是信息简明,信息表现便于人阅读,建议所有子类重写此方法,返回一个字符串组成类的名称的对象的一个实例,和符号@,和该对象hashCode无符号十六进制的表现形式,既:
getClass().getName() + '@' + Integer.toHexString(hashCode())

final native void notify();
    在对象监控上唤醒一个正在等待的线程,若该对象上任何线程都在等待,选择其中的一个被唤醒,选择是任意的,取决于discretion的实现。一个线程在对象监控上等待,可以通过调用一个wait方法。
    被唤醒的线程将无法继续进行,直到当前线程释放此对象上的锁。被唤醒的线程以常规方式与任何其他可能线程竞争同步对象。如,被唤醒的线程在锁定此对象的下一个线程有不可靠的特权和缺点。
    此方法只能被一个拥有此对象监视器的线程调用,一个线程成为对象监视器的拥有者通过下面3种方法之一:
        通过执行一个同步的该对象的实例方法;
        通过执行一个同步的语句块(同步对象);
        对于Class的对象,通过执行类的synchronized static方法;
    一次只能有一个线程拥有对象监视器,若当前的线程不是对象监视器的拥有者,则抛出IllegalMonitorStateException

final native void notifyAll();
    唤醒对象监视器上所有等待的线程,一个线程在对象监控上等待,可以通过调用一个wait方法。

final native void wait(long timeout);
    使当前线程等待直到另一个线程调用notify/notifyAll方法,或者一个指定的时间已经过去。
    当前线性必须是对象监视器拥有者。该方法使当前线程T为该对象将自己等待,然后放弃此对象上任何和所有的同步请求,线程T在线程调度上将变成disable并处于休眠状态,直到有如下事情发生:
        一些其他的线程为该对象调用notiy方法并且线程T正好是任意选择的线程被唤醒;
        一些其他的线程为该对象调用notiyAll方法;
        一些其他的线程中断了线程T;
        指定的实际时间已过,或多或少。如果timeout为0,不考虑实际时间和线程只是等待通知;
    然后线程T从等待集中移除为该对象和重新进行线程调度。它以常规方式与任何其他可能线程竞争同步对象,一旦它获得了对象的控制,该对象上的所有同步请求将被恢复到原状。这是wait方法被调用根据时间的情况。线程T从调用wait方法调用返回,因此,在wait方法返回,对象同步的状态和线程T状态都精确的到wait方法调用后。
    一个线程也可以不使用notify,interrupted,timing out来唤醒,称”伪唤醒“,然而,这很少发生在实际上,应用必须防范的测试需要被唤醒的线程,且如条件不满足继续等待。换言之,等待总是发生在循环中,如:
        synchronized (obj) {
               while (<condition does not hold>)
                   obj.wait(timeout);
                 ... // Perform action appropriate to condition
        }
    若当前线程被中断在任何线程之前或在其等待期间,则抛出InterruptedException,该异常不抛出知道此对象的锁定状态已经恢复。
    注意wait方法,为该对象将当前线程设置等待,只有这个对象解锁;任何其他对象在当前线程可以同步,线程等待时仍处于锁定。 此方法只能被一个拥有此对象监视器的线程调用。

void finalize()
 调用垃圾收集器在垃圾收集对象确定没有其他对象的引用。子类可重写该方法处理系统资源或执行其他cleanup。
 若jvm已经调用该方法,不再有任何方法通过活动线程来访问这个对象,除非由于准备终结一些其他对象or类采取动作的结果。
 finalize方法可以采取任何操作,包括再次使此对象对其他线程可用;不过,通常其目的是在不可撤销的丢弃对象之前执行清除操作。
 如:表示输入/输出连接的对象的 finalize 方法可执行显式 I/O 事务,以便在永久丢弃对象之前中断连接。
 Object 类的 finalize 方法执行非特殊性操作;它仅执行一些常规返回。Object 的子类可以重写此定义。
 Java 编程语言不保证哪个线程将调用某个给定对象的 finalize 方法。但可以保证在调用 finalize 时,调用 finalize 的线程将不会持有任何用户可见的同步锁定。如果 finalize 方法抛出未捕获的异常,那么该异常将被忽略,并且该对象的终结操作将终止。
 在启用某个对象的 finalize 方法后,将不会执行进一步操作,直到 Java 虚拟机再次确定尚未终止的任何线程无法再通过任何方法访问此对象,其中包括由准备终止的其他对象或类执行的可能操作,在执行该操作时,对象可能被丢弃。
 对于任何给定对象,Java 虚拟机最多只调用一次 finalize 方法。
 finalize 方法抛出的任何异常都会导致此对象的终结操作停止,但可以通过其他方法忽略它。

转载于:https://my.oschina.net/rksi5/blog/226252

初探Object in java相关推荐

  1. Object类 java 1614965390

    Object类 java 1614965390 关于 getClass()方法 演练 hashCode() 方法 toString()方法 例子 一个Hero对象的字符串结果 重写类的方法 打印对象的 ...

  2. SSM框架笔记09:初探Spring——采用Java配置方式

    初探Spring--采用Java配置方式   在上一讲的项目基础上继续.   1.在javaconfig包里创建杀龙任务类SlayDragonQuest package net.hw.spring.c ...

  3. java filesearcher_Java Object Searcher | java内存对象搜索辅助工具

    Java Object Searcher | java内存对象搜索辅助工具 0x01 工具简介 #################################################### ...

  4. JOL(java object layout --java 对象内存布局)

    JOL(java object layout --java 对象内存布局) ⚠⚠⚠本文以java普通对象为切入点,分析java的对象内存布局,数组见文末 maven地址

  5. Error selecting key or setting result to parameter object. Cause: java.sql.SQLSyntaxErrorException

    ## 通用mapper insertSelective方法报语法错误 报错信息如下 Caused by: java.sql.SQLSyntaxErrorException: You have an e ...

  6. java mapstring_ object 遍历_ListMapString,Object使用Java代码遍历以获取String,Object的值...

    List>的结果集怎么使用Java代码遍历以获取String,Object的值? package excel; import java.util.ArrayList; import java.u ...

  7. 初探设计:Java继承何时用?怎么用?

    Writer      :BYSocket(泥沙砖瓦浆木匠) 一.回顾继承 常见的如下: 1.依赖("uses-a") 2.聚合("has-a") 3.继承(& ...

  8. 初探Object Pascal的类(三)

    类的构造函数 Object Pascal中的类有一种特殊的方法叫构造函数. 构造函数是一种用来建立实例类的方法. 构造函数用来初始化任何类成员变量,为类分配所必须的内存,或者做任何其他初始化工作. 在 ...

  9. java语言中声明布尔型_【Java初探02】——Java语言基础

    本篇博文就Java语言的一些基本元素进行一些记录和阐述,主要讲解一下Java语言的一些基本构成元素和Java的主类结构. Java语言基础的大致组成 java主类结构 基本的数据类型 变量与常量 运算 ...

最新文章

  1. linux下载python的es库,Elasticsearch py客户端库安装及使用方法解析
  2. exe4j生成可执行程序的使用方法
  3. 一个跨国银行的敏捷转型案例要点之Agile Center
  4. 更改git远程分支的方法
  5. GridView滚动条
  6. Java06动手动脑
  7. php ora-12154,ORA-12154 和 TNS-03505 监听错误的解决方法
  8. Linux内存带宽的一些测试笔记
  9. 技术选型都做不好,难怪自动化做得这么费力...
  10. html 转盘抽奖开发,html 大转盘抽奖
  11. Elasticsearch语法知多少之Match query
  12. 计算机桌面保护时间的调整显示,电脑屏幕显示时间设置_电脑屏幕的显示时间...
  13. 202209-GitModel Task05-分类分析
  14. 学习python:练习2.投资理财计算器
  15. 科学计算机后盖换电池,图吧小白教程 篇二十二:手把手教你给手机换电池(拆机)...
  16. Linux nginx 项目部署
  17. fuse的安装与使用
  18. 58同城2015校招笔试、一面、二面经历
  19. 远程实时监控搭建_远程学习的烦恼正在实时展开
  20. 【爬虫】小说筛选爬取模板

热门文章

  1. window 自动安装MySQL数据库_windows安装MySQL数据库
  2. es中的高效文件读取方式
  3. VB 二进制数据读写实例
  4. 10 个最酷的 Linux 单行命令
  5. 超值买卖?惠普企业收购头部超算制造商Cray,仅13亿美元
  6. 赠票福利 | 2018人工智能计算大会报名开启:算力爆燃,AI进化
  7. 雷林鹏分享:使用Yaf Codes Generator工具构建YAF测试环境
  8. Java最大值和最小值
  9. ylbtech-Bill(发票管理)-数据库设计
  10. UNIX/Linux系统取证之信息采集案例