正如我在主题中所说,但是当我尝试设置一个新对象时,旧对象看起来与最后一个对象相同:
public class Test {
private static List<Booking> list = new ArrayList<Booking>();
private static List<Booking> lista = new ArrayList<Booking>();
public static void main(String[] args)
{
Booking[] book=new Booking[3];
book[0]=new Booking();
book[1]=new Booking();
book[2]=new Booking();
list.add(0,book[0]);
list.add(1,book[1]);
list.add(2,book[2]);
list.get(0).setYear("1900");
list.get(0).setMonth("january");
list.get(1).setMonth("september");
list.get(1).setYear("1600");
list.get(2).setYear("2000");
list.get(2).setMonth("may");
System.out.println(list.get(0).getBook());
System.out.println(list.get(1).getBook());
System.out.println(list.get(2).getBook());
}
}
预订舱位:
public class Booking
{
public static String getMark()
{
return m;
}
public static String getWym()
{
return w;
}
public static String getWyw()
{
return wyw;
}
public static String getImie()
{
return imie;
}
public static String getNaz()
{
return nazwis;
}
public static String getNr()
{
return nr;
}
public void setMark(String m)
{
this.m=m;
}
public void setWym(String w)
{
this.w=w;
}
public void setWyw(String wyw)
{
this.wyw=wyw;
}
public void setImie(String imie)
{
this.imie=imie;
}
public void setNaz(String nazwis)
{
this.nazwis=nazwis;
}
public void setNr(String nr)
{
this.nr=nr;
}
public void setYear(String year)
{
this.year=year;
}
public void setMonth(String month)
{
this.month=month;
}
public void setDay(String day)
{
this.day=day;
}
public void setHour(String hour)
{
this.hour=hour;
}
public static String getYear()
{
return year;
}
public static String getMonth()
{
return month;
}
public static String getDay()
{
return day;
}
public static String getHour()
{
return hour;
}
public String getBook()
{
String Book=getYear()+getMonth()+getDay()+getHour()+getMark()+getWym()+getWyw()+getImie()+getNaz()+getNr();
return Book;
}
private static String year;
private static String month;
private static String day;
private static String hour;
private static String m;
private static String w;
private static String wyw;
private static String imie;
private static String nazwis;
private static String nr;
}
以下是编译后的内容:
2000maynullnullnullnullnullnullnullnull
2000maynullnullnullnullnullnullnullnull
2000maynullnullnullnullnullnullnullnull
而不是: 1900januarynullnullnullnullnullnullnullnull
1600septembernullnullnullnullnullnullnullnull
2000maynullnullnullnullnullnullnullnull
答案 0 :(得分:4)
从static
Booking
答案 1 :(得分:2)
您在static
课程中使用Booking
个变量,因此所有实例都有公共字段year
,month
等等。
使字段静态就像将它附加到整个类上下文而不是实例。
效果是最后一次修改(设置可能2000 )正在修改结果中的所有实例
您应该使这些字段非静态,然后实例将具有自己的值
class Booking {
private String year;
private String month;
private String day;
//another fields...
public String getYear() {
return this.year;
}
//another methods...
}
另请查看reference以了解static
关键字的使用情况。你肯定滥用它。