用过C++的人都知道,C++中有个"拷贝构造函数"的概念。这个概念是为了解决C++中把一个对象指针赋值给另外一个对象指针,从而两个指针指向同一块内存区域而提出的。
同样,Java做为一门高级语言,它也无法避免这样的问题。Java中没有"拷贝构造函数"的概念,而是提出了一个"Clone"的概念。其实现机制还是利用C++中的"深拷贝"进行的。
下面是两个例子程序,对比一下前后就很容易得出结论了。
使用Clone机制前:
/* * Main.java * * Created on 2007年8月4日, 下午6:34 * * To change this template, choose Tools | Template Manager * and open the template in the editor. */
package testjavaclone;
/** * * @author df.sun */ public class Main { private String name; /** Creates a new instance of Main */ public Main() { }
void setName(String name) { this.name = name; }
String getName() { return this.name; } /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here Main a = new Main(); Main b = a;
a.setName("aaa"); b.setName("bbb");
System.out.println(a.getName()); System.out.println(b.getName()); }
}
使用Clone机制后:
/* * Main.java * * Created on 2007年8月4日, 下午6:34 * * To change this template, choose Tools | Template Manager * and open the template in the editor. */
package testjavaclone;
/** * * @author df.sun */ public class Main implements Cloneable{ private String name; /** Creates a new instance of Main */ public Main() { }
void setName(String name) { this.name = name; }
String getName() { return this.name; } /** * @param args the command line arguments */ public static void main(String[] args) throws Exception{ // TODO code application logic here Main a = new Main(); Main b = (Main)a.clone();
a.setName("aaa"); b.setName("bbb");
System.out.println(a.getName()); System.out.println(b.getName()); }
}
|
相关推荐
在Java中,`double` 类型的数值表示是基于二进制浮点数的,这意味着某些十进制小数无法精确表示。当尝试从2.00中减去1.10时,由于1.1不能精确表示为二进制浮点数,计算结果会产生微小的误差,导致打印出的值是 `0....
### JAVA 解惑(解析JAVA开发中的95个疑惑点) #### 知识点一:取余操作符在处理负数时的行为 **标题**: 奇数性 **描述**: 本节通过一个示例解释了Java中取余操作符(`%`)在处理负数时的行为特点。 **详细解释*...
基于Java语言的NetCDF文件解析,使用了netcdf4和opencsv两个库,最终将解析后的数据导出为CSV,附依赖文件、源代码及一个测试数据样例。 可结合本人的博客...
它涵盖了Java的基础知识、常见疑惑点以及易错知识点,旨在帮助Java初学者和进阶者解决实际编程中的困扰。 1. **基础概念解析**: - 类与对象:Java是一种面向对象的语言,理解类的定义、对象的创建及其生命周期至...
在这个“关于CoreJava同步的疑惑例子”中,我们将探讨Java中的同步机制,以及如何通过示例代码`Bank.java`, `TransferRunnable.java`, 和 `SynchBankTest.java`来理解这个概念。 1. **同步的必要性** 当多个线程...
通过这套试题集,学习者不仅可以检验自己的Java知识水平,还可以通过答案和解析加深对每个知识点的理解,从而提升编程技能。同时,解析部分将帮助解答疑惑,使学习过程更为高效。记得理论结合实践,多做练习,才能...
《Java解惑》是一本专为Java初学者和进阶者设计的指南,旨在帮助读者解决在学习和...以上知识点只是《Java解惑》中的一部分,通过深入学习和实践,你可以逐步解开Java编程中的种种疑惑,成为一名更优秀的Java开发者。
《JAVA解惑》是Java开发者领域的一本经典著作,它被广大...总之,《JAVA解惑》是一本涵盖了Java核心知识点、实战技巧和高级特性的宝典,无论你是Java新手还是老手,都能从中受益匪浅,解决你在Java编程中的种种疑惑。
"Java面试解惑宝典(高清PDF版)"提供了一份全面的学习资源,帮助Java开发者准备面试,解答疑惑。 首先,《Java程序员面试宝典》涵盖了基础语法、面向对象编程、集合框架、多线程、网络编程、I/O流、设计模式等核心...
课后编程答案集是学习过程中非常重要的参考资料,它能够帮助学生检验自己的理解和实践能力,解决在学习过程中遇到的疑惑。 Java是一种广泛使用的高级编程语言,由Sun Microsystems(现为Oracle Corporation)于1995...
6. **Java 十大基础笔记整理(PDF).zip**:这是一份整理好的Java基础知识点的笔记,涵盖了类、对象、接口、继承、异常处理、输入输出、集合框架等关键概念,适合初学者和复习者参考。 通过这些文件,我们可以系统...
该压缩包文件“Thinking In Java 练习题答案 第四版]Annotated+Solution+Guide+for+TIJ4.pdf”包含了《Thinking in Java》第四版的全部习题解答,这些解答通常会包括对问题的解析、代码实现以及可能的优化建议。...
《Java解惑(整理版本)》是一篇针对Java编程语言常见问题和疑惑的详细解析文章。博主通过深入探讨Java源码和使用工具的角度,帮助开发者解决实际开发中遇到的问题。以下将围绕标题和描述中的知识点进行展开: 1. *...
以下是对这份"Java编程思想练习答案"的详细解析: 1. **Java基础知识**:Java是一种面向对象的语言,其基础包括数据类型、变量、运算符、流程控制(如if-else、switch、for、while等)、类和对象、封装、继承、多态...
### JAVA编程利器Eclipse——深度解析与应用指南 #### 一、引言 在现代软件开发领域,Java作为一门主流的编程语言,其强大的功能和广泛的适用性使其成为众多开发者和企业的首选。然而,高效的Java开发离不开优秀的...
本文将围绕这两个概念进行深入探讨,并针对初学者常见的疑惑点进行解答。 #### Java面向对象基础 Java是一种完全面向对象的语言,几乎所有的功能都是通过类和对象来实现的。在Java中,类(Class)是一种定义对象的...
通过逐步解析和修改源代码,学习者将能够更好地掌握Java编程,并逐步建立起自己的编程思维。记住,实践是检验理解的最好方式,所以一定要动手尝试,遇到问题不要怕,这是成长的过程。在"万卷图书论坛"中寻找答案,...
通过实例解析,帮助读者理解如何设计和实现复杂的类和对象,以及如何利用接口来实现多态性。 2. **基础语法**:涵盖了变量、数据类型、运算符、流程控制语句(如if、switch、for、while)、方法定义与调用等基础...
《Java2实用教程》是Java...这本书的答案集可以帮助解决自学过程中的疑惑,避免因为问题积累而导致的学习瓶颈,从而更加高效地掌握Java编程技能。在实践中不断应用和巩固所学,是成为一名优秀的Java程序员的关键步骤。