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

PQS彼得巧 年中低至38折提供台湾彰化HiNet线路VPS主机 200M带宽

在六月初的时候有介绍过一次来自中国台湾的PQS彼得巧商家(在这里)。商家的特点是有提供台湾彰化HiNet线路VPS主机,起步带宽200M,从带宽速率看是不错的,不过价格也比较贵原价需要300多一个月,是不是很贵?当然懂的人可能会有需要。这次年中促销期间,商家也有提供一定的优惠。比如月付七折,年付达到38折,不过年付价格确实总价格比较高的。第一、商家优惠活动年付三八折优惠:PQS2021-618-C...

legionbox:美国、德国和瑞士独立服务器,E5/16GB/1Gbps月流量10TB起/$69/月起

legionbox怎么样?legionbox是一家来自于澳大利亚的主机销售商,成立时间在2014年,属于比较老牌商家。主要提供VPS和独立服务器产品,数据中心包括美国洛杉矶、瑞士、德国和俄罗斯。其中VPS采用KVM和Xen架构虚拟技术,硬盘分机械硬盘和固态硬盘,系统支持Windows。当前商家有几款大硬盘的独立服务器,可选美国、德国和瑞士机房,有兴趣的可以看一下,付款方式有PAYPAL、BTC等。...

美国高防云服务器 1核 1G 26元/月 香港/日本站群服务器 E5 16G 1600元/月 触摸云

触摸云国内IDC/ISP资质齐全商家,与香港公司联合运营, 已超8年运营 。本次为大家带来的是双12特惠活动,美国高防|美国大宽带买就可申请配置升档一级[CPU内存宽带流量选一]升档方式:CPU内存宽带流量任选其一,工单申请免费升级一档珠海触摸云科技有限公司官方网站:https://cmzi.com/可新购免费升档配置套餐:地区CPU内存带宽数据盘价格购买地址美国高防 1核 1G10M20G 26...

cloneable为你推荐
nero教程nero10刻录教程魔兽世界密保卡WOW现在的密保卡怎么弄?罗振宇2017跨年演讲有时候拼命奔跑,只是为了留在原地是什么意思音响解码大家好,音响锁住了怎么解锁?微软永久关闭实体店微软有一天倒闭了 你会怎样?修改qq密码保护怎么改QQ密码,还有改密保xp仿win7桌面主题XP系统可以装window7主题吗cad图批量打印怎么用CAD看图软件进行批量打印川普竞选网站遭攻击网站被攻击怎么回应开源视频会议将网络视频会议替代原来的面对面会议具有哪些方面的好处呢?
免费申请域名 fastdomain 美国主机推荐 bluehost tier 国外空间 699美元 100mbps 多线空间 web服务器是什么 zcloud 建站论坛 发证机构 cloudflare 赵荣 neobux 电脑主机 xendesktop qq空间登录首页 电脑主机内部结构 更多