- 浏览: 3566891 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (1491)
- Hibernate (28)
- spring (37)
- struts2 (19)
- jsp (12)
- servlet (2)
- mysql (24)
- tomcat (3)
- weblogic (1)
- ajax (36)
- jquery (47)
- html (43)
- JS (32)
- ibatis (0)
- DWR (3)
- EXTJS (43)
- Linux (15)
- Maven (3)
- python (8)
- 其他 (8)
- JAVASE (6)
- java javase string (0)
- JAVA 语法 (3)
- juddiv3 (15)
- Mule (1)
- jquery easyui (2)
- mule esb (1)
- java (644)
- log4j (4)
- weka (12)
- android (257)
- web services (4)
- PHP (1)
- 算法 (18)
- 数据结构 算法 (7)
- 数据挖掘 (4)
- 期刊 (6)
- 面试 (5)
- C++ (1)
- 论文 (10)
- 工作 (1)
- 数据结构 (6)
- JAVA配置 (1)
- JAVA垃圾回收 (2)
- SVM (13)
- web st (1)
- jvm (7)
- weka libsvm (1)
- weka屈伟 (1)
- job (2)
- 排序 算法 面试 (3)
- spss (2)
- 搜索引擎 (6)
- java 爬虫 (6)
- 分布式 (1)
- data ming (1)
- eclipse (6)
- 正则表达式 (1)
- 分词器 (2)
- 张孝祥 (1)
- solr (3)
- nutch (1)
- 爬虫 (4)
- lucene (3)
- 狗日的腾讯 (1)
- 我的收藏网址 (13)
- 网络 (1)
- java 数据结构 (22)
- ACM (7)
- jboss (0)
- 大纸 (10)
- maven2 (0)
- elipse (0)
- SVN使用 (2)
- office (1)
- .net (14)
- extjs4 (2)
- zhaopin (0)
- C (2)
- spring mvc (5)
- JPA (9)
- iphone (3)
- css (3)
- 前端框架 (2)
- jui (1)
- dwz (1)
- joomla (1)
- im (1)
- web (2)
- 1 (0)
- 移动UI (1)
- java (1)
- jsoup (1)
- 管理模板 (2)
- javajava (1)
- kali (7)
- 单片机 (1)
- 嵌入式 (1)
- mybatis (2)
- layui (7)
- asp (12)
- asp.net (1)
- sql (1)
- c# (4)
- andorid (1)
- 地价 (1)
- yihuo (1)
- oracle (1)
最新评论
-
endual:
https://blog.csdn.net/chenxbxh2 ...
IE6 bug -
ice86rain:
你好,ES跑起来了吗?我的在tomcat启动时卡在这里Hibe ...
ES架构技术介绍 -
TopLongMan:
...
java public ,protect,friendly,private的方法权限(转) -
贝塔ZQ:
java实现操作word中的表格内容,用插件实现的话,可以试试 ...
java 读取 doc poi读取word中的表格(转) -
ysj570440569:
Maven多模块spring + springMVC + JP ...
Spring+SpringMVC+JPA
好吧,我先来说,这个不知道再实际的开发中用的大不大。
克隆分为浅克隆和深克隆,两者的区别就是克隆后的对象,修改对象中引用的属性的时候,是不是会影响到原来的那个对象。
恩,你一定很糊涂了。
首先来说浅克隆:
我有一个people类,里面有三个属性,一个是学号,一个名字,一个是身份证,身份证又是一个类,里面有两个属性一个是
身份证号码,一个身份证的发证机关的名字。
我首先创建了一个people对象,然后我克隆一份,那么这一份是和克隆前的对象有相同的属性值得。但是如果我改变了people的引用对象的属性值,两个都会是影响到得,而改变的基本类型的,8个基本类型的话,是不会影响到的。
克隆的实现要实现一个接口,然后覆盖clone的方法就可以了的。
创建一个people并且实现接口,接口是定义型的接口,并不须要实现一些方法的:
card类:
package endual.copy; public class Card { private int id ; private String name ; public Card(int id, String name) { super(); this.id = id; this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } // public Object clone() throws CloneNotSupportedException { // // Object obj = super.clone() ; // return obj ; // // } }
People.java
package endual.copy; public class People implements Cloneable{ private int id ; private String name ; private Card card ; public People(int id, String name, Card card) { super(); this.id = id; this.name = name; this.card = card; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Card getCard() { return card; } public void setCard(Card card) { this.card = card; } public Object clone() { Object object = null; try { object = super.clone(); } catch (CloneNotSupportedException e) { // TODO Auto-generated catch block e.printStackTrace(); } return object ; } }
//我们要实现的就是这个方法,然后用clone的方法就可以了,就是克隆这个people了 public Object clone() { Object object = null; try { object = super.clone(); } catch (CloneNotSupportedException e) { // TODO Auto-generated catch block e.printStackTrace(); } return object ; }
main类
package endual.copy; /** * 深克隆的概念 * 深复制或者叫深克隆:被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。 * 那些引用其他对象的变量将指向被复制过的新对象,而不在是原来有的那些被引用的对象。换言之,深复制把要复制的对象 * 所引用的对象都复制了一遍。也就是说,我复制的对象改变的话,是不会影响到我原来引用的对象的。 * */ public class CloneAoo { public static void main(String[] args) { Card card = new Card (123456, "浙江杭州派出所") ; People p = new People(98765,"xxx", card) ; People pp = (People) p.clone() ; //克隆了一个pp对象,但是里面有一个引用的是card的,而其他是基本类型的 System.out.println(pp.getCard().getName()) ; //打印是一样的 System.out.println(pp.getCard().getId()); //打印是一样的 pp.getCard().setName("中国建设银行"); //改变掉card的属性 pp.setId(33) ; //改变掉基本的属性 System.out.println(p.getCard().getName()); //打印p对象的引用card的值就变了 System.out.println(p.getId()); //这个没变化 //Clone clone = new Clone() ; } }
结果分析:
杭州派出所 123456 中国建设银行 98765
浅克隆可以理解为克隆的对象如果里面有引用的属性的话,那么用的是同一份属性的值,如果改变掉其中一份的属性值得话,就会影响到其他的对象的引用的。
--------------------------------------------------------------------
而可能就是完全的克隆一份了,互不相关的一份克隆了的。
这个要用的序列化了,首先将对象序列化到文件或者xml,然后再反序列化回来,这样就是一个新的对象了,里面的引用是新创建的。
还有一种复制就是将引用也复制一份就可以了
要么我们也要实现card的clone的克隆的方法:
package endual.copy; public class Card implements Cloneable{ private int id ; private String name ; public Card(int id, String name) { super(); this.id = id; this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Object clone() throws CloneNotSupportedException { Object obj = super.clone() ; return obj ; } }
people类
package endual.copy; public class People implements Cloneable{ private int id ; private String name ; private Card card ; public People(int id, String name, Card card) { super(); this.id = id; this.name = name; this.card = card; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Card getCard() { return card; } public void setCard(Card card) { this.card = card; } public Object clone() throws CloneNotSupportedException { People pp = (People)super.clone() ; pp.setCard((Card)pp.getCard().clone()) ; return pp; } }
main类
package endual.copy; /** * 深克隆的概念 * 深复制或者叫深克隆:被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。 * 那些引用其他对象的变量将指向被复制过的新对象,而不在是原来有的那些被引用的对象。换言之,深复制把要复制的对象 * 所引用的对象都复制了一遍。也就是说,我复制的对象改变的话,是不会影响到我原来引用的对象的。 * */ public class CloneAoo { public static void main(String[] args) throws CloneNotSupportedException { Card card = new Card (123456, "杭州派出所") ; People p = new People(98765,"xxx", card) ; People pp = (People) p.clone() ; System.out.println(pp.getCard().getName()) ; System.out.println(pp.getCard().getId()); pp.getCard().setName("中国建设银行"); pp.setId(33) ; System.out.println(p.getCard().getName()); System.out.println(p.getId()); Object obj = new Object() ; //Clone clone = new Clone() ; } }
测试结果是:
杭州派出所 123456 杭州派出所 98765
并没有改变原来的值了
发表评论
-
snmp
2020-04-13 11:07 438https://www.iteye.com/blog/zhan ... -
snmp
2020-04-10 21:33 574https://blog.csdn.net/qq_333141 ... -
服务器监控软件
2019-12-31 11:07 526[ERROR] org.hyperic.sigar.Sigar ... -
多数据源
2019-12-23 22:09 467https://gitee.com/baomidou/dyna ... -
mybatis多数据源
2019-12-23 18:09 461https://blog.csdn.net/qq_288042 ... -
springboot ueditor
2019-12-17 18:26 390https://blog.csdn.net/u01216982 ... -
java支持多数据源
2019-12-13 15:59 467spxcms是否支持多数据源 ... -
java日志
2019-12-10 12:01 309https://blog.csdn.net/peng_wei_ ... -
spring 多数据源
2019-12-06 09:55 439https://www.jb51.net/article/10 ... -
idea
2019-12-04 17:13 419https://blog.csdn.net/dengachao ... -
手机大屏
2019-11-30 16:02 360http://demo.demohuo.top/modals/ ... -
quarz配置
2019-11-08 11:48 482https://blog.csdn.net/BryantLmm ... -
mysql同步
2019-11-06 12:20 360https://blog.csdn.net/baidu_418 ... -
nginx配置多个服务
2019-11-04 20:35 784https://blog.csdn.net/everljs/a ... -
h5 加壳
2019-11-04 16:05 635https://jingyan.baidu.com/artic ... -
jeui 前端框架
2019-10-22 14:30 1217http://www.jemui.com/demo/ http ... -
jeui 维护
2019-10-22 14:29 2http://www.jemui.com/demo/ htt ... -
jeui 维护
2019-10-22 14:29 2http://www.jemui.com/demo/ -
jeui 维护
2019-10-22 14:29 2http://www.jemui.com/demo/ -
jeui 维护
2019-10-22 14:29 2http://www.jemui.com/demo/
相关推荐
Avion v1.7 -社交音频应用程序克隆俱乐部社交网络Android应用程序Java源码 会所已被重新定义,增加了许多变化,并不断更新。codecanyon上提供的音频应用程序的最佳解决方案。Admob和Inapp购买的想法已被添加到货币化...
### Java基础知识点汇总 ...以上内容总结了Java基础知识点汇总中的一些核心概念,涵盖了变量的存储位置、泛型的基础、静态变量的应用场景、克隆机制以及数组的基本特性。这些知识点对于理解和使用Java语言至关重要。
【Java系列文章】Java 基础知识涵盖了Java开发中的核心概念和常见问题,以下是针对这些知识点的详细解析: ...以上就是Java基础知识的详细解读,涵盖了从基础到进阶的多个方面,有助于深入理解Java编程的核心概念。
第3章 Java语言基础 15 实例011 输出错误信息与调试信息 16 实例012 从控制台接收输入字符 16 实例013 重定向输出流实现程序日志 17 实例014 自动类型转换与强制类型转换 19 实例015 加密可以这样简单(位运算) 20 ...
Java是世界上最流行的编程语言...掌握这些Java基础知识点,将为后续的Java编程打下坚实的基础,无论是开发简单的应用程序还是复杂的分布式系统。通过不断的实践和学习,你可以深入理解这些概念并灵活运用到实际项目中。
《Java基础面试题解析》 Java作为一门强大的面向对象编程语言,其基础面试题涵盖了众多关键概念,包括面向对象特性、内存管理、类与对象、数据类型、方法重载与覆盖等。本文将深入探讨这些知识点,帮助你更好地理解...
#### 一、Java基础 ##### 1. `static` 关键字的意义 - **定义**:`static` 是一个关键字,用于标记类的成员变量或方法,表明它们属于类级别而非实例级别。这意味着即使没有创建类的实例,也能通过类名直接访问这些...
Java EE,全称为Java Platform, Enterprise Edition,是Java平台针对企业级应用开发的一套标准规范。这个标准由Java Community Process(JCP)制定,旨在提供一个用于构建分布式、多层企业应用程序的框架。Java EE...
Java编程语言是软件开发领域广泛使用的工具,尤其在企业级应用和互联网开发中占据着重要地位。本资源“Java入门到精通完整教程+源码.zip”提供了一个全面的学习路径,帮助初学者逐步掌握Java编程技能并进阶至精通。...
在“Web应用基础”这门课程中,我们探讨的是构建和理解互联网应用程序的基本概念和技术。这个压缩包文件可能包含了与15个不同章节相关的课后习题答案,旨在帮助学习者巩固所学知识并深入理解Web应用的工作原理。以下...
Java实现SVN,主要借助的是SVNKit框架,这是一款完全用Java编写的Subversion库,使得Java开发者能够轻松地在应用程序中集成版本控制系统Subversion的功能。本文将深入探讨如何使用SVNKit进行基础操作以及日志管理。 ...
这是Java语言继承体系的基础,所有的类都继承自Object类,这意味着Object类中的方法在Java的任何对象中都可用,比如equals()、hashCode()、toString()、clone()等。clone()方法是一个特殊的对象复制方法,实现浅克隆...
特别是,他提到了Java基础类库(Java Foundation Classes, JFC)的作用,这是一个包含大量标准组件的类库,为开发者提供了丰富的工具箱。 #### 四、创建型模式 接下来的部分重点介绍了一系列创建型模式,这些模式...
010301_【第3章:Java基础程序设计】_Java数据类型笔记.pdf 010302_【第3章:Java基础程序设计】_运算符、表达式与语句笔记.pdf 010303_【第3章:Java基础程序设计】_判断与循环语句笔记.pdf 010401_【第4章:数组与...
Java环境的集成则可以让开发人员在Java应用程序中利用GDAL的功能。 首先,确保你的Linux系统上安装了必要的基础工具,如GCC编译器、make、cmake等。这些是构建C++项目的基本需求。你可能还需要安装一些开发库,例如...
- **Oracle官方文档**:Java的官方教程,涵盖了从基础到高级的所有内容,是学习Java的首选之地。 - **Stack Overflow**:全球最大的开发者问答社区,解决Java编程中的疑难问题。 - **GitHub**:查找Java开源项目...
Java基础面试题涵盖了许多核心概念,对于理解和掌握Java编程至关重要。以下是一些主要知识点的详细说明: 1. **面向对象编程(OOP)**:Java是一种面向对象的语言,其核心特性包括封装、继承、多态和抽象。封装是将...
在Linux环境中,为了使用GDAL与Java应用程序交互,你需要编译GDAL的源代码,使其包含Java绑定。这里我们将详细探讨如何在Linux系统上编译GDAL 3.0.0版本,并使其适用于Java应用。 1. **环境准备**: 在开始编译...