Java复制构造函数

来源:互联网 发布:excel两个表格数据对比 编辑:程序博客网 时间:2024/05/16 02:59
//Example:  //1.Clock类:  public class Clock {   private int hour;   private int minute;   private int second;      public Clock(){    setTime(0,0,0);   }      public Clock(int h,int m,int s){    setTime(h,m,s);   }      /* 拷贝构造函数 */   public Clock(Clock clock){   ///对象做参数  this.hour=clock.hour;    this.minute=clock.minute;    this.second=clock.second;   }      public int getHour() {    return hour;   }   public int getMinute() {    return minute;   }   public int getSecond() {    return second;   }   public void setTime(int h,int m,int s){    if(h>=0 && h<24)     this.hour=h;    else     this.hour=0;        if(m>=0 && m<60)     this.minute=m;    else     this.minute=0;        if(s>=0 && s<60)     this.second=s;    else     this.second=0;   }      public void printTime(){    if(this.hour<10)     System.out.print("0");    System.out.print(this.hour+":");        if(this.minute<10)     System.out.print("0");    System.out.print(this.minute+":");        if(this.second<10)     System.out.print("0");    System.out.println(this.second);   }  }  //2.main函数:  public class Program {   public static void main(String[] args) {    Clock c1=new Clock(6,43,23);    Clock c2=new Clock(c1);//调用拷贝构造函数    c1.printTime();    c2.printTime();   }  }  //3.运行结果:  06:43:23  06:43:23  

----------------------------------------------------------------------------------

构造函数只能进行浅copy,就是只能复制简单类型如int,float数据到另一副本。

如果对象中包含了对象等复杂类型,浅拷贝对象其实是对象的引用,而不是重新生成一个新副本。这时,如果对一个实例的内部类类型修改,其他实例的内部类类型也会被修改。这时就需要copy构造函数来进行深复制(也就是使对象中包含的类等复杂类型使用值赋值,而不是引用赋值)

----------------------------------------------------------------------------------

构造方法是一种特殊的方法,它是一个与类同名且没有返回值类型的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。当类实例化一个对象时会自动调用构造方法。构造方法和其他方法一样也可以重载。

拷贝构造方法就是用一个已经实例化的对象来new另一个对象

给个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Test {
    private int hour;
    private int minute;
    private int second;
 
    // 构造方法
    public Test() {
 
    }
 
    // 拷贝构造方法
    public Test(Test t) {
        super();
        this.hour = t.hour;
        this.minute = t.minute;
        this.second = t.second;
    }
 
}

0 0
原创粉丝点击