【发布时间】:2021-01-13 18:35:43
【问题描述】:
所以在看书的时候,我发现了这段代码。
public class NutritionFacts {
private final int servingSize; // (mL) required
private final int servings; // (per container) required
private final int calories; // (per serving) optional
private final int fat; // (g/serving) optional
private final int sodium; // (mg/serving) optional
private final int carbohydrate; // (g/serving) optional
public NutritionFacts(int servingSize, int servings) {
this(servingSize, servings, 0);
}
public NutritionFacts(int servingSize, int servings,
int calories) {
this(servingSize, servings, calories, 0);
}
public NutritionFacts(int servingSize, int servings,
int calories, int fat) {
this(servingSize, servings, calories, fat, 0);
}
public NutritionFacts(int servingSize, int servings,
int calories, int fat, int sodium) {
this(servingSize, servings, calories, fat, sodium, 0);
public NutritionFacts(int servingSize, int servings,
int calories, int fat, int sodium, int carbohydrate) {
this.servingSize = servingSize;
this.servings = servings;
this.calories = calories;
this.fat = fat;
this.sodium = sodium;
this.carbohydrate = carbohydrate;
}
}
所以在这里,final 关键字用在营养名称之前。但它们也在代码的后面部分进行了初始化。那可能吗?因为一旦一个变量被标记为final,以后就不能再初始化了。
【问题讨论】:
-
它不是“在”nutriton 名称之前使用的。这些 nutriton 名称是构造函数,它们是初始化对象的名称。如果在您的构造函数执行结束时您的最终变量没有值,那么您可能会遇到问题。