2017-02-19 212 views
-2

因此,在学习了Python的基础知识之后,我学习了Java,并且在构造函数中进行了简化。这是一个小程序,我正在理解它。Java - 构造函数

package random; 
import java.util.Scanner; 

public class program { 
    public static void main(String[] args) 
    {  
     Scanner input = new Scanner(System.in); 
     Cube x = new Cube(); 
     Cube y = new Cube(20,20,20); 

     System.out.println(x.cubeVolume()); 
     System.out.println(y.cubeVolume()); 
    } 
} 

然后魔方类

package random; 

public class Cube { 
    int lenght,widht,height; 

    public int cubeVolume() 
    { 
     return (lenght*widht*height); 
    } 
    Cube() 
    { 
     lenght = 10; 
     widht = 20; 
     height = 30;  
    } 
    Cube(int l, int w, int h){ 
     lenght = l; 
     widht = w; 
     height = h; 
    } 
} 

但我的问题是已了解为什么我Ÿ立方得到20,20,20和不改变10,20, 30 ...为什么会选择立方(int类型l,INT W,INT 1H),而不是立方()?是什么让X立方立方()ÿ立方立方(int类型l,INT W,INT 1H)

+3

因为y立方体指定参数?只有一个构造函数有3个参数,所以这是使用的。 – Moira

回答

0

基本上构造函数初始化对象的全局变量。参数化的构造的

construct() ---> non-parametrized constructor 

construct(parameter) ---> parametrized constructor 

例如:

        cube(int l,int w,int h) 
            { 
              length=l; 
              width=w; 
              height=h; 
            } 

这里ü已经定义了两个构造与相同的类名,这是所谓的构造重载(具有不同参数的多个构造)

第一之一:

  cube() 
      { 
      lenght = 10; 
      widht = 20; 
      height = 30; 
      } 

第二位:

  cube(int l, int w, int h) 
      { 
      lenght = l; 
      widht = w; 
      height = h; 
      } 

所以在这里,你已经定义了两个构造函数来初始化对象的全局变量。现在,希望您知道一次只有一个构造函数能够初始化对象,并且您必须在对象创建过程中调用该构造函数。

在这里,你创造了两个对象:

1对象: 立方X =新的立方体(没有参数传递); //没有参数通过

在上面的行构造函数中,cube已被调用,初始化全局变量length,widht,height为值10,20,30。现在,在这里,我们没有传入任何参数给构造函数,所以没有参数的构造函数已经调用,这是立方体()

第二个对象: 立方体y =新立方体(20,20,20);我们已经定义了三个参数 - > int l,int w,int h,并且在调用构造函数时我们传递了三个参数 - > 20,20,20所以参数与参数匹配并且参数化构造函数已经调用。

所以这里有两个对象存在,对象x的值为length = 10,widht = 20,heigth = 30。 和值长度= 20,宽度= 20,高度= 20的其他对象y;

1

它会查找与您调用的构造函数相匹配的构造函数。
x立方体由零参数构造,因此将选择无参数构造函数。
y cube由三个参数构造,因此将选择三参数构造函数。

1
  1. 这将有助于显示程序的输出,这有助于调试。

  2. 宽度,长度和长度拼写为'th',而不是'ht'。这不会影响程序编译或运行的方式,但会帮助其他人阅读代码。

  3. 在直接回答你的问题,你有两个重载构造函数:

    立方(); Cube(int length,int width,int height);

    构造函数将由编译器根据您提供的参数选取。只有一个构造函数被使用(如果你没有提供构造函数,编译器会创建一个默认的Cube(){},以及一个默认的super()构造函数,等等)。