<delect id="sj01t"></delect>
  1. <em id="sj01t"><label id="sj01t"></label></em>
  2. <div id="sj01t"></div>
    1. <em id="sj01t"></em>

            <div id="sj01t"></div>
            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

            <delect id="sj01t"></delect>
            1. <em id="sj01t"><label id="sj01t"></label></em>
            2. <div id="sj01t"></div>
              1. <em id="sj01t"></em>

                      <div id="sj01t"></div>
                      黄色视频在线观看