初始化一个对象的多个构造函数

初始化一个对象的多个构造函数

问题描述:

我想知道是否可以调用多个构造函数并通过它们初始化一个对象值。我一直在寻找答案,但我没有找到答案;让我告诉你一些代码,并提前感谢你的帮助:初始化一个对象的多个构造函数

int MAX_VALUE; // Field variable 
    boolean[] elements = new boolean[10000]; // Field variable 

    public IntegerSet(int maxValue) { 
     this.MAX_VALUE = maxValue; 
    } 
    public IntegerSet(boolean[] tmp) { 
     int i = 0; 

     for(i = 0; i < tmp.length; ++i) 
      this.elements[i] = tmp[i]; 

     this.elements = Arrays.copyOf(this.elements, tmp.length); 
    } 

/*In main:*/ 

    // I just want to have one object, s1, and I want to be able 
    // to access MAX_VALUE and elements by s1.MAX_VALUE and s1.elements 
    IntegerSet s1 = new IntegerSet(50); 
    /* SOMETHING that uses second constructor with object s1*/ 
+1

您可以从另一个构造函数中调用调用构造函数'这(args)' – Kon 2014-10-28 18:00:05

+0

为什么不使用setter? – aa333 2014-10-28 18:02:31

+0

是的,但如果我从构造函数1调用constructor2,那么我需要将constructor2的参数作为参数传递给constructor1。我不想这样做。 – 2014-10-28 18:04:24

你不能调用多个构造函数来创建一个类的实例。每次调用都会创建一个与另一个完全不同的新实例。同时设置int领域和使用构造数组,其值应传递给构造本身:

public IntegerSet(boolean[] tmp, int maxValue) { 
    this.MAX_VALUE = maxValue; 
    int i = 0; 

    for(i = 0; i < tmp.length; ++i) 
     this.elements[i] = tmp[i]; 

    this.elements = Arrays.copyOf(this.elements, tmp.length); 
} 

这相当于

public IntegerSet(boolean[] tmp, int maxValue) { 
    this(maxValue); // will call the constructor that takes one parameter 
    int i = 0; 

    for(i = 0; i < tmp.length; ++i) 
     this.elements[i] = tmp[i]; 

    this.elements = Arrays.copyOf(this.elements, tmp.length); 
} 
+0

是的,我完全同意,这是我会这样做的方式,虽然它明确规定我应该使用2个构造函数而不是1。 – 2014-10-28 18:07:07

+0

@Sandkar在您的类中使用两个构造函数创建单个实例的唯一方法是让一个构造函数调用另一个。但仍然需要第一个构造函数的两个参数。 – manouti 2014-10-28 18:16:28