1.引用拷贝
Person p = new Person(); p.setAge(1); p.setName("jack"); p.setDog(new Dog("tom...")); Person p1 = p; System.err.println("p=" +p +",p1="+p1);
2.浅拷贝
package com.xx.tt.copy; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; /*** * * @author xxxxx * @date 2018-09-25 10:00 */ public class Person implements Cloneable{ private String name; private int age; private Dog dog; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Dog getDog() { return dog; } public void setDog(Dog dog) { this.dog = dog; } @Override protected Object clone() throws CloneNotSupportedException { try { Object o = super.clone(); Person p = (Person) o; return p; }catch (CloneNotSupportedException e){ e.printStackTrace(); } return null; } @Override public String toString() { return ToStringBuilder.reflectionToString(this, ToStringStyle.SIMPLE_STYLE); } }
3.深拷贝
package com.xx.tt.copy; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; /*** * * @author xxx * @date 2018-09-25 10:00 */ public class Person implements Cloneable{ private String name; private int age; private Dog dog; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Dog getDog() { return dog; } public void setDog(Dog dog) { this.dog = dog; } @Override protected Object clone() throws CloneNotSupportedException { try { Object o = super.clone(); Person p = (Person) o; Object dog = this.dog.clone(); p.dog = (Dog) dog; return p; }catch (CloneNotSupportedException e){ e.printStackTrace(); } return null; } @Override public String toString() { return ToStringBuilder.reflectionToString(this, ToStringStyle.SIMPLE_STYLE); } }
实际上浅拷贝和深拷贝实现Cloneable接口并重写clone方法,区别是浅拷贝只实现自己本身的拷贝,深拷贝是拷贝自己和自己的非基础数据类型的成员也要依次拷贝
4.串行化拷贝
特点必须实现Serialable接口,使用ObjectInputStream和ObjectOutputStream两个类来实现复制拷贝功能(序列化和反序列化)。
相关推荐
标题中的“java对象复制克隆”主要涉及的是深拷贝,这是一种创建一个新对象的方式,新对象不仅复制了原对象的所有属性,还复制了嵌套的对象引用,使得修改复制后的对象不会影响到原始对象。 **浅拷贝**:在浅拷贝中...
首先,我们要理解Java中的对象复制有浅拷贝和深拷贝两种方式。浅拷贝只复制对象本身,不复制引用的对象;深拷贝不仅复制对象,还复制对象中引用的对象。在描述中提到的方法,很可能是关于深拷贝的实现。 在Java中,...
对象的创建是生命周期的起点,通常通过以下几种方式实现: 1. **使用`new`语句**:这是最常见的创建对象的方法,例如`new Customer("Tom", 20)`。这种方式会调用类的构造方法,初始化对象的状态。 2. **反射机制**...
根据给定文件的信息,我们可以总结出以下几个面向对象的基础知识点,并结合具体的题目来进行解析: ### 面向对象基础知识概述 面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它将数据和处理...
Java中的参数传递有两种方式:基本类型的值传递和引用类型的引用传递。对于基本类型(如`int`),传递的是值的副本;而对于引用类型(如`StringBuffer`),传递的是引用的副本。这意味着对于引用类型的参数,如果在...
Java是一种广泛使用的编程语言,以其跨平台、面向对象的特点深受开发者喜爱。本教程将深入探讨Java中的数组、方法以及面向对象编程的基础概念,为初学者提供一个全面的学习指南。 一、数组 数组在Java中是存储同一...
在 Java 中,面向对象编程的实现可以通过以下几种方式: 1. 类的设计:设计类的结构和成员变量。 2. 对象的创建:创建对象的实例。 3. 方法的实现:实现成员方法。 4.继承和多态:实现继承和多态机制。 Java 程序...
### 深入Java对象及元素的存储区域 ...通过深入了解Java对象及元素在不同存储区域中的分配方式及其对性能的影响,开发者可以更加高效地进行内存管理和性能优化,从而提高Java应用程序的整体性能。
下面,我们将深入探讨几种重要的Java设计模式。 1. **单例模式**:保证一个类只有一个实例,并提供全局访问点。这种模式常用于配置中心、线程池等需要全局共享的对象。实现方式有懒汉式(线程不安全)、饿汉式...
- **面向对象**:Java是一种完全面向对象的语言,支持继承、封装和多态等核心概念。 - **分布式**:Java内置了对网络通信的支持,使得开发者能够轻松构建分布式系统。 - **半编译半解释**:Java源代码首先会被编译成...
在Java开发中,Bean复制是一项常见的任务,尤其是在数据转换和服务层之间传递对象时。这篇文章将对比分析Apache BeanUtils、PropertyUtils、Spring BeanUtils以及Cglib BeanCopier这四个常用的Bean复制工具的性能和...
有几种不同的方法可以实现数组的复制,每种方法都有其特定的适用场景。以下将详细阐述Java中复制数组的主要方法: 1. **浅拷贝(Shallow Copy)**: - `System.arraycopy()`:这是Java中最直接、最高效的方式来...
3. 创建线程有哪几种方式? Answer: 可以通过继承Thread类、实现Runnable接口或使用线程池来创建线程。 反射 1. 什么是反射? Answer: 反射是Java提供的一种机制,允许在运行时获取类和对象的信息,并进行修改。 2...
这篇博客"java下载文件的种方式"可能详细介绍了几种不同的Java实现文件下载的方法。以下是对这些方法的总结和扩展: 1. **HTTP响应流下载** 这是最基本的方式,通过Servlet或Spring MVC等框架处理HTTP请求,然后在...
垃圾回收是计算机编程,尤其是Java和许多其他现代编程语言中的一个关键概念,它自动管理程序的内存,确保不再使用的对象能够被有效地释放,以便为新的对象分配空间。以下是几种常见的垃圾回收算法及其优缺点的详细...
46、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 29 47、sleep() 和 wait() 有什么区别? 30 48、同步和异步有何异同,在什么情况下分别使用他们?举例说明...
封装特性主要通过以下几种方式实现: 1. **使用访问控制符**:通过`public`、`protected`、`private`和`default`来控制类成员的可见性。 2. **使用getter和setter方法**:通过这些方法来访问和修改对象的属性。 3. ...
Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决问题的经验总结,可以提高代码的可读性、可维护性和复用性。本资源包含了2016年6月20日关于Java常用设计模式的源码和作者的心得体会,这对于我们深入...
对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。 Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless ...