我写了一个bank,是单示例的
import java.util.*;
public class Bank{
private static Bank bankInstance=new Bank();
  List<Customer> customers;private Bank(){
  customers=new ArrayList<Customer>();
  }public static Bank getBank(){
return bankInstance;
}
  public void addCustomer(String i,String p,String f,String l){
customers.add(new Customer(i,p,f,l));
}
public int getNumOfCustomers(){
return customers.size();
}
public Customer getCustomer(int index){
return (customers.get(index));
}
  public void deleteCustomer(int index){
customers.remove(index);
  }
  public void sortCustomers(){
  Collections.sort(customers);
  }}
有三个类用getBank()方法获取bank对象
先在一个类中添加了两个用户
为什么别的类引用时bank时用户的数目还是0个???
求高人指点

解决方案 »

  1.   

    前阶段刚好考虑过这里,我是这样理解的:public class Bank {
    List<Customer> customers;
    private static Bank bank; //new Bank()不能放在这里,虽然也是单例模式,但是新的bank会取代旧的bank,新new一次以前的就没了!!
    private Bank(){
    customers = new ArrayList<Customer>();
    }
    //单例模式主要看这里....
    public static Bank getBank(){//用getBank过滤一下,如果已经new了bank,直接返回原来的bank,如果没有new,则新new一个bank!!
    if(bank == null){
    bank = new Bank();
    return bank;
    }
    return bank;
    }
    }不知道还有什么好的办法没有!!
      

  2.   

    用的时候是用 Bank.getBand() 如果之前你new了Bank()那自然不是同一实例
      

  3.   

    啊哦 打错了  
    Bank.getBank()
      

  4.   

    像二楼说的,得bank实例时用Bank.getBank()得。
    代码好像没有问题。可以把你添加用户,得bank实例代码帖出来看看。
      

  5.   

    这有一种解释,你看错了,或是测试代码有问题;比如增加后,又被delete掉了,或者引用了customers这个List (这个list是包可见的),把它clear了..
      

  6.   


    private static Bank bank = null;public static Bank getBank() {
        if (bank == null) {
            synchronized (Bank.class) {
                if (bank == null)
                    bank = new Bank();
                }
            }
        }
        return bank;
    }
      

  7.   

    private static Bank bank = null;public static Bank getBank() {
        if (bank == null) {
            synchronized (Bank.class) {
                if (bank == null)
                    bank = new Bank();
                }
            }
        }
        return bank;
    }顶10L这段代码
      

  8.   

    恩 今天问老师啦 明白啦 我那两个类没有联系,因此在两个程序中都用Bank.getBank(),结果当然是生成了两个bank实例 在百度知道和本论坛上也有人问同样的问题 估计都跟我犯同样的毛病 结贴啦 谢谢各位啦 
      

  9.   

    楼主, 请你确认你的老师跟你讲对了。谁说Bank.getBank() 就生成两个bank实例了???
      

  10.   

    楼主描述得不是很清楚,应该把怎么调用的代码也发上来,Bank.getBank()肯定只能得到一个Bank的实例。