clone()方法 与new constructor()构造器创建对象不同 是克隆一个新的对象

package com.swift;

public class Clone_Test {

    public static void main(String[] args) {
Person p = new Person(23, "zhang");
Person p1 = p; System.out.println(p);
System.out.println(p1);
} } class Person{
private int age;
private String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
}

Person p1=p; 这个不是对象的克隆 是引用的复制 因为p p1的地址相同

克隆的方法

实现Cloneable接口 覆写clone()方法 克隆要先克隆父类 所以要super.clone();

package com.swift;

public class Clone_Test {

    public static void main(String[] args) throws CloneNotSupportedException {
Person p = new Person(23, "zhang");
Person p1 = (Person) p.clone(); System.out.println(p);
System.out.println(p1);
}
} class Person implements Cloneable{
private int age;
private String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}

这是克隆的p1和p的内存地址已经不同

如果要克隆的对象中还包含其他对象

则克隆后的对象是 浅拷贝 的而不是 深拷贝 的 克隆前后对象中的对象都是同一个对象

如果要深拷贝则要在clone() 方法中把对象中的对象也进行克隆

class Body implements Cloneable{
public Head head;
public Body() {}
public Body(Head head) {this.head = head;} @Override
protected Object clone() throws CloneNotSupportedException {
Body newBody = (Body) super.clone(); //克隆了body
newBody.head = (Head) head.clone(); //深入克隆newBody中的对象
return newBody;
} }

完全的深拷贝是不可能的,如果head还有face face还有eye,如果不一只深克隆下去就无法实现完全的深克隆

所以面试题通常都有的一句是super.clone();

java基础面试题:写clone()方法时,通常都有一行代码,是什么?的更多相关文章

  1. 写clone()方法时,通常都有一行代码,是什么?

    clone 有缺省行为,super.clone();因为首先要把父类中的成员复制到位,然后才是复制自己的成员.

  2. java基础面试题(转)

    JAVA相关基础知识1.面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时 ...

  3. 一份最贴近真实面试的Java基础面试题

    这是一份Java基础知识的面试题.在网上的关于Java的面试题数不胜数,但认真看过感觉大多数都没有实用性,有很多是面试官根本就不会问到的,那些已经脱离了实际开发的技术问题.而这份资料来源自一份个人觉得 ...

  4. java基础面试题-1

    1.一个Java源文件中是否可包含多个类?有什么限制?     可以包含多个类,但只能有一个public类,并且public类名必须与文件名相同. 2.说说&和&&的区别 &a ...

  5. Java 基础面试题

    1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,并且public的类名必须与文件名一致 2.Java有没有 ...

  6. 2017常见的50道java基础面试题整理(附答案)

    1.作用域public,private,protected,以及不写时的区别 答: 区别如下: 2.Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是 ...

  7. [改善Java代码]覆写equals方法时不要识别不出自己

    建议45: 覆写equals方法时不要识别不出自己 我们在写一个JavaBean时,经常会覆写equals方法,其目的是根据业务规则判断两个对象是否相等,比如我们写一个Person类,然后根据姓名判断 ...

  8. 100道Java基础面试题收集整理(附答案)

    不积跬步无以至千里,这里会不断收集和更新Java基础相关的面试题,目前已收集100题. 1.什么是B/S架构?什么是C/S架构 B/S(Browser/Server),浏览器/服务器程序 C/S(Cl ...

  9. Java基础面试题集(一)

    Java基础面试题 一.面向对象编程(OOP) 7 二.常见的Java问题 7 2.1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? 7 2.2.JDK和JRE的区别是什么? ...

随机推荐

  1. Windows平台Anaconda使用笔记

    1.官网下载anaconda安装. 2.将命令行工具路径加入系统环境变量 C:\ProgramData\Anaconda3\ScriptsC:\ProgramData\Anaconda3\Librar ...

  2. html5 替换 历史 记录

    history.replaceState({url:"/admin/index"},null,"/admin/index"); url 是 需要替换的路径

  3. Testlink安装配置时常见问题解决

    1.windows下安装testlink,进入安装页面后,在检查一些相关配置环境时报错,如下: Checking if /var/testlink/logs/ directory exists [S] ...

  4. 将GPT转换成MBR

    准备一个pe启动盘 1.单击”运行“在弹出来的窗口输入cmd回车 2.在输入“diskpart”回车 3.在输入“list disk”显示硬盘信息,查看那个盘是gpt分区类型 4.输入“select ...

  5. grep 显示匹配行的上下n行

    grep -C 5 foo file 显示file文件中匹配foo字串那行以及上下5行grep -B 5 foo file 显示foo及前5行grep -A 5 foo file 显示foo及后5行

  6. Gym 101047K Training with Phuket's larvae

    http://codeforces.com/gym/101047/problem/K 题目:给定n<=2000条绳子,要你找出其中三条,围成三角形,并且要使得围成的三角形面积最小 思路: 考虑一 ...

  7. 白话SpringCloud | 第一章:什么是SpringCloud

    前言 作为SpringCloud的正式第一章,我们先来简单了解下SpringCloud相关知识点吧,内容可能比较多. 何为微服务 传统单体架构 服务化架构 微服务架构 什么是SpringCloud 核 ...

  8. 引用 Session详解 作者:郎云鹏

    本文转载自leeldy<Session详解 作者:郎云鹏>   引用 leeldy 的 Session详解 作者:郎云鹏 目录: 一.术语session 二.HTTP协议与状态保持 三.理 ...

  9. android打开文件、保存对话框、创建新文件夹对话框(转载)

    转载地址:点击打开 这是一个简单的只有3个按钮的程序,3个按钮分别对应三种工作的模式(保存.打开和文件夹选择).封装的SimpleFileDialog.java的内容如下: package com.e ...

  10. hibernate课程 初探单表映射3-2 基本类型

    本节内容:(介绍基本类型) 1 数据类型 简介 2 时间类型 简介 3 时间类型 demo 1 hibernate类型 java类型   integer/int java.lang.Integer/i ...