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

BuyVM新设立的迈阿密机房速度怎么样?简单的测评速度性能

BuyVM商家算是一家比较老牌的海外主机商,公司设立在加拿大,曾经是低价便宜VPS主机的代表,目前为止有提供纽约、拉斯维加斯、卢森堡机房,以及新增加的美国迈阿密机房。如果我们有需要选择BuyVM商家的机器需要注意的是注册信息的时候一定要规范,否则很容易出现欺诈订单,甚至你开通后都有可能被禁止账户,也是这个原因,曾经被很多人吐槽的。这里我们简单的对于BuyVM商家新增加的迈阿密机房进行简单的测评。如...

cyun29元/月,香港CN2 GIA云服务器低至起;香港多ip站群云服务器4核4G

cyun怎么样?cyun蓝米数据是一家(香港)藍米數據有限公司旗下品牌,蓝米云、蓝米主机等同属于该公司品牌。CYUN全系列云产品采用KVM架构,SSD磁盘阵列,优化线路,低延迟,高稳定。目前,cyun推出的香港云服务器性价比超高,香港cn2 gia云服务器,1核1G1M/系统盘+20G数据盘,低至29元/月起;香港多ip站群云服务器,16个ip/4核4G仅220元/月起,希望买香港站群服务器的站长...

创梦网络-江苏宿迁BGP云服务器100G高防资源,全程ceph集群存储,安全可靠,数据有保证,防护真实,现在购买7折促销,续费同价!

官方网站:点击访问创梦网络宿迁BGP高防活动方案:机房CPU内存硬盘带宽IP防护流量原价活动价开通方式宿迁BGP4vCPU4G40G+50G20Mbps1个100G不限流量299元/月 209.3元/月点击自助购买成都电信优化线路8vCPU8G40G+50G20Mbps1个100G不限流量399元/月 279.3元/月点击自助购买成都电信优化线路8vCPU16G40G+50G2...

cloneable为你推荐
windows7正版验证如何在微软网站验证Win7系统是否正版的方法垃圾文件清理bat一键清理系统垃圾文件的批处理智能机刷机软件安卓手机刷机,用什么软件最简单?百度预测世界杯世界杯预测微软将停止支持32位Win10系统你使用的Windows10即将终止服务是什么意思?dnf客户端消失地下城勇士登录 客户端消失dnf客户端消失DNF客户端无缘无故消失flv转换avi怎样把视频flv格式转换成avi 、 mp4格式云图好看吗电影《云图》到底讲的什么,没看懂,高手来说一下。微软永久关闭实体店微软windows10易升怎么关闭
老域名 香港服务器租用99idc 北京vps 最新代理服务器地址 香港机房托管 42u机柜尺寸 12u机柜尺寸 商家促销 北京主机 申请个人网页 魔兽世界台湾服务器 hinet 泉州电信 稳定免费空间 万网空间购买 环聊 域名dns 新加坡空间 阿里云邮箱怎么注册 免费赚q币 更多