导航:首页 > 编程语言 > java中clone

java中clone

发布时间:2022-09-03 11:55:47

‘壹’ java代码 clone()函数的作用是什么

从楼主对回答的追问上发现,楼主的连JAVA基本的语法都很差啊。=号是赋值运算符,不是比较。

double[] vectorValue;
vectorValue = vectorValue.clone();

这个段代码执行肯定报错了。但他还的意思还是很明确的。

首先:double[] vectorValue; 这个是定义了一个double类型的数组变量vectorValue。

其次:vectorValue = vectorValue.clone(); //这个是将vectorValue 克隆一份,赋值给自己。也就是说vectorValue变量指向了新的一块内存区域。

举个例子可能更能说明问题。

{
privateinti;
publicTestMain(inti){
this.i=i;
}

@Override
protectedObjectclone(){
//TODOAuto-generatedmethodstub
returnnewTestMain(this.getI()+1);
}

publicintgetI(){
returni;
}

/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub

TestMaintm1=newTestMain(1);
TestMaintm2=tm1;
tm1=(TestMain)tm1.clone();
System.out.println(tm1.getI());//tm1指向的是通过clone()方法创建的新的对象的地址,i的值已经是2了。
System.out.println(tm2.getI());//tm2指向的还是tm1创建时的地址,i的值为1

}

}

‘贰’ Java中是如何实现克隆

java 实现clone对象方法的步骤如下:
(1)实现Cloneable接口
(2)重载Object类中的clone()方法,重载时需定义为public
(3)在重载方法中,调用super.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;
}

‘叁’ 关于java中clone()使用的问题,clone无法输出克隆对象的面积和周长(删除了抽象类的实现)

  1. 自己写Cloneable接口,改名为Shape,避免跟java.lang.Cloneable重名,否则java就近原则,会引用你写的接口。

  2. Rect implements Shape, Cloneable,这里Cloneable是java.lang包的,如果你的类或者父类没实现这个接口,就会报CloneNotSupportedException。

‘肆’ java里clone方法的问题

首先必须实现接口,
public interface Cloneable此类实现了 Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制。

如果在没有实现 Cloneable 接口的实例上调用 Object 的 clone 方法,则会导致抛出 CloneNotSupportedException 异常。

按照惯例,实现此接口的类应该使用公共方法重写 Object.clone(它是受保护的)。请参阅 Object.clone(),以获得有关重写此方法的详细信息。
==》protected Object clone() throws CloneNotSupportedException

注意,此接口不 包含 clone 方法。因此,因为某个对象实现了此接口就克隆它是不可能的。即使 clone 方法是反射性调用的,也无法保证它将获得成功。

public class Box implements Cloneable{

public Date d = new Date();

@Override
public Box clone() throws CloneNotSupportedException
{
Box cloned = (Box)super.clone();

cloned.d = (Date)d.clone();

return (Box)super.clone();
}
public static void main(String[] args) throws Exception {
Box b = new Box();
Box b2 = (Box)b.clone();

System.out.println(b.d == b2.d);
}
}

测试后直接返回的话结果是地址相等。
你在克隆后用了set方法重新操作了,肯定是不一样的。。。。!!!
3,注释起来后结果是改变了的,你会不会是没编译保存。
你们老师是说的对的

你好,当然知道 你说的那样。我正是因为三个的试过了,所以最后没改回去,那不正是你第二个问题嘛。。。
如果是深克隆就是FALSE 不是深克隆就返回TRUE啊。

‘伍’ Java中Object.clone方法的用途是什么

clone方法是用来复制一个对象。不同于“=”。
对于值类型的数据是可以通过“=”来实现复制的。但是对于引用类型的对象,“=”只能复制其内存地址,使对象的引用指向同一个对象,而不会创建新的对象。clone则可以创建与原来对象相同的对象。举个例子:
有一个Car类
Car c1 = new Car();
Car c2 = c1;
这两句事实上只创建了一个对象。只不过c1和c2指向了同一个对象。
如果上面的两句改为:
Car c1 = new Car();
Car c2 = c1.clone();
那么就有了两个对象,而且这两个对象的内容是一样的。(所有的属性值相同)
同时,我想说的是一楼的使用,虽然程序本身没有错误,但是用date.clone()添加到list当中,会再次创建date的对象,消耗内存资源,这是编程的忌讳。特别是编写java程序,更要好好利用内存的有限资源,避免浪费。

