cloneablejava object 有哪些方法

cloneable  时间:2021-07-22  阅读:()

如何实现Cloneable接口?

Java使用Object的clone()方法来拷贝一个对象的内容到另一个对象,当一个需要拷贝的对象包含其他对象的引用时就会出现问题。

可以实现Cloneable接口来重载Object类的clone方法。

java clone方法 怎么用

什么是"clone"??   在实际编程过程中,我们常常要遇到这种情况: 有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能会需要一个和A完全相同新对象B,并且此后对B任何改动都不会影响到A中的值,也就是说,A与B是两个独立的对象,但B的初始值是由A对象确定的。

在 Java语言中,用简单的赋值语句是不能满足这种需求的。

要满足这种需求虽然有很多途径,但实现clone()方法是其中最简单,也是最高效的手段。

?    Java的所有类都默认继承java.lang.Object类,在java.lang.Object类中有一个方法clone()。

JDK API的说明文档解释这个方法将返回Object对象的一个拷贝。

要说明的有两点: 一是拷贝对象返回的是一个新对象,而不是一个引用。

二是拷贝对象与用 new操作符返回的新对象的区别就是这个拷贝已经包含了一些原来对象的信息,而不是对象的初始信息。

? 怎样应用clone()方法??   一个很典型的调用clone()代码如下:? class?CloneClass?implements?Cloneable{?  public?int?aInt;?  public?Object?clone(){?   CloneClass?o?=?null;?   try{?    o?=?(CloneClass)super.clone();?   }catch(CloneNotSupportedException?e){?    e.printStackTrace();?   }?   return?o;?  }? }    有三个值得注意的地方, 一是希望能实现clone功能的CloneClass类实现了Cloneable接口,这个接口属于java.lang 包,java.lang包已经被缺省的导入类中,所以不需要写成java.lang.Cloneable。

另一个值得请注意的是重载了clone()方 法。

最后在clone()方法中调用了super.clone(),这也意味着无论clone类的继承结构是什么样的,super.clone()直接或 间接调用了java.lang.Object类的clone()方法。

下面再详细的解释一下这几点。

?   应该说第三点是最重要的,仔细观察一下Object类的clone()一个native方法,native方法的效率一般来说都是远高于java中的非native方法。

这也解释了为 什么要用Object中clone()方法而不是先new一个类,然后把原始对象中的信息赋到新对象中,虽然这也实现了clone功能。

对于第二点,也要 观察Object类中的clone()还是一个protected属性的方法。

这也意味着如果要应用clone()方法,必须继承Object类,在 Java中所有的类是缺省继承Object类的,也就不用关心这点了。

然后重载clone()方法。

还有一点要考虑的是为了让其它类能调用这个clone 类的clone()方法,重载之后要把clone()方法的属性设置为public。

?   那么clone类为什么还要实现 Cloneable接口呢?稍微注意一下,Cloneable接口是不包含任何方法的!其实这个接口仅仅是一个标志,而且这个标志也仅仅是针对 Object类中clone()方法的,如果clone类没有实现Cloneable接口,并调用了Object的clone()方法(也就是调用了 super.Clone()方法),那么Object的clone()方法就会抛出CloneNotSupportedException异常。

Java中对对象克隆,一定要实现Cloneable接口吗?

是的。

如果没有实现Cloneable接口,则调用Object的clone方法克隆对象将会抛出下面这个错误: CloneNotSupportedException - 如果对象的类不支持 Cloneable 接口,则重写 clone 方法的子类也会抛出此异常,以指示无法复制某个实例。

更多java技术请访问bug315。

这是Object中clone方法的定义: protected Object clone() throws CloneNotSupportedException

weakhashmap和hashmap的区别

一.HashMap 1.HashMap是基于Key-Value的散列表(JDK7:数组+链表,JDK8:数组+链表+红黑树),采用拉链法实现的。

一般用于单线程当中,非线程安全,HashMap的键是"强键"。

2.继承于抽象类AbstractMap,并且实现Map接口。

遍历时,取得的数据完全是随机的。

3.默认容量大小是16,加载因子是0.75。

4.最多只允许一条key为Null,允许多条value为Null。

5.HashMap实现了Cloneable和Serializable接口,而WeakHashMap没有。

1).HashMap实现Cloneable,说明它能通过clone()克隆自己。

2).HashMap实现Serializable,说明它支持序列化,能通过序列化去传输。

6.添加、删除操作时间复杂度都是O(1)。

二.weakHashMap 1.weakHashMap是基于Key-Value的散列表(数组+链表),采用拉链法实现的。

一般用于单线程当中,非线程安全,weakHashMap中的键是"弱键"。

备注:当"弱键"被GC会收时,它对应的键值也会从weakHashMap中删除。

