我老师给了我两个班,一个是护照,另一个是约会 date包含3个属性(字符串日,字符串月,字符串年),getter,setter和2个构造函数,其中一个是复制构造函数:
public date(date dt)
this.day=dt.getd();
this.month=dt.getm();
this.yaer=dt.gety();
护照类包含2个属性(字符串名称,日期exp(来自日期类))并且有这样的结构:
public passport(string name, date exp)
this.name=name;
this.exp= new date(exp);
现在在主课堂上,每次创建新日期和新护照时,每个日期都是重复的,每个护照都会得到1个垃圾对象。
我怎么能克服这个垃圾对象?
答案 0 :(得分:0)
我怎样才能克服这个垃圾对象?
如果date
个实例是可变的,则不会;你做你正在做的事。
如果date
个实例不可变(它们的状态一旦创建就无法更改),那么您只需使用您提供的实例而不是创建新实例:
public passport(string name, date exp)
this.name = name;
this.exp = exp;
}
如果可以修改exp
,则不希望这样做,因为它会在您的passport
实例与通过exp
的任何内容之间产生串扰。
答案 1 :(得分:0)
我怎样才能克服这个垃圾对象?
让垃圾收集器完成它的工作:因为作为参数传递给Date
构造函数的Passport
变量将超出执行上下文的范围,底层的Date
对象将是有资格被收集。
最直接的做法是不将Date
对象分配给变量。
只需在Passport
构造函数调用中内联其实例化:
Passport passport = new Passport(name, new Date(day, month, year));
答案 2 :(得分:0)
可选解决方案:
主要课程中的:
passport[] arr = new passport[100]; // we have 100 passports
date d1= new date () //null date
for (int i=0,i<100,i++) // we have 100 passports
{ d1.setd(); //our setter asks for an input
d1.setm();
d1.sety();
arr [i]=new passport (string name, d1); }