Java参数化构造函数

时间:2016-06-14 05:12:10

标签: java constructor

我是编程新手,也是Java新手。我现在正在尝试使用参数化构造函数,然后使用特定方法创建对象。这是我的代码:

public class Car {
int fuelcap;
int mpg;

Car(int f, int m) {      //here
    fuelcap = f;         //and here
    mpg = m;             //and here
}

int range() {
    return mpg * fuelcap;
}

public static void main(String[] args) {
    Car sedan = new Car(16, 21);
    Car sportscar = new Car(14, 16);
    System.out.println(sedan.range());
    System.out.println(sportscar.range());

}

}

问题是,我不知道为什么构造函数Car的参数 - ' int f'和' int m'不同于以下领域:' int fuelcap;' ' int mpg;'。我们不能创建像这样的构造函数:

Car(int fuelcap, int mpg){
}

然后在创建对象时将值传递给这些参数?

5 个答案:

答案 0 :(得分:2)

不,你不能。您必须将构造函数参数分配给构造函数体中的类字段,否则它们将不会保存。这就是Java的工作原理。关于构造函数参数没什么“神奇”的。

另外,要注意正确的风格:

Car(int fulecap, int mpg) {     
    this.fuelcap = fuelcap;         
    this.mpg = mpg;            
}

如果你有更多的字段,那么ctor参数,这很好。只需将构造函数视为在创建对象后调用的常规方法。 (最后一句话只是有点真实,但会为你提供正确的想法。)

答案 1 :(得分:1)

当然可以,但在这种情况下,您的构造函数应如下所示:

public Car(int fuelcap, int mpg){
 this.fuelcap = fuelcap;
 this.mpg = mpg;
}

答案 2 :(得分:0)

你有实例变量fuelcapmpg,但如果你使用你提到的构造函数,它们永远不会被分配给任何东西。

你可以这样做,使其更具可读性,

int fuelcap;
int mpg;

Car(int fuelcap, int mpg) { 
    this.fuelcap = fuelcap; //this is refrencing the instance variable in the class    
    this.mpg = mpg;             
}

int range() {
    return mpg * fuelcap;
}

构造函数不能识别您想要的方式,因为它可能会导致具有相同名称的变量出错。

答案 3 :(得分:0)

参数化构造函数用于为不同的对象提供不同的值。

如果你想使用

Car(int fuelcap, int mpg){}

您必须使用this关键字

所以代码变成了

Car(int f, int m) {      
this.fuelcap = f;         
this.mpg = m; }

如果您不使用this关键字

所有对象都具有与实例变量相同的值,即fuelcapmpg,现在它的值为0

答案 4 :(得分:0)

考虑好的做法只是一些提示:

首先,您应该让您的成员externallink)。 而且,使你的objets“不可变”是好的风格,这意味着,一旦它们被创建,它们就无法改变状态(link)。您可以通过将字段声明为private来实现此目的。

final类看起来像这样:

Car