请教一个关于static关键字的基础问题

nest小猫 2019-07-09 12:03:30
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);
}
}
}

还有,为什么下面的两个方法都要加静态呢 对于这个关键字实在不熟练
...全文
92 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_39936465 2019-07-09
  • 打赏
  • 举报
回复
引用 楼主 nest小猫 的回复:
还有,为什么下面的两个方法都要加静态呢 对于这个关键字实在不熟练
因为返回的是datasource变量和它相关的值,static修饰的方法在类初始化时会自动加载而且优先级高于普通的变量申明,如果datasource不加static 这时候还未被申明,未申明的变量调用就会报错,所以需要加static在方法加载前就申明好变量。
咸鱼突击 2019-07-09
  • 打赏
  • 举报
回复
类加载时,先加载静态资源,方法如果不加static,就调用不到了
nest小猫 2019-07-09
  • 打赏
  • 举报
回复
引用 1 楼 咸鱼突击 的回复:
类加载时,先加载静态资源,方法如果不加static,就调用不到了
明白 感谢了呀
nest小猫 2019-07-09
  • 打赏
  • 举报
回复
引用 3 楼 weixin_40290083 的回复:
因为你的 getDataSource()、 getConnection()被static修饰了,对于静态方法不能直接调用类中的其它非静态方法和变量,非静态方法和变量需要使用对象来调用。所以你需要datasource前加static。另外你可以在你的静态方法中new一个C3P0Utils对象,然后通过对象来引用datasource。 静态变量是在类加载时被初始化的,它是被类的所有的对象所共享的。如果你确定是共享变量,那么就可以定义为static变时,否则就不能定义为static变量
明白 多谢解答了
nest小猫 2019-07-09
  • 打赏
  • 举报
回复
引用 2 楼 qq_39936465 的回复:
[quote=引用 楼主 nest小猫 的回复:] 还有,为什么下面的两个方法都要加静态呢 对于这个关键字实在不熟练
因为返回的是datasource变量和它相关的值,static修饰的方法在类初始化时会自动加载而且优先级高于普通的变量申明,如果datasource不加static 这时候还未被申明,未申明的变量调用就会报错,所以需要加static在方法加载前就申明好变量。[/quote]明白了 感谢感谢
weixin_40290083 2019-07-09
  • 打赏
  • 举报
回复
因为你的 getDataSource()、 getConnection()被static修饰了,对于静态方法不能直接调用类中的其它非静态方法和变量,非静态方法和变量需要使用对象来调用。所以你需要datasource前加static。另外你可以在你的静态方法中new一个C3P0Utils对象,然后通过对象来引用datasource。 静态变量是在类加载时被初始化的,它是被类的所有的对象所共享的。如果你确定是共享变量,那么就可以定义为static变时,否则就不能定义为static变量

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