我正在构建一个类Rating
,如下所示:
public class Rating{
//class attributes
private Movie movie;
private PremiumUser premiumUser;
private double rating;
private int id;
private int count;
protected static Rating [] ratings = new Rating [100];
public Rating(Movie movie, PremiumUser premiumUser, double rating){
this.movie = movie;
this.premiumUser = premiumUser;
this.rating = rating;
ratings[count] = this;
count += 1;
this.id = count;
}
public void setRating(int rating){
this.rating = rating;
}
public void setMovie(Movie movie){
this.movie=movie;
}
public void setPremiumUser(PremiumUser premiumUser){
this.premiumUser = premiumUser;
}
public int getID(){
return id;
}
public PremiumUser getPremiumUser(){
return premiumUser;
}
public Movie getMovie(){
return movie;
}
public double getRating(){
return rating;
}
@Override
public String toString(){
return ("Rating ID: " +id + "\nMovie: " + movie.getTitle() + "\nPremium User: " + premiumUser.getUsername() + "\nRating: " + rating);
}
}
但每次我创建一个新对象Rating
时(如此):
Rating rating1 = new Rating(movie1,marios, 9.0);
Rating rating2 = new Rating(movie2,zarko, 8.5);
Rating rating3 = new Rating(movie1, jdoe, 10);
System.out.println(Rating.ratings[0] + "" + Rating.ratings[1]);
我从System.out.println
行得到的只是我创建的最后一个Rating
对象。我不确定为什么会这样。在构造函数中调试print语句表明,每次创建新对象时,count都会返回到零。
答案 0 :(得分:3)
将变量声明更改为private static int count;
<强>解释强>
根据您的逻辑,您的count
变量会吸引所有类的实例,因此它应该是static
。如果你没有放置静态,它将为该类的每个对象初始化。
希望这会有所帮助。
答案 1 :(得分:3)
count
是一个实例成员,每次实例化一个新对象时,它都会获得自己的count
,初始化为int
的默认值{{1} }。它应该是0
成员,在所有static
对象之间共享:
Rating
答案 2 :(得分:2)
首先,您想了解
static
关键字:
- 属性和方法(类的成员)可以定义为
static
。static
成员不属于单个对象。static
成员对所有实例(同一类的对象)都是通用的。static
成员是静态内存中的存储(每个人都可以使用的公共内存位置)。
static
修饰符表示rating[]
数组对于整个类中的所有Rating
都是通用的,而不是单个对象。
但count
变量不是。因此,每次创建对象count
时,变量值都会变为0
。因为它对每个物体都是个体的。
为避免这种情况(解决方案):
将static
修饰符添加到count变量中。它应该如下所示:
private static int count;