我正在观看一个java教程,一旦他改变了他的类以获得构造函数而不是在每个对象中定义每个变量,他的所有方法仍然有效。
我将它改为构造函数,现在我得到的所有方法都是0。
public class Volume3Lesson4Exercise1 {
public static void main(String[] args) {
groceryStore houstonStore = new groceryStore(534, 0.99, 429, 0.87);
groceryStore seattleStore= new groceryStore(765, 0.86, 842, 0.91);
groceryStore orlandoStore= new groceryStore(402, 0.77, 398, 0.79);
System.out.println("\nSeattle store revenue: ");
seattleStore.calculateGrossRevenue ();
System.out.println("\nOrlando Store Revenue: ");
orlandoStore.calculateGrossRevenue ();
}
}
class groceryStore {
int apples;
double applePrice;
int oranges;
double orangePrice;
groceryStore(int a, double ap, int o, double op){
a= apples;
ap= applePrice;
o= oranges;
op= orangePrice;
}
double calculateGrossRevenue(){
double grossRevenue;
grossRevenue= ((apples * applePrice)+ (oranges * orangePrice));
return grossRevenue;
}
}
在以下代码中,收入返回数字0作为总收入。为什么?数字仍然与以前相同,但现在只是构造函数而不是每个对象的单个变量。
答案 0 :(得分:2)
构造函数中值的赋值必须改变顺序,即
groceryStore(int a, double ap, int o, double op) {
apples = a;
applePrice = ap;
oranges = o;
orangePrice = op;
}
这样做意味着传递给构造函数的参数值将保存在实例变量(apples,applePrice等)中,这是预期的行为。原始代码中显示的分配无效,因此实例变量将保留其默认值,即所有数字的0
。
为了更清楚,this
关键字应该用于所有实例变量,即
groceryStore(int a, double ap, int o, double op) {
this.apples = a;
this.applePrice = ap;
this.oranges = o;
this.orangePrice = op;
}