这里有新鲜出炉的Java函数式编程,程序狗速度看过来!
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
下面小编就为大家带来一篇浅谈Java中的克隆close()和赋值引用的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
学生类Student:
- package克隆clone;
- /*要克隆必须实现这个借口:Cloneable,以标记这个对象可以克隆
- Cloneable:此类实现了 Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制。
- 这个接口是标记接口,告诉我们实现该接口的类就可以实现对象的复制了。
- */
- public class Student implements Cloneable {
- private String name;
- private int age;
- public Student() {}
- public Student(String name, int age) {
- super();
- this.name = name;
- this.age = age;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- // 重写克隆方法子列才可以调用
- @Override protected Object clone() throws CloneNotSupportedException {
- return super.clone();
- }
- }
测试克隆学生类:
- package克隆clone;
- /*
- * protected void finalize():当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。用于垃圾回收,但是什么时候回收不确定。
- * protected Object clone():创建并返回此对象的一个副本。
- * A:重写该方法
- *
- * Cloneable:此类实现了 Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制。
- * 这个接口是标记接口,告诉我们实现该接口的类就可以实现对象的复制了。
- */
- public class StudentClone {
- public static void main(String[] args) throws CloneNotSupportedException {
- //创建学生对象
- Student s = new Student();
- s.setName("林青霞");
- s.setAge(27);
- //克隆学生对象
- Object obj = s.clone();
- Student s2 = (Student) obj;
- System.out.println("---------");
- System.out.println(s.getName() + "---" + s.getAge());
- System.out.println(s2.getName() + "---" + s2.getAge());
- //以前的做法
- Student s3 = s;
- System.out.println(s3.getName() + "---" + s3.getAge());
- System.out.println("---------");
- //其实是有区别的
- s3.setName("刘意");
- s3.setAge(30);
- System.out.println(s.getName() + "---" + s.getAge());
- System.out.println(s2.getName() + "---" + s2.getAge());
- System.out.println(s3.getName() + "---" + s3.getAge());
- System.out.println("---------");
- //把克隆的改一下呢?
- s2.setName("克隆改的名称");
- s2.setAge(66);
- System.out.println(s.getName() + "---" + s.getAge());
- System.out.println(s2.getName() + "---" + s2.getAge());
- System.out.println(s3.getName() + "---" + s3.getAge());
- //也就是说把一个对象的引用赋值给一个引用,当这个引用发什么该改变的时候,同一个引用指向的对象会发生改变,但是克隆的不会变化,
- //把克隆的对象改变他的一些属性,那么也不会影响到其他的对象的值的改变
- }
- }
以上就是小编为大家带来的浅谈Java中的克隆close()和赋值引用的区别的全部内容了,希望对大家有所帮助,多多支持PHPERZ~
来源: http://www.phperz.com/article/17/1113/359839.html