`
jackleechina
  • 浏览: 585497 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

java 复习笔记——java中的传参及对象的clone()方法

    博客分类:
  • java
 
阅读更多
一)
在Java中,传参时,都是以传值的方式进行。
对于基本数据类型,传递的是数据的拷贝;对于引用类型,传递的引用的拷贝。
二)
为了获取对象的一份拷贝,我们可以利用Object类的clone()方法。
在派生类中覆盖基类的clone()方法,并声明为public。
在派生类的clone()方法中,调用super.clone()。
在派生类中实现Cloneable接口。
三)为什么我们在派生类中覆盖Object的clone()方法时,一定要调用super.clone()呢?
在运行时刻,Object中的clone()识别出你要复制的是哪一个对象,然后为此对象分配空间,并进行对象的复制,将原始对象的内容一一复制到新对象的存储空间中。
四)
class StringTest
{
	public static void change(int x,int y)
	{
		x=x+y;
		y=x-y;
		x=x-y;
	}
	public static void change(int[] num)
	{
		num[0]=num[0]+num[1];
		num[1]=num[0]-num[1];
		num[0]=num[0]-num[1];
	}
	public static void change(Point pt)
	{
		pt.x=pt.x+pt.y;
		pt.y=pt.x-pt.y;
		pt.x=pt.x-pt.y;
	}
	
	public static void main(String[] args)
	{
		/*int x=3;
		int y=4;
		change(x,y);
		System.out.println("x="+x+","+"y="+y);*/
		/*int[] num=new int[]{3,4};
		change(num);
		System.out.println("x="+num[0]+","+"y="+num[1]);*/
		/*Point pt=new Point();
		pt.x=3;
		pt.y=4;
		change(pt);
		//System.out.println("x="+pt.x+","+"y="+pt.y);
		System.out.println(pt);*/
		//System.out.println(args[0]);
		/*if(args.length>0)
		{
			for(int i=0;i<args.length;i++)
			{
				System.out.println(args[i]);
			}
		}*/
		/*String str1=new String("abc");
		String str2=new String("abc");
		String str3=str1;*/
		/*if(str1==str2)
		{
			System.out.println("str1==str2");
		}
		else
		{
			System.out.println("str1!=str2");
		}*/
		/*if(str1==str3)
		{
			System.out.println("str1==str3");
		}
		else
		{
			System.out.println("str1!=str3");
		}*/
		/*if(str1.equals(str2))
		{
			System.out.println("str1 equals str2");
		}
		else
		{
			System.out.println("str1 not equals str2");
		}*/
		/*int i=3;
		float f=1.5f;
		char ch='f';
		boolean b=false;
		//System.out.println(str1+i+f+ch+b);
		StringBuffer sb=new StringBuffer();
		sb.append(str1).append(i).append(f).append(ch).append(b);
		//System.out.println(sb.toString());
		sb.delete(4,8);
		sb.insert(4,"mybole");
		System.out.println(sb);*/
		/*int[] num=new int[3];
		for(int i=0;i<num.length;i++)
		{
			System.out.println(num[i]);
		}
		num=null;*/
		/*Student[] students;
		students=new Student[3];
		for(int i=0;i<students.length;i++)
		{
			System.out.println(students[i]);
		}*/
		Professor p=new Professor("wangwu",50);
		Student s1=new Student("zhangsan",18,p);
		Student s2=(Student)s1.clone();
		/*s2.name="lisi";   //对于引用类型,调用clone()方法时,拷贝的是引用地址;String 比较特殊,
                            //因为String是常量,会在内存中另外分配一块内存
		s2.age=20;*/
		s2.p.name="lisi";
		s2.p.age=30;
		//System.out.println("name="+s1.name+","+"age="+s1.age);
		System.out.println("name="+s1.p.name+","+"age="+s1.p.age);
	}
}

class Professor implements Cloneable
{
	String name;
	int age;
	Professor(String name,int age)
	{
		this.name=name;
		this.age=age;
	}
	public Object clone()
	{
		Object o=null;
		try
		{
			o=super.clone();
		}
		catch(CloneNotSupportedException e)
		{
			System.out.println(e.toString());
		}
		return o;
	}
}
class Student implements Cloneable
{
	String name;
	int age;
	Professor p;
	Student(String name,int age,Professor p)
	{
		this.name=name;
		this.age=age;
		this.p=p;
	}
	public Object clone()
	{
		//Object o=null;
		Student o=null;
		try
		{
			o=(Student)super.clone();
		}
		catch(CloneNotSupportedException e)
		{
			System.out.println(e.toString());
		}
		o.p=(Professor)p.clone();
		return o;
	}
}
class Point
{
	int x,y;
	public String toString()
	{
		return "x="+x+","+"y="+y;
	}
}


摘自:孙鑫老师java视频
分享到:
评论

相关推荐

    java中的指针,引用及对象的clone

    Java中的对象克隆可以通过实现`Cloneable`接口并覆盖`clone()`方法来完成。对象的克隆分为浅拷贝和深拷贝两种形式。 **1. 浅拷贝** 浅拷贝是指创建一个新的对象,然后将原对象的所有非引用类型的成员变量复制到新...

    java_clone用法

    在Java中,`clone`方法提供了一种快速复制对象的方式。它属于`Object`类的一部分,但需要显式地在子类中声明并实现`Cloneable`接口才能正常使用。本文将详细介绍`clone`的基本概念、工作原理以及如何实现浅拷贝和深...

    Java中的clone方法详解_动力节点Java学院

    Java中的clone方法详解_动力节点Java学院,动力节点口口相传的Java黄埔军校

    Java中的克隆(Clone)机制

    在Java编程语言中,克隆(Clone)机制是一种创建对象副本的方法,它允许开发者创建一个已有对象的新实例,这个新实例与原对象具有相同的属性值,但却是两个独立的对象,彼此的操作不会互相影响。克隆机制在某些情况...

    java clone

    在Java中,`clone`方法主要用于创建一个现有对象的副本,这个副本与原始对象具有相同的数据值。这个方法是Object类的一个成员,因此所有的Java类都默认拥有`clone`方法。不过,需要注意的是,`clone`方法并不执行深...

    Java clone方法使用

    详细的描述了Java中 clone方法使用

    Java+复习笔记+源自宋红康老师视频+个人的一些理解

    本复习笔记结合了宋红康老师的教学视频,并融入了个人的学习理解和实践,旨在帮助学习者巩固Java的核心概念和技术。 一、Java基础语法 Java的基础语法是编程的基石,包括变量声明、数据类型(如整型、浮点型、字符...

    java-数组与方法及面向对象基础

    本教程将深入探讨Java中的数组、方法以及面向对象编程的基础概念,为初学者提供一个全面的学习指南。 一、数组 数组在Java中是存储同一类型数据的集合,可以看作是一个可变大小的容器。数组的定义和初始化通常包含...

    Linux学习笔记——入门资料

    Linux学习笔记——入门资料 Linux,作为一款开源、免费的操作系统,因其稳定性和安全性而备受开发者和系统管理员的青睐。这份“Linux学习笔记”旨在帮助初学者快速掌握Linux的基础知识和操作技能,从而轻松入门。 ...

    Java中clone方法共6页.pdf.zip

    在Java编程语言中,`clone()`方法是一个非常重要的概念,特别是在对象复制和克隆方面。这个方法来源于`java.lang.Object`类,所有Java类都默认继承了这个方法。本资料"Java中clone方法共6页.pdf.zip"可能包含了关于...

    java clone的小例子

    在Java编程语言中,`clone()`方法是一个非常重要的概念,特别是在对象复制和克隆方面。这个小例子将帮助初学者理解如何在Java中使用`clone()`来创建对象的副本。让我们深入探讨`clone()`方法以及它在实际编程中的...

    java软件开发——顶岗实习周记25篇.rar

    这份"java软件开发——顶岗实习周记25篇.pdf"文档,很可能是某个学生或初入职场的开发者在Java实习期间所记录的工作与学习心得,提供了宝贵的实战经验与反思。 首先,Java作为全球最流行的编程语言之一,其语法严谨...

    java考试复习资料

    ### Java考试复习资料详解 #### 一、架构模式:B/S与C/S - **B/S架构**(Browser/Server,浏览器/服务器)是一种通过Web浏览器进行访问的应用系统架构。客户端只需要一个Web浏览器即可,无需安装任何软件。所有的...

    effective java 读书笔记

    - Item11:谨慎覆盖clone方法,因为它涉及到对象的深拷贝,可能需要实现`Cloneable`接口并处理异常。 - Item12:实现Comparable接口使对象能够自我比较,这对于排序和集合操作非常有用。 5. **类和接口的设计** ...

    JAVA创建对象的四种方法

    -java 创建对象的四种方法是指在 Java 中创建对象的不同方式,它们分别是使用 new 语句创建对象、使用反射机制创建对象、使用 clone() 方法创建对象和使用反序列化机制创建对象。 - 使用 new 语句创建对象是 Java ...

    Java语言程序设计基础课后复习题答案第十三章

    Java 语言程序设计基础课后复习题答案第十三章 ...Java 语言程序设计基础课后复习题答案第十三章涵盖了 Java 语言的基础知识、对象和类、多态、接口、异常处理、日期和时间、compareTo 方法和 clone 方法等重要知识点。

    CoreJava学习笔记

    ### CoreJava学习笔记 #### 一、JAVA特点与运行原理 **JAVA特点:** 1. **简单性**:Java的设计者们将C++语言中许多不易理解和容易混淆的部分去除,使得Java更容易理解与掌握。 2. **面向对象**:Java几乎一切都...

    C#中Clone一个对象的值到另一个对象案例 c#经典案例.pdf

    在这篇文章中,我们将学习如何使用 C# 中的 Clone 方法来复制一个对象的值到另一个对象。 什么是 Clone? Clone 是一种复制对象的方法,它可以将一个对象的值复制到另一个对象中。 Clone 方法可以分为浅复制和深...

    java Clone

    Java中的`clone`方法是Java语言提供的一种复制对象的方式,它允许创建一个对象的副本,这个副本与原对象具有相同的属性值,但它们是两个独立的对象,修改副本不会影响原对象。`clone`方法存在于Java的`java.lang....

Global site tag (gtag.js) - Google Analytics