易截截图软件、单文件、免安装、纯绿色、仅160KB

java拷贝对象

这是我个人的理解,加上以前看的一些帖子,有不对的地方,请高人指点。
1.作为java参数传递给一个函数的对象,除了很简单的如int或者boolean等简单的以外,传递的都是这个对象的引用。
当在接收函数中改变这个对象的时候,原来的对象即被改变。
2.在初始化一个对象的时候,有时候我们希望用一个已经存在的对象来给另外一个对象赋值,但是直接用“=”给另外一个
对象赋值的话,是错误的,这样会使两个不同的对象名字指向同一个对象。改变其中任何一个都会引起该对象的改变。
下面我们实验一下用一个对象给另外一个对象赋值:public class Student {
private int age;
private String name;
public Student(int age, String name) {
this.age = age;
this.name = name;
}
public void show() {
System.out.println(this.age + "" + this.name);
}

public void setAge()
{
this.age = 10;
}
}
public class test {
public static void main(String as[]) {
Student s = new Student(1, "name");
Student temp = s;
temp.setAge();
temp.show();
s.show();
}
}

上述代码运行结果如下:
10name
10name
结果表明,虽然是用student的对象s给temp赋值,但是temp和s是指向同一个对象的,temp指向的对象改变age的时候,s指向的对象的age也改变了。不是我们希望得到的。
在C++中,有深拷贝和浅拷贝两个概念,java中,我们用Cloneable接口来完全复制一个对象。
参考下面的代码:
public class BankAccount implements Cloneable {
private double balance;
public BankAccount(double ini) {
this.balance = ini;
}
protected Object clone() {
BankAccount bankAccount = null;
try {
bankAccount = (BankAccount) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return bankAccount;
}
public void add(double give) {
this.balance += give;
}
public void redu(double give) {
this.balance -= give;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
}

我们令BankAccount实现Cloneable接口,实现其父类(就是Object类)的clone函数。
看一下clone函数的doc:
Cr


相关文档:

Effective Java 学习笔记(13)

影响模块设计好与坏的一个重要因素就是这个模块是否隐藏它的内部数据和其他一些实现细节。
信息隐藏的好处:方便独立开发,测试,优化,使用,理解和修改。能够提高系统开发速(因为各模块可以并行开发),也能易于维护和调试,也能减少系统构建的风险。
要设计良好的模块,规则很简单,就一句话:使每个类或接口尽量不可 ......

Java Web 第五天 Web状态管理

一、
为什么要
Web
状态管理
对于每个容器而言每个请求都相当于一个新的客户,因为当服务器生成
Response
返回到客户端,在客户端显示出来后相对应的
Socket
就会关闭,所以
HTTP
协议是个无状态的协议,他不能保存当前用户的信息。
二、
实现状态管理的方式
1.      

在网 ......

Java Web 第六天 作用域及监听器

一、
web
的三种作用域
ServletContext(
上下文
)
:整个
web
应用程序,线程不安全
HttpSession(
会话
)
:一个会话交互过程
ServletRequest(
请求
)
:一次请求过程
属性操作方法:
      

void setAttribute(String,Object)
       ......

Java类加载内幕

  类加载是java语言提供的最强大的机制之一。尽管类加载并不是讨论的热点话题,但所有的编程人员都应该了解其工作机制,明白怎么做才能让其满足我们的需要。这能有效节省我们的编码时间,从不断调试ClassNotFoundException, ClassCastException的工作中解脱出来。
  这篇文章从基础讲起,比如代码和数据的不同之处是什 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号