2.继承于抽象类AbstractMap,并且实现Map接口。

3.默认容量大小是16,加载因子是0.75。

4.最多只允许一条key为Null,允许多条value为Null。

为什么用super.clone()

实现了Cloneable接口,这是一个标记,证明这个类可以被克隆,并可以调用Object的clone方法,而super.clone()正是克隆当前对象,这里的super.指的是调用父类的clone方法,实现浅克隆,即只clone当前对象而不clone当前对象的子对象。

至于clone方法的实现,具体没了解过,只知道利用反射机制实现的,可以完全复制当前对象,但是由于返回值是Object,所以需要强转类型

java object 有哪些方法

Object是所有类的父类,任何类都默认继承Object。

Object类到底实现了哪些方法? 1.clone方法 保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。

2.getClass方法 final方法,获得运行时类型。

3.toString方法 该方法用得比较多,一般子类都有覆盖。

4.finalize方法 该方法用于释放资源。

因为无法确定该方法什么时候被调用,很少使用。

5.equals方法 该方法是非常重要的一个方法。

一般equals和==是不一样的,但是在Object中两者是一样的。

子类一般都要重写这个方法。

6.hashCode方法 该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。

这个方法在一些具有哈希功能的Collection中用到。

一般必须满足obj1.equals(obj2)==true。

可以推出obj1.hash- Code()==obj2.hashCode(),但是hashCode相等不一定就满足equals。

不过为了提高效率,应该尽量使上面两个条件接近等价。

7.wait方法 wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。

wait()方法一直等待,直到获得锁或者被中断。

wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。

调用该方法后当前线程进入睡眠状态,直到以下事件发生。

(1)其他线程调用了该对象的notify方法。

(2)其他线程调用了该对象的notifyAll方法。

(3)其他线程调用了interrupt中断该线程。

(4)时间间隔到了。

此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。

8.notify方法 该方法唤醒在该对象上等待的某个线程。

9.notifyAll方法 该方法唤醒在该对象上等待的所有线程。

Vultr新注册赠送100美元活动截止月底 需要可免费享30天福利

昨天晚上有收到VULTR服务商的邮件,如果我们有清楚的朋友应该知道VULTR对于新注册用户已经这两年的促销活动是有赠送100美元最高余额,不过这个余额有效期是30天,如果我们到期未使用完的话也会失效的。但是对于我们一般用户来说,这个活动还是不错的,只需要注册新账户充值10美金激活账户就可以。而且我们自己充值的余额还是可以继续使用且无有效期的。如果我们有需要申请的话可以参考"2021年最新可用Vul...

Ceranetworks顶级合作伙伴 香港E3 16G 299元 香港E5 32G 650元 美国E3 16G 650元

提速啦(www.tisula.com)是赣州王成璟网络科技有限公司旗下云服务器品牌,目前拥有在籍员工40人左右,社保在籍员工30人+,是正规的国内拥有IDC ICP ISP CDN 云牌照资质商家,2018-2021年连续4年获得CTG机房顶级金牌代理商荣誉 2021年赣州市于都县创业大赛三等奖,2020年于都电子商务示范企业,2021年于都县电子商务融合推广大使。资源优势介绍:Ceranetwo...

Boomer.host:$4.95/年-512MB/5GB/500GB/德克萨斯州(休斯顿)

部落曾经在去年分享过一次Boomer.host的信息,商家自述始于2018年,提供基于OpenVZ架构的VPS主机,配置不高价格较低。最近,主机商又在LET发了几款特价年付主机促销,最低每年仅4.95美元起,有独立IPv4+IPv6,开设在德克萨斯州休斯顿机房。下面列出几款VPS主机配置信息。CPU:1core内存:512MB硬盘:5G SSD流量:500GB/500Mbps架构:KVMIP/面板...

cloneable为你推荐
空间背景音乐播放器请问大家谁知道QQ空间的免费背景音乐或播放器播放的音乐怎么弄?急~~im社区什么是IWOM?怎样恢复系统手机刷机后怎么恢复原来的系统goalgoalgoal哆啦小子和哆啦A梦是一个型号的吗?excel2003官方word2003、excel2003 官方下载?qq空间个性域名QQ空间里什么是 空间个性域名物联卡官网物联卡是正规流量卡吗?微信语音在哪个文件夹微信时的语音聊天记录保存在哪一个文件夹99客服软件下载99客服软件不兼容 win8nero教程nero10刻录教程
网站空间租赁 美国虚拟主机推荐 in域名注册 香港vps主机 德国vps 企业域名备案 net主机 免费申请网页 新加坡服务器 l5520 流媒体服务器 softbank官网 外国域名 typecho 商务主机 云全民 中国智能物流骨干网 美国在线代理服务器 metalink 湖南idc 更多