当前位置: 首页 > news >正文

永顺县建设局网站源码之家关闭了

永顺县建设局网站,源码之家关闭了,酒店网站建设注意什么,建设部四库一平台查询网站Object 概述 Object类是所有类的基类——java.lang.Object。 Object类是所有类的基类,当一个类没有直接继承某个类时,默认继承Object类Object类属于java.lang包下,此包下的所有类在使用时无需手动导入,系统会在程序编译期间自动…

Object

概述

Object类是所有类的基类——java.lang.Object。

  • Object类是所有类的基类,当一个类没有直接继承某个类时,默认继承Object类
  • Object类属于java.lang包下,此包下的所有类在使用时无需手动导入,系统会在程序编译期间自动导入。

Object类有七个native方法:registerNatives()、getClass()、hashCode()、clone()、notify()、notifyAll()。

源码解析

/*** native 方法,用于返回当前运行时对象的Class对象,使用了final关键字修饰,故不允许子类重写。*/
public final native Class<?> getClass()
/*** native 方法,用于返回对象的哈希码,主要使用在哈希表中,比如JDK中的HashMap.
*/
public native int hashCode()
/**
* 用于比较两个对象的内存地址是否相等。
*/
public boolean equals(Object obj)
/**
* naitive 方法,用于创建并返回当前对象的一份拷贝。
*/
protected native Object clone() throws CloneNotSupportedException
/**
* 返回类的名字实例的哈希码的16进制的字符串。
*/
public String toString()
/**
* native方法,并且不能重写。唤醒一个在此对象监视器上等待的线程(监视器相当于就是锁的概念)。如果有多个线程在等待只会任意唤醒一个。
*/
public final native void notify()
/*** native 方法,并且不能重写。跟 notify 一样,唯一的区别就是会唤醒在此对象监视器上等待的所有线程,而不是一个线程。*/
public final native void notifyAll()
/**
* native方法,并且不能重写。暂停线程的执行。注意:sleep方法没有释放锁,而wait方法释放了锁,timeout是等待时间。
*/
public final native void wait(long timeout) throws InterruptedException
/*** 多了 nanos 参数,这个参数表示额外时间(以毫微秒为单位,范围是 0-999999)。 所以超时的时间还需要加上 nanos 毫秒。*/
public final void wait(long timeout, int nanos) throws InterruptedException
/*** 跟之前的2个wait方法一样,只不过该方法一直等待,没有超时时间这个概念*/
public final void wait() throws InterruptedException
/*** 实例被垃圾回收器回收的时候触发的操作*/
protected void finalize() throws Throwable

类构造器 

 一个类必须要有一个构造器的存在,如果没有显示声明,那么系统会默认创建一个无参构造器,在JDK的Object类源码中,是看不到构造器的,系统会自动添加一个无参构造器。

// 构造一个Object类的对象。
Object obj = new Object();

equals方法

 源码

 public boolean equals(Object obj) {return (this == obj);}

