Java复制构造函数

2020-12-15 10:37:59 浏览数 (1)

参考链接: Java中的构造方法重载

//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 人点赞