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方法 该方法唤醒在该对象上等待的所有线程。

JUSTG(5.99美元/月)最新5折优惠,KVM虚拟虚拟512Mkvm路线

Justg是一家俄罗斯VPS云服务器提供商,主要提供南非地区的VPS服务器产品,CN2高质量线路网络,100Mbps带宽,自带一个IPv4和8个IPv6,线路质量还不错,主要是用户较少,带宽使用率不高,比较空闲,不拥挤,比较适合面向非洲、欧美的用户业务需求,也适合追求速度快又需要冷门的朋友。justg的俄罗斯VPS云服务器位于莫斯科机房,到美国和中国速度都非常不错,到欧洲的平均延迟时间为40毫秒,...

DMIT:新推出美国cn2 gia线路高性能 AMD EPYC/不限流量VPS(Premium Unmetered)$179.99/月起

DMIT,最近动作频繁,前几天刚刚上架了日本lite版VPS,正在酝酿上线日本高级网络VPS,又差不多在同一时间推出了美国cn2 gia线路不限流量的美国云服务器,不过价格太过昂贵。丐版只有30M带宽,月付179.99 美元 !!目前美国云服务器已经有个4个套餐,分别是,Premium(cn2 gia线路)、Lite(普通直连)、Premium Secure(带高防的cn2 gia线路),Prem...

racknerd:美国大硬盘服务器,$599/月,Ryzen7-3700X/32G内存/120gSSD+192T hdd

racknerd当前对美国犹他州数据中心的大硬盘服务器(存储服务器)进行低价促销,价格跌破眼镜啊。提供AMD和Intel两个选择,默认32G内存,120G SSD系统盘,12个16T HDD做数据盘,接入1Gbps带宽,每个月默认给100T流量,5个IPv4... 官方网站:https://www.racknerd.com 加密数字货币、信用卡、PayPal、支付宝、银联(卡),可以付款! ...

cloneable为你推荐
win7无线局域网windows7怎样设置无线局域网CA3445ca724的临床意义iphone12或支持北斗导航苹果手机怎样下载北斗导航magento模板magento1.9主题开发用哪个模板为基础好?magento模板magento系统缩略图大小在哪里修改?magento模板网站建好了,但是对模板不满意,有哪位亲知道怎么换模板吗?magento2MRP与MRP2的区别微信语音在哪个文件夹【求助】微信语音的文件夹在哪里??电梯物联网平台国内物联网公司排名,知道的帅哥美女快来回答哦!谢谢了!1518qq几开头的QQ号好
虚拟主机管理软件 网游服务器租用 美国和欧洲vps 域名主机基地 花生壳免费域名 GGC vmsnap3 日本空间 中国特价网 java虚拟主机 京东商城双十一活动 美国独立日 宏讯 海外空间 杭州电信宽带优惠 镇江高防 黑科云 register.com websitepanel forwarder 更多