<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. java語言

    Java里的clone方法

    時間:2025-04-03 17:53:37 java語言 我要投稿
    • 相關推薦

    Java里的clone方法

      Java語言的一個優點就是取消了指針的概念,但也導致了許多程序員在編程中常常忽略了對象與引用的區別,特別是先學c、c++后學java的程序員。并且由于 Java不能通過簡單的賦值來解決對象復制的問題,在開發過程中,也常常要要應用clone()方法來復制對象。比如函數參數類型是自定義的類時,此時便是引用傳遞而不是值傳遞。以下是為大家分享的Java里的clone方法,供大家參考借鑒,歡迎瀏覽!

      以下是一個小例子:

      1

      2

      3

      public class A {

      public String name;

      }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      public class testClone {

      public void changeA(A a){

      a.name="b";

      }

      public void changInt(int i){

      i=i*2+100;

      }

      /**

      * @param args

      */

      public static void main(String[] args) {

      // TODO Auto-generated method stub

      testClone test=new testClone();

      A a=new A();

      a.name="a";

      System.out.println("before change : a.name="+a.name);

      test.changeA(a);

      System.out.println("after  change : a.name="+a.name);

      int i=1;

      System.out.println("before change : i="+i);

      test.changInt(i);

      System.out.println("after  change : i="+i);

      }

      此時輸出的結果是:

      before change : a.name=a

      after change : a.name=b

      before change : i=1

      after change : i=1

      從這個例子知道Java對對象和基本的數據類型的處理是不一樣的。在Java中用對象的作為入口參數的傳遞則缺省為"引用傳遞",也就是說僅僅傳遞了對象的一個"引用",這個"引用"的概念同C語言中的指針引用是一樣的。當函數體內部對輸入變量改變時,實質上就是在對這個對象的直接操作。

      除了在函數傳值的時候是"引用傳遞",在任何用"="向對象變量賦值的時候都是"引用傳遞",如:

      1

      2

      3

      4

      5

      6

      7

      A a1=new A();

      A a2=new A();

      a1.name="a1";

      a2=a1;

      a2.name="a2";

      System.out.println("a1.name="+a1.name);

      System.out.println("a2.name="+a2.name)

      此時輸出的結果是:

      a1.name=a2

      a2.name=a2

      如果我們要用a2保存a1對象的數據,但又不希望a2對象數據被改變時不影響到a1。實現clone()方法是其一種最簡單,也是最高效的手段。

      下面我們來實現A的clone方法

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      public class A implements Cloneable {

      public String name;

      public Object clone() {

      A o = null;

      try {

      o = (A) super.clone();

      } catch (CloneNotSupportedException e) {

      e.printStackTrace();

      }

      return o;

      }

      }

      首先要實現Cloneable接口,然后在重載clone方法,最后在clone()方法中調用了super.clone(),這也意味著無論clone類的繼承結構是什么樣的,super.clone()直接或間接調用了java.lang.Object類的clone()方法。

      1

      2

      3

      4

      5

      6

      7

      A a1=new A();

      A a2=new A();

      a1.name="a1";

      a2=(A)a1.clone();

      a2.name="a2";

      System.out.println("a1.name="+a1.name);

      System.out.println("a2.name="+a2.name);

      此時輸出的結果是:

      a1.name=a1

      a2.name=a2


    【Java里的clone方法】相關文章:

    Java中的clone方法08-15

    java虛方法05-16

    java入門方法04-24

    java調用的方法04-20

    java方法重寫的方法分析03-03

    java顯示圖片的方法02-22

    java泛型方法04-02

    java傳值的方法06-24

    java圖像處理的方法12-28

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人