jiangshengabc 2009-12-09 16:47 采纳率: 100%
浏览 197
已采纳

看看这两段JAVA代码

public class OrderForm{//订单
private List MaterialList = new ArrayList();
private Transport transport;
public OrderForm(){
//从数据取出数据
//实例化transport
//填充MaterialList
}
public double getTotPrice(){
double result = 0;
for(OrderMaterial ma : MaterialList){
result += ma.unitPrice * ma.amount ;
}
result += transport.transPrice;
return result;
}
public String getAddress(){
return transport.Address;
}
private class OrderMaterial{//订货
public double unitPrice;
public double amount;
}
private class Transport{
public String Address;//送货地址
public double transPrice; //运输费用
}
}

public class OrderForm1{//订单
private List MaterialList = new ArrayList();
private Transport transport;
public OrderForm1(){}
public double getTotPrice(){
if(transport==null){
//从数据库取得数据,实例化transport
}
if(MaterialList.size()<1){
//从数据库取得数据,填充MaterialList
}
double result = 0;
for(OrderMaterial ma : MaterialList){
result += ma.unitPrice * ma.amount ;
}
result += transport.transPrice;
return result;
}
public String getAddress(){
if(transport==null){
//从数据库取得数据,实例化transport
}
return transport.Address;
}
}

小弟初学JAVA,在看这两段代码时 不知道有何区别?

  • 写回答

1条回答 默认 最新

  • rednaxelafx 2009-12-09 21:31
    关注

    前一个是eager initialization,在构造器里就把整个对象的状态都初始化好,无论实际上那些数据有没有被用到;

    后一个是lazy initialization,构造对象的时候暂时不把整个对象的状态都初始化完,而是等真的用到的时候再初始化。不过这个实现不是线程安全的……

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求解达问题(有红包)
  • ¥15 请解包一个pak文件
  • ¥15 不同系统编译兼容问题
  • ¥100 三相直流充电模块对数字电源芯片在物理上它必须具备哪些功能和性能?
  • ¥30 数字电源对DSP芯片的具体要求
  • ¥20 antv g6 折线边如何变为钝角
  • ¥30 如何在Matlab或Python中 设置饼图的高度
  • ¥15 nginx中的CORS策略应该如何配置
  • ¥30 信号与系统实验:采样定理分析
  • ¥100 我想找人帮我写Python 的股票分析代码,有意请加mathtao