参考设计模式  唯一实例。把初试话方法放在构造方法里
把这个类的构造方法声明成PRIVATE,这样就没有能调用他,最了他自己
public class A{
    pulbic A a;   //本身定义一个实例
    private A(){         //出事话方法
    }    public A getA(){
      if(a=null)
           A();       return a;
    }}

解决方案 »

  1.   

    第一调用的时候就会初始化如果你想没人调用也初始化
    那么可以把代码写在static{
         //这个中间
    }
      

  2.   

    我按照你上面的写了个类,但是应该怎么调用呢?我的调用方式出错!
    类的代码如下:
    package ordermanager.db;import ordermanager.db.*;
    import javax.naming.*;
    import java.sql.*;
    import javax.sql.*;public class DataSourceMgr {  static public DataSource ds;
      static String name = "pool";
      static String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
      static String url = "jdbc:odbc:datasource";  private DataSourceMgr() throws SQLException,NameNotFoundException,NameAlreadyBoundException,ClassNotFoundException,IllegalAccessException,InstantiationException{
            ConnectionParam param = new ConnectionParam(driver,url,null,null);
            param.setMinConnection(1);
            param.setMaxConnection(5);
            param.setTimeoutValue(20000);
            ConnectionFactory.bind(name, param);
      }  public DataSource getDataSource() throws SQLException,NameNotFoundException,NameAlreadyBoundException,ClassNotFoundException,IllegalAccessException,InstantiationException{
        if (ds==null){
          ds = ConnectionFactory.lookup(name) ;
        }
        return ds;
      }}
      

  3.   

    package ordermanager.db;import ordermanager.db.*;
    import javax.naming.*;
    import java.sql.*;
    import javax.sql.*;public class DataSourceMgr {  public DataSource ds;
      String name = "pool";
      String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
      String url = "jdbc:odbc:datasource";  private DataSourceMgr() throws SQLException,NameNotFoundException,NameAlreadyBoundException,ClassNotFoundException,IllegalAccessException,InstantiationException{
            ConnectionParam param = new ConnectionParam(driver,url,null,null);
            param.setMinConnection(1);
            param.setMaxConnection(5);
            param.setTimeoutValue(20000);
            ConnectionFactory.bind(name, param);
            ds = ConnectionFactory.lookup(name);
      }  public DataSource getDataSource() throws SQLException,NameNotFoundException,NameAlreadyBoundException,ClassNotFoundException,IllegalAccessException,InstantiationException{
        if (ds==null){
          new DataSourceMgr();
        }
        return ds;
      }
    }
    这是我最新的类,调用的方式为:
    DataSource ds = new DataSourceMgr().getDataSource();
    但是由于DataSourceMgr()虚构函数声明为private,所以上面的调用是失败的
    如果把虚构函数声明为public,则两次调用的时候就会出现NameAlreadyBoundException
    我要的就是只初始化一次,但是每次调用可以得到DataSource,应该如何改啊?
      

  4.   

    参照我写的文章
    Java 的JDBC 数据库连接池实现方法  
    http://www.csdn.net/develop/read_article.asp?id=21140