结论:

  • 在 Object 类中,== 运算符和 equals 方法是等价的,都是比较两个对象的引用是否相等,从另一方面来讲,如果两个对象的引用相等,那么这两个对象一定是相等的
  • 对于我们自定义的一个对象,如果不重写 equals 方法,那么在比较对象的时候就是调用 Object 类的 equals 方法,也就是用 == 运算符比较两个对象

 重写equals原则

   @Overridepublic boolean equals(Object otherObject) {//1、判断比较的两个对象引用是否相等,如果引用相等那么表示是同一个对象,那么当然相等if(this == otherObject){return true;}//2、如果 otherObject 为 null,直接返回false,表示不相等if(otherObject == null ){//对象为空或者不是Person类的实例return false;}//3、比较 this 和 otherObject 是否是同一个类(注意下面两个只能使用一种)//3.1:如果 equals 的语义在每个子类中所有改变,就使用 getClass 检测if(this.getClass() != otherObject.getClass()){return false;}//3.2:如果所有的子类都有统一的定义,那么使用 instanceof 检测if(!(otherObject instanceof Person)){return false;}//4、将 otherObject 转换成对应的类类型变量Person other = (Person) otherObject;//5、最后对对象的属性进行比较。使用 == 比较基本类型,使用 equals 比较对象。如果都相等则返回true,否则返回false//   使用 Objects 工具类的 equals 方法防止比较的两个对象有一个为 null而报错,因为 null.equals() 是会抛异常的return Objects.equals(this.pname,other.pname) && this.page == other.page;//6、注意如果是在子类中定义equals,则要包含 super.equals(other)//return super.equals(other) && Objects.equals(this.pname,other.pname) && this.page == other.page;}

如果在重写 equals() 方法时没有重写 hashCode() 方法,使用 HashMap 可能会出现以下问题:

  1. 违反 hashCode 契约

    Java 规定,如果两个对象通过 equals() 方法比较相等,那么它们的 hashCode() 也必须相等。如果只重写 equals() 而不重写 hashCode(),可能会导致两个相等的对象返回不同的哈希值,从而违反这一契约。
  2. HashMap 无法正确查找对象

    HashMap 依赖 hashCode() 来确定对象的存储位置。如果两个对象相等但 hashCode() 不同,HashMap 可能会将它们放在不同的桶中,导致无法通过 get() 方法正确找到对象。
  3. 数据丢失或重复

    由于 HashMap 使用 hashCode() 和 equals() 来管理键值对,如果 hashCode() 不一致,可能会导致数据被错误地存储或覆盖,进而引发数据丢失或重复。

getClass方法

public final native Class<?> getClass();

getClass()在 Object 类中如上,作用是返回对象的运行时类。

toString 方法

public String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
  • getClass().getName()是返回对象的全类名(包含包名),Integer.toHexString(hashCode()) 是以16进制无符号整数形式返回此哈希码的字符串表示形式。
  • 打印某个对象时,默认是调用 toString 方法,比如 System.out.println(person),等价于 System.out.println(person.toString())。

clone方法

/**
* 本地clone方法,用于对象的复制
*/
protected native Object clone() throws CloneNotSupportedException;

保护方法,实现对象的浅拷贝,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。

finalize 方法

protected void finalize() throws Throwable { }

当 GC 确定不再有对该对象的引用时,GC 会调用对象的 finalize() 方法来清除回收。

JVM 会确保一个对象的 finalize() 方法只被调用一次,而且程序中不能直接调用 finalize() 方法。

finalize() 方法通常也不可预测,而且很危险,一般情况下,不必要覆盖 finalize() 方法。

 

 

 

 

http://www.yayakq.cn/news/191734/

相关文章:

  • 公司网站开发和设计 怎么开票湛江哪里有建网站
  • 库尔勒北京网站建设潍坊seo管理
  • 新网站的站点验证河池公司做网站
  • 源汇区建设局网站西宁电子商务网站建设
  • 做网站用什么语言开发高端建设网站建设
  • 全网vip视频网站建设免费企业信息查询网站
  • 网站建设策划解决方案网站关键词多少个最好
  • 织梦网站程序安装教程网站建设古典风格
  • 莆田个人外贸网站建设内账免费的财务软件
  • 自动化培训网站建设北京网站开发哪好
  • 电子商务网站建设的实训心得上海专业做网站的公司
  • ps做网站原形毕节网站网站建设
  • cco网站素材做ppt好的模板下载网站
  • 好的网站页面专用车网站建设价格
  • 网站被做301常用的网页编辑软件
  • 《网站建设验收报告》奉城网站建设
  • 深圳商业网站建设哪家网络营销外包专员
  • 网站备案导致网站被k网站开发案例详解下载
  • 郴州北京网站建设如何做app 的模板下载网站
  • 用wordpress仿a站网页设计培训零基础
  • 经典的响应式布局网站家具行业网站建设
  • 珠海网站建设方案优化专升本需要考些什么科目
  • 徐州建设局网新网站山东手机在线app
  • 伍佰亿营销型网站网站地址和网页地址区别
  • 深圳网站建设 贝尔利网站建设模板平台
  • wordpress网站管理插件网页微信二维码怎么扫
  • 简述网站规划的一般步骤做问卷兼职有哪些网站
  • 手机网站生成app软件做网站 提交源码 论坛
  • 延安市建设工程交易中心网站淮南微信网站建设
  • 政协网站建设方案营销云产品