java中的clone方法
2011-06-03 10:25 Rollen Holt 阅读(926) 评论(0) 编辑 收藏 举报//测试类 public class Exec { public static void main(String args[]) { // 新建图书集合类变量,修改部分图书信息 BookCollection bc1 = new BookCollection(10); bc1.getBooks()[0].setBookID(100); bc1.getBooks()[1].setISBN("9601000980"); // 使用clone方法实现类变量复制 BookCollection bc2 = (BookCollection) bc1.clone(); System.out.println(bc2.getBooks()[0].getBookID()); System.out.println(bc2.getBooks()[1].getISBN()); } } // 支持类变量复制的图书集合类 class BookCollection implements Cloneable { // 存储所有图书类变量的数组 private Book[] books = null; // 图书总数 private int number; // 默认构造函数 public BookCollection() { } // 该构造函数按照指定数量初始化图书类变量数组 public BookCollection(int number) { this.number = number; books = new Book[number]; // 每个图书类变量的ID都是一个从1开始连续分配的整数 for (int i = 0; i < books.length; i++) { books[i] = new Book(i + 1); } } // 支持类变量复制的重要方法 public Object clone() { // 新建图书集合类变量 BookCollection result = new BookCollection(); // 将新建类变量的所有图书信息设置与当前图书信息相同 result.books = new Book[number]; for (int i = 0; i < number; i++) { result.books[i] = (Book) books[i].clone(); } return result; } // 图书数组的读取函数 public Book[] getBooks() { return books; } } // 图书类 class Book implements Cloneable { // 图书ID号 private int bookID; // 图书的ISBN号 private String ISBN; // 图书的标题 private String title; // 默认构造函数 public Book() { } // 该构造函数只对图书ID进行初始化 public Book(int bookID) { setBookID(bookID); } // 该构造函数对图书ID号,ISBN号和标题进行初始化 public Book(int bookID, String ISBN, String title) { setBookID(bookID); setISBN(ISBN); setTitle(title); } // 图书ID的读取函数 public int getBookID() { return bookID; } // 图书ID的设置函数 public void setBookID(int bookID) { this.bookID = bookID; } // ISDN号的读取函数 public String getISBN() { return ISBN; } // ISDN号的设置函数 public void setISBN(String ISBN) { this.ISBN = ISBN; } // 图书标题的读取函数 public String getTitle() { return title; } // 图书标题的设置函数 public void setTitle(String title) { this.title = title; } // 支持类变量复制的重要方法 public Object clone() { Object obj = null; try { // 直接调用Object类提供的clone方法复制当前类变量 // 如果当前类变量有其他类变量的引用属性,则不应该使用此方法,而应写为 // obj = new Book(); // ((Book)obj).setBookID(bookID); // ((Book)obj).setISBN(ISBN); // ((Book)obj).setTitle(title); obj = super.clone(); } catch (Exception e) { System.out.println(e.getMessage()); } return obj; } }
==============================================================================
本博客已经废弃,不在维护。新博客地址:http://wenchao.ren
我喜欢程序员,他们单纯、固执、容易体会到成就感;面对压力,能够挑灯夜战不眠不休;面对困难,能够迎难而上挑战自我。他
们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想“用智慧开创属于自己的事业”。我想说的是,其
实我是一个程序员
==============================================================================