zoukankan      html  css  js  c++  java
  • java中的clone方法

    //测试类  
    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


    我喜欢程序员,他们单纯、固执、容易体会到成就感;面对压力,能够挑灯夜战不眠不休;面对困难,能够迎难而上挑战自我。他
    们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想“用智慧开创属于自己的事业”。我想说的是,其
    实我是一个程序员

    ==============================================================================
  • 相关阅读:
    基于接口的动态代理和基于子类的动态代理
    JDBC连接数据库
    关于使用Binlog和canal来对MySQL的数据写入进行监控
    使用VMware12在CentOS7上部署docker实例
    VMWare12pro安装Centos 6.9教程
    读《Java并发编程的艺术》学习笔记(十)
    读《Java并发编程的艺术》学习笔记(九)
    读《Java并发编程的艺术》学习笔记(八)
    读《Java并发编程的艺术》学习笔记(七)
    读《Java并发编程的艺术》学习笔记(六)
  • 原文地址:https://www.cnblogs.com/rollenholt/p/2070613.html
Copyright © 2011-2022 走看看