java - clone()
<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>
java clone()是什麼,讓我們一起了解一下?
clone()屬於clone中的一種,有淺克隆和深克隆。在Java中,clone方法被對象調用,所以會複製對象,所謂的複製對象,首先要分配一個和源對象同樣大小的空間,在這個空間中創建一個新的對象。
要想了解clone(),首先要知道clone方法是什麼?
clone方法是返回與當前對象的一個副本對象,可以透過操作副本對象而不影響當前對象。使用clone方法需要實現Cloneable接口,並重寫Object方法中的clone方法。
需要注意的是在clone在Object中是project修飾符。因爲所有類都是Object的子類,所以如果不實現clone方法,在類中可以直接使用父類的clone方法,但是其對象在別的類中不能調用clone方法。所以必須重寫clone方法。
那clone()在java應用中扮演者什麼角色?(以淺克隆爲例)
1、被複制的類需要實現Clonenable接口(不實現的話在調用clone方法會拋出CloneNotSupportedException異常), 該接口爲標記接口(不含任何方法)。
2、覆蓋clone()方法,訪問修飾符設爲public。方法中調用super.clone()方法得到需要的複製對象。
具體操作代碼如下:
class Student implements Cloneable{ private int number; public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } @Override public Object clone() { Student stu = null; try{ stu = (Student)super.clone(); }catch(CloneNotSupportedException e) { e.printStackTrace(); } return stu; } } public class Test { public static void main(String args[]) { Student stu1 = new Student(); stu1.setNumber(12345); Student stu2 = (Student)stu1.clone(); System.out.println("學生1:" + stu1.getNumber()); System.out.println("學生2:" + stu2.getNumber()); stu2.setNumber(54321); System.out.println("學生1:" + stu1.getNumber()); System.out.println("學生2:" + stu2.getNumber()); } }
輸出結果:
學生1:12345 學生2:12345 學生1:12345 學生2:54321