浅析java中clone()方法
本文转载自:http://blog.csdn.net/mengxiangyue/article/details/6818611
Java中我们可能都遇到过这样的情况,在我们将一个对象做为参数传给一个函数的时候,我们希望在这个函数中所做的操做,并不会影响到这个对象本身。但是在java传递都是引用,所以往往我们在函数内部改变了对象的某一个值,在函数外面调用该对象的时候,相应的值也同样被改变了,例如下面的程序:
class Test
{
static void myMethod(Point pt1)
{
pt1.x = 23;
System.out.println("x="+pt1.x);
}
public static void main(String[] args)
{
Point pt = new Point(2,4);
System.out.println("x="+pt.x);
myMethod(pt);
System.out.println("x="+pt.x);
}
}
class Point{
int x,y;
Point (int x,int y)
{
this.x = x;
this.y = y;
}
}
输出的结果是
x=2
x=23
x=23
但是我们想要的结果是在我们调用了函数myMethod()方法后x的值不会改变,仍然是2。由于java中的传参是引用类型,所以会出现这样的结果,我们希望传递的是对象的一份拷贝,所以这里就用到了Object的clone()方法。
克隆的实现需要一下几步:
在派生类中覆盖基类的clone()方法,并声明为public。
在派生类的clone()方法中,调用super.clone()。
在派生类中实现Cloneable接口。Cloneable接口没有任何抽象的方法,这样的成为标识接口。实现这个接口,只是为了告诉编译器这个对象可以被克隆了。我们按照上面的步骤将上面的代码修改如下:
class Test
{
static void myMethod(Point pt1)
{
pt1.x = 23;
System.out.println("x="+pt1.x);
}
public static void main(String[] args)
{
Point pt = new Point(2,4);
System.out.println("x="+pt.x);
Point pt2 = (Point)pt.clone();
myMethod(pt2);
System.out.println("x="+pt.x);
}
}
class Point implements Cloneable{
int x,y;
Point (int x,int y)
{
this.x = x;
this.y = y;
}
public Object clone()
{
Point p = null;
try
{
p = (Point)super.clone();
}
catch (Exception e)
{
e.printStackTrace();
}
return p;
}
}
输出的结果是:
x=2
x=23
x=2
首先我们在派生类中覆盖了Object类的Clone()方法,并声明为public的。然后我们调用了super.clone()方法,这里会抛出一个异常(对于这个异常大家可以自己查看java的帮助文档),所以必须用try……catch……语句捕获,然后返回此对象。这里需要说明一下,Clone()方法返回的是Object类型的,所以需要强制类型转换
对于javaclone()方法的浅析希望能给您带来帮助。
转载于:https://www.cnblogs.com/harrogath/p/6464077.html
浅析java中clone()方法相关推荐
- java深度克隆_浅析Java中clone()方法浅克隆与深度克隆
现在Clone已经不是一个新鲜词语了,伴随着"多莉"的产生这个词语确实很"火"过一阵子,在Java中也有这么一个概念,它可以让我们很方便的"制造&qu ...
- java中clone方法_Java Object clone()方法– Java中的克隆
java中clone方法 Cloning is the process of creating a copy of an Object. Java Object class comes with na ...
- java中clone方法的理解(深拷贝、浅拷贝)
文章目录 前言: 知识点一:什么是浅拷贝? 知识点二:什么是深拷贝? 知识点三.java拷贝(clone)的前提: 知识点四:浅拷贝案例: 拷贝类: 测试类: 总结: 下面通过画图示意: 知识点五:深 ...
- 浅析Java中的final关键字
浅析Java中的final关键字 谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来 ...
- 浅析Java的“克隆”方法[zt]
Java语言的一个优点就是取消了指针的概念,但也导致了许多程序员在编程中常常忽略了对象与引用的区别,本文会试图澄清这一概念.并且由于Java不能通过简单的赋值来解决对象复制的问题,在开发过程中,也常常 ...
- 【转】浅析Java中的final关键字
谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法. ...
- 浅析Java中的Steam流
Stream流 文章目录 Stream流 1. 集合遍历 2. 流式思想 3. Stream流 3.1 概念 3.2 流的获取 3.3 forEach 3.4 filter 3.5 map 3.6 c ...
- 使用java中replaceAll方法替换字符串中的反斜杠
今天在项目中使用java中replaceAll方法将字符串中的反斜杠("\")替换成空字符串(""),结果出现如下的异常: 1 java.util.regex. ...
- java中collection方法_Java 8中的Collector toCollection()方法
toCollection()Java中的Collector类的方法返回一个Collector,该Collector以遇到的顺序将输入元素累积到一个新的Collection中. 语法如下static & ...
最新文章
- c语言中一百以内相乘的积,一百以内的加减乘除法游戏....
- Openssh学习笔记
- CSS 属性 - 伪类和伪元素的区别
- vm虚拟机安装包_一次Miniconda虚拟机安装的神奇踩坑记录
- 迈向电商认知智能时代的基石:阿里电商认知图谱揭秘
- solidity合约详解
- DirectX SDK 重大版本变化记录[转]
- 简单小巧的跨平台共享内存代码
- swagger内部类_spring boot 1.5.4 集成spring-Data-JPA(七)
- mysql 查出数据后插入新建表
- 自适应滤波器之块自适应滤波器
- php中表格的高度怎么改,ppt表格行高调整不了怎么办
- 理解分布函数(概率论)
- pdf合并成一个pdf怎么合并
- 在PostgreSQL中创建Arcgis企业级地理数据库
- 07.RabbitMQ处理幂等性
- 数美科技风控前沿| AIGC需要什么内容风控基建?ChatGPT本“人”有话要说
- 个性化推荐技术的十大挑战
- redux 基本概念 4
- android 外联wap
热门文章
- 第二:python安装校验报错api-ms-win-crt-process-l1-1-0.dll 丢失的处理
- mysql数据库不小心删除文件_mysql数据库被删除了,怎么恢復吗
- 总线全称_一篇文章讲透I2C总线协议
- 若依集成jsencrypt实现密码加密传输方式
- 正则表达式匹配指定的tr标签
- Log4j CVE-2021-44228后续-CVE-2021-45046,CVE-2021-45105
- Jenkins 新版本及插件在Windows下的安装
- 15寸计算机显示器,苹果确认15寸RMBP支持全球首款5K显示器
- java emoji编码转换_编码:unicode、utf-8以及emoji
- 怎么关闭虚拟机服务器,ESXI | 命令行 | 强行关闭虚拟机进程 | 无法远程访问服务器...