java 学习 -深层拷贝 浅层拷贝 暑假第九天

简介:  /*java 对象的克隆     实现Cloneable接口 但是这个接口中没有任何的 抽象方法 只是为了告诉 java 虚拟机这个对象可以被复制  然后我们在类中重写clone方法  这个方法从object定义 在子类中调用 super.
 

/*java 对象的克隆     实现Cloneable接口 但是这个接口中没有任何的 抽象方法 只是为了
告诉 java 虚拟机这个对象可以被复制  然后我们在类中重写clone方法  这个方法从object定义
在子类中调用 super.clone()来克隆   因为object类的clone是protected权限不能再外部访问 、

当我们传递的对象引用的时候 不想改变原来的对象值 这时候我们就需要一个临时的副本
clone方法就实现了这一点

1.浅层拷贝  没有引用成员

2.深层拷贝  将引用成员一起拷贝了 拷贝后修改不会引起原来数据的改变

*/

//例子:
class Student   implements Cloneable

 String name;
 int age;
 Professior p;
 Student(int age,String name,Professior p)
 {
  this.age=age;
  this.name=name;
  this.p=p;
 }
 
 public  Object clone()  //重载克隆函数   在克隆函数中调用内部引用成员的克隆函数 返回拷贝
 { Object o=null;
 try
  {
 o=super.clone();  //因为会跑出异常所以我们要进行异常捕获
  }
 catch(CloneNotSupportedException e)
  {
   System.out.println("NOT SUPPPORTED CLONE");
  }
  this.p=(Professior)p.clone();  //要进行强制转换一下
 return o;
}
}

class Professior  implements  Cloneable  //实现一个没有abstract方法的接口是为了告诉java编译器可以被克隆
{
 int age;
 String name;
 Professior(int age,String name)
 {
  this.age=age;
  this.name=name;
 }
  
public  Object clone()  //重载克隆函数因为 基类的是 protected权限的
{ Object o=null;
 try
 {
 o=super.clone();  //因为会跑出异常所以我们要进行异常捕获
 }
 catch(CloneNotSupportedException e)
  {
   System.out.println("NOT SUPPPORTED CLONE");
  }
 return o;
}


}


class Test  //主函数
{
 
 void change(Student st)
 {
  
 }
 public static void main(String []args)
 {
  
  Professior pro=new Professior(40,"laowang");
  Student st=new Student(20,"xiaoyue",pro);
  Student st2=(Student)st.clone();  //克隆Student这个类的此对象
  st2.age=33;//对拷贝进行赋值
  System.out.println(st.age);  //输出原来的值
  st2.p.age=66; //对教授进行赋值
  System.out.println(st.p.age);
  
  
  
 }
 
 
 
}

 

 

 

 

目录
相关文章
|
4天前
|
Java 数据库连接 数据库
【潜意识Java】深度分析黑马项目《苍穹外卖》在Java学习中的重要性
《苍穹外卖》项目对Java学习至关重要。它涵盖了用户管理、商品查询、订单处理等模块,涉及Spring Boot、MyBatis、Redis等技术栈。
24 4
|
4天前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
21 4
|
4天前
|
存储 移动开发 算法
【潜意识Java】Java基础教程:从零开始的学习之旅
本文介绍了 Java 编程语言的基础知识,涵盖从简介、程序结构到面向对象编程的核心概念。首先,Java 是一种高级、跨平台的面向对象语言,支持“一次编写,到处运行”。接着,文章详细讲解了 Java 程序的基本结构,包括包声明、导入语句、类声明和 main 方法。随后,深入探讨了基础语法,如数据类型、变量、控制结构、方法和数组。此外,还介绍了面向对象编程的关键概念,例如类与对象、继承和多态。最后,针对常见的编程错误提供了调试技巧,并总结了学习 Java 的重要性和方法。适合初学者逐步掌握 Java 编程。
14 1
|
3月前
|
XML Java 编译器
Java学习十六—掌握注解:让编程更简单
Java 注解(Annotation)是一种特殊的语法结构,可以在代码中嵌入元数据。它们不直接影响代码的运行,但可以通过工具和框架提供额外的信息,帮助在编译、部署或运行时进行处理。
115 43
Java学习十六—掌握注解:让编程更简单
|
2月前
|
安全 Java
Java中WAIT和NOTIFY方法调用时机的深层解析
在Java多线程编程中,`wait()`和`notify()`方法的正确使用对于线程间的协调至关重要。这两个方法必须在同步块或同步方法中调用,这一规定的深层原因是什么呢?本文将深入探讨这一机制。
55 5
|
3月前
|
存储 SQL 小程序
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
这篇文章详细介绍了Java虚拟机(JVM)的运行时数据区域和JVM指令集,包括程序计数器、虚拟机栈、本地方法栈、直接内存、方法区和堆,以及栈帧的组成部分和执行流程。
53 2
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
|
2月前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
2月前
|
消息中间件 缓存 Java
java nio,netty,kafka 中经常提到“零拷贝”到底是什么?
零拷贝技术 Zero-Copy 是指计算机执行操作时,可以直接从源(如文件或网络套接字)将数据传输到目标缓冲区, 而不需要 CPU 先将数据从某处内存复制到另一个特定区域,从而减少上下文切换以及 CPU 的拷贝时间。
java nio,netty,kafka 中经常提到“零拷贝”到底是什么?
|
2月前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
3月前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
68 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用

热门文章

最新文章