class C3P0Utils { private static ComboPooledDataSource datasource = new ComboPooledDataSource();//为什么new出来的这个对象要加static,不加下面return会报错 public static DataSource getDataSource() {
return datasource;
}

public static Connection getConnection() {
try {
return datasource.getConnection();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}还有,为什么下面的两个方法都要加静态呢  对于这个关键字实在不熟练

解决方案 »

  1.   

    类加载时,先加载静态资源,方法如果不加static,就调用不到了
      

  2.   


    因为返回的是datasource变量和它相关的值,static修饰的方法在类初始化时会自动加载而且优先级高于普通的变量申明,如果datasource不加static 这时候还未被申明,未申明的变量调用就会报错,所以需要加static在方法加载前就申明好变量。
      

  3.   

    因为你的 getDataSource()、 getConnection()被static修饰了,对于静态方法不能直接调用类中的其它非静态方法和变量,非静态方法和变量需要使用对象来调用。所以你需要datasource前加static。另外你可以在你的静态方法中new一个C3P0Utils对象,然后通过对象来引用datasource。
        静态变量是在类加载时被初始化的,它是被类的所有的对象所共享的。如果你确定是共享变量,那么就可以定义为static变时,否则就不能定义为static变量
      

  4.   


    因为返回的是datasource变量和它相关的值,static修饰的方法在类初始化时会自动加载而且优先级高于普通的变量申明,如果datasource不加static 这时候还未被申明,未申明的变量调用就会报错,所以需要加static在方法加载前就申明好变量。明白了  感谢感谢