‘陆’ java中的clone()方法,几点疑问!

不实现Cloneable接口而直接调用Object.clone方法是会抛出CloneNotSupportedException的。 另外,接口往往只是一个协议,仔细看api文档就可以知道Cloneable只是一个标识接口,就是没有任何方法声明的接口,他或许并不能干实际的什么事情,但是他可以让大家知道某个类实现了Cloneable接口,那么大家就很清楚这个类提供clone功能。对应系统的维护来说是一个不错的特性,就以clone为例,如果可以clone的类和不可以clone的类的声明都一样,那么一个新进开发人员怎么知道哪些类提供Clone,而哪些类不提供clone呢。每个人写的代码风格都不同,又不遵守一些协议,时间久了还怎么去维护呢。

‘柒’ java 数组的clone方法是引用呢,还是新建一个新的数组(与之前的数组的值的变化没有关系了)

这个要看你数组的内容是什么了,对于非基本数据类型的数组,比如数组的内容是类,clone()方法也是复制数组的内容,但是这时候数组的内容是指向对象的引用而不是对象的本身.对于基本数据类型的数组,clone()方法就是新建一个新的数组,与之前的数组的值的变化没有关系.

‘捌’ Java中clone方法的疑问

因为在java.lang.Object类的定义里,clone()这个方法是protected,
按照protected的访问控制范围规定,只能是当前类,或当前包,或其他包的子类,这三种情况能访问。

注意这里的”能访问“都是通过原有对象访问的。

你可能以为你代码里obj满足”其他包的子类“这个条件,错了,一旦new出来,就脱离了作用域了。而super仍是原有对象,因此可以访问父类Base乃至Object的保护的clone()方法。

‘玖’ java中clone出的对象怎么用

首先必须实现接口,publicinterfaceCloneable此类实现了Cloneable接口,以指示Object.clone()方法可以合法地对该类实例进行按字段复制。如果在没有实现Cloneable接口的实例上调用Object的clone方法,则会导致抛出CloneNotSupportedException异常。按照惯例,实现此接口的类应该使用公共方法重写Object.clone(它是受保护的)。请参阅Object.clone(),以获得有关重写此方法的详细信息。==》protectedObjectclone()注意,此接口不包含clone方法。因此,因为某个对象实现了此接口就克隆它是不可能的。即使clone方法是反射性调用的,也无法保证它将获得成功。{publicDated=newDate();@OverridepublicBoxclone(){Boxcloned=(Box)super.clone();cloned.d=(Date)d.clone();return(Box)super.clone();}publicstaticvoidmain(String[]args)throwsException{Boxb=newBox();Boxb2=(Box)b.clone();System.out.println(b.d==b2.d);}}测试后直接返回的话结果是地址相等。你在克隆后用了set方法重新操作了,肯定是不一样的。。。。!!!3,注释起来后结果是改变了的,你会不会是没编译保存。你们老师是说的对的你好,当然知道你说的那样。我正是因为三个的试过了,所以最后没改回去,那不正是你第二个问题嘛。。。如果是深克隆就是FALSE不是深克隆就返回TRUE啊。

‘拾’ Java 中 如果clone为什么必须实现Cloneable接口

因为如果不继承自Cloneable接口,当调用clone()时会抛出CloneNotSupportedException异常

以下是详细讲解:

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中clone相关的资料

热点内容
推特app界面如何设置成中文 浏览:452
太空工程师转子编程属性 浏览:32
windowscmd关机命令 浏览:342
云桌面只要服务器装一套软件 浏览:247
电脑右键按到什么导致文件夹全屏 浏览:454
我的世界如何制造服务器主城 浏览:365
linuxssh连不上 浏览:297
永宏plc用什么编程电缆 浏览:371
win激活命令行 浏览:886
新手学电脑编程语言 浏览:893
云空间在哪个文件夹 浏览:926
编程游戏小猫抓小鱼 浏览:790
安卓dosbox怎么打开 浏览:774
服务器无影响是怎么回事 浏览:958
比德电子采购平台加密 浏览:202
加密货币400亿 浏览:524
植发2次加密 浏览:44
vc6查看编译的错误 浏览:595
心理大全pdf 浏览:1002
区域链加密币怎么样 浏览:343