Java学习笔记----你可能不知道那些知识,对象复制与引用
1.private ,protected,static不能用来修饰interface。
2.java在处理基本数据类型(比如int ,char,double)时,都是採用按值传递的方式运行。除此之外的其他类型都是按引用传递的方式运行。对象除了在函数调用时时引用传递,在使用“=”赋值时也是採用引用传递。
3.怎样在java中进行对象的复制。而不是引用。举例:
class Obj implements Cloneable{
	private int a=0;
	public int getA(){
		return a;
	}
	public void setA(int b){
		this.a=b;
	}
	public void changedA(){
		this.a=1;
	}
	public Object clone(){
		Object o=null;
		try{
		0=(Obj)super.clone();
		}catch(CloneNotSupportedException e){
			e.printStatckTrace();
		}
		return o;
	}
}
public class TestRef{
	public static void main(String args[]){
		Obj a= new Obj();
		Obj b=(Obj)a.clone();
		b.changedA();
		System.out.println("a:"+a.getA());
		System.out.println("b:"+b.getA());
	}
}
程序执行结果为:
a:0
b:1
因此要赋值一个类,必须实现Cloneable接口。步骤:
(1)实现clone的累首先要继承Cloneable接口。
Cloneable接口实质是一个标识接口(没有不论什么方法,即空接口)
(2)在类中重写Object类的clone()方法。
(3)在clone()方法中调用super.clone().
(4)把浅复制的引用指向原型对象新的克隆体。
当类中有除基本数据以外的其他复杂对象属性时,在重写clone()方法时要对非基本类型的属性完毕深复制。举比例如以下:
class Obj implements Cloneable{
private Date birthday = new Date();
	private int a=0;
	public int getA(){
		return a;
	}
	public void setA(int b){
		this.a=b;
	}
	public void changedA(){
		this.a=1;
	}
	public Date getDate(){
		return birthday();
	}
	public void setDate(Date date){
		this.birthday = date;
	}
    public void changeDate(){
		this.birthday.setMonth(4);
    }
	public Object clone(){
		Object o=null;
		try{
		0=(Obj)super.clone();
		}catch(CloneNotSupportedException e){
			e.printStatckTrace();
		}
	//实现深复制
	o.birthday=(Date)this.getDate().clone();
		return o;
	}
}
public class TestRef{
	public static void main(String args[]){
		Obj a= new Obj();
		Obj b=(Obj)a.clone();
		b.changedA();
		System.out.println("a:"+a.getA());
		System.out.println("b:"+b.getA());
	}
}
浅复制和深复制的差别:
浅复制:被复制对象的全部变量都含有与原来对象同样的值,而全部其它对象的引用仍然指向原来的对象同样的值,而全部对其它对象的引用仍然指向原来的对象。
深复制:被复制对象的全部变量都含有与原来对象同样的值。出去那些引用其它对象的变量。
那些引用其它对象变量将指向被复制的新对象,而不再是原有的那些被引用的对象都复制了一遍。
Java学习笔记----你可能不知道那些知识,对象复制与引用的更多相关文章
- Java学习笔记(二)——类和对象
		
[1]类是模子,确定对象将会拥有的特征(属性)和行为(方法). [2]类的特点:类是对象的类型: 具有相同属性和方法的一组对象的集合. [3]属性:对象具有的各种特征(每个对象的每个属性都拥有特定值) ...
 - Effictive Java学习笔记1:创建和销毁对象
		
建议1:考虑用静态工厂方法代替构造器 理由:1)静态方法有名字啊,更容易懂和理解.构造方法重载容易让人混淆,并不是好主意 2)静态工厂方法可以不必每次调用时都创建一个新对象,而公共构造函数每次调用都会 ...
 - Java学习笔记【四、类、对象、接口】
		
编程语言的发展 机器语言 过程语言 面向对象编程--封装.继承.多态 关键字 extends implements override overload super this static abstra ...
 - Java学习笔记【一、环境搭建】
		
今天把java的学习重新拾起来,一方面是因为公司的项目需要用到大数据方面的东西,需要用java做语言 另一方面是原先使用的C#公司也在慢慢替换为java,为了以后路宽一些吧,技多不压身 此次的学习目标 ...
 - java学习笔记之基础篇
		
java选择语句之switch //switch可以用于等值判断 switch (e) //int ,或则可以自动转化成int 的类型,(byte char short)枚举jdk 7中可以防止字 ...
 - 20145330《Java学习笔记》第一章课后练习8知识总结以及IDEA初次尝试
		
20145330<Java学习笔记>第一章课后练习8知识总结以及IDEA初次尝试 题目: 如果C:\workspace\Hello\src中有Main.java如下: package cc ...
 - JAVA学习笔记—review基本知识[反射与异常]
		
JAVA学习笔记—review基本知识[反射与异常] 1.异常: 1.1异常的分类: Java会将所有的异常封装成对象,其根本父类为Throwable. Throwable有两个子类:Error 和E ...
 - Java学习笔记4
		
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
 - 《Java学习笔记(第8版)》学习指导
		
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
 
随机推荐
- HTTP的缺点与HTTPS
			
a.通信使用明文不加密,内容可能被窃听 b.不验证通信方身份,可能遭到伪装 c.无法验证报文完整性,可能被篡改 HTTPS就是HTTP加上加密处理(一般是SSL安全通信线路)+认证+完整性保护
 - 扩展 IHttpModule
			
上篇提到请求进入到System.Web后,创建完HttpApplication对象后会执行一堆的管道事件,然后可以通过HttpModule来对其进行扩展,那么这篇文章就来介绍下如何定义我们自己的mod ...
 - 关闭  将jar或者aar发布到到mvn 中(用github作为仓库), 通过gradle dependency 方式集成
			
使用Android Studio开发的用户,都希望通过maven远程仓库的方式来集成jar.aar文件,但是这些文件时如何发布的呢? 通常开发者都会将jar文件发布到sonatype上,以提供给其他开 ...
 - C# 后台调用存储过程
			
例一丶返回集合 [WebMethod] public object RegisterMethod(string type, string username, string password, stri ...
 - 复制Windows的等宽字体到Linux
			
1.从Windows的Fonts目录下复制字体 2.在Linux的/usr/share/fonts目录下创建子目录例如:sudo mkdir /usr/share/fonts/win 3.复制字体到该 ...
 - Spring对象类型——单例和多例
			
由于看淘淘商城的项目,涉及到了项目中处理spring中bean对象的两种类型,分别是单例和多例,就在此记录一下,方便加深理解,写出更加健壮的代码. 一.单例和多例的概述 在Spring中,bean可以 ...
 - BZOJ 3144 切糕 最小割
			
题意: 一个矩阵,每个格子分配一个数,不同的数字,代价不同,要求相邻格子数字差小等于d 求最小代价. 分析: 我猜肯定有人看题目就想到最小割了,然后一看题面理科否决了自己的这个想法…… 没错,就是最小 ...
 - while(n--)
			
while(n--)的意思:先判断n是否等于0,如果等于0,就不循环.如果不等于0,就进入循环,同时n的值减1.一直等到n=0才退出while循环. C语言.C++
 - MyBatis 实现分页功能
			
MySQL 的分页功能是基于内存的分页(即查出来所有记录,再按起始位置和页面容量取出结果). 案例:①根据用户名(支持模糊查询).用户角色 id 查询用户列表(即根据用户名称或根据用户角色 id 又或 ...
 - mysql   explain的使用
			
一.explain返回各列的含义: 1.table:显示这一行的数据是关于那张表的 2.type:重要的列,显示连接使用了何种类型,从最好到最差的连接类型为const.eq_reg.ref.range ...