请教banq 大哥,在jdbc开发中,过多使用static方法会有什么问题?

07-03-30 cuibaoliang2004
我从学java开始,都很少用static来写 数据库的insert select update delete等操作。一直都是jsp+bean(这个bean在页面都要成为对象的)。

工作后发现,公司代码中几乎所有的数据库操作都是静态方法。
我很疑惑,抛开静态方法带来的修改不变和软件架构上的不足不谈。
过多的使用静态方法会不会带来性能上的问题?

有人说当static方法中使用static变量的话会引发多线程的资源互斥的问题。不过在数据库操作中,确实很少使用静态变量。
当然不可否认,这种方法在开发初期确实加快了开发速度,使得很多老的代码中都延续了这种用法。
当然我还在坚持,用dao来实现数据库中操作。

只是我困惑确从来没有得到过解答,人家的程序也跑的好好的,凭什么说人家的不好?
困惑,希望哪位大哥不吝赐教,为小弟解惑

[该贴被cuibaoliang2004于2007年03月30日 10:17修改过]

zuly
2007-04-02 13:31
使用static方法原因是因为某个类一定cache了一些expensive的对象!

基于JTA的全局事务可以解决这种问题!个人观点,使用static来简单包装Persistence是技术力量不够表现之一!

cuibaoliang2004
2007-04-02 19:37

>个人观点,使用static来简单包装Persistence是技术力量不够表现之一!

我也曾用过static方法写一些小工具类,比如时间转化,ip转化等等.
不过,技术力量不够倒也不是吧,他们都是写java三年多的啦.更可能是一种刚开始时的习惯,后来没有深究这个问题吧.

对用static 方法来做持久化,我最大的恐怖在于
1 一个表对应一个类,这个都是用static方法那么,如果出现变动,那么一改都要改好多
2 返回的时候,不是统一用pojo,或者装有pojo的Aarraylist List 等容器装载.
而是hashmap(大map 套小map,key就是字段名),或者其他什么的混合体.

当我来接手或者改的时候痛苦无比.而重新写又要时间,偏偏时间是我们缺乏的,或者这是这个状况形成的原因吧

leyen
2007-04-14 23:28
返回是map这样的结果真的很恐怖,你还没看见过更恐怖的,返回一堆string[]或者object[]哈哈,然后在往页面一一对应的赋值,吓人不,愁人啊

gltbeyond
2007-04-15 21:08
jdbc中使用static方法,如static getResults(); 如果过多的人同时访问,就会在方法调用时,会不会A调用此方法没有执行完,线程切换,B来执行此方法,造成数据混乱, 我是这样想的.

gougou3250
2007-05-09 09:12
singleton lazy initialize 就是一个例子
可能会导致创建多个实例,需要加synchronization
static 是常驻内存的,乱用,可能导致性能问题

[该贴被gougou3250于2007年05月19日 10:48修改过]

s79
2007-05-20 22:56
static 方法和static变量在使用上是不同的,static方法在编译时就被分配了内存空间,且只有一份。可避免多次创建实例而造成的开销。需要的时候不必new这个类名就可以直接使用,方便、高效。缺点是一个static方法只能调用另外一个static方法,而不能调用动态方法。

static变量则要注意,static变量其实就是全局变量,如果多个线程同时操作者个变量,就一定要同步。

static方法的形参和内部变量,都分配在栈区(stack),是每个线程私有的,线程进入时创建,离开时销毁,并发访问时并不会造成混淆。所以是线程安全的。

java类库很多方法都是static方法。如Integer.parseInt()等所有不需要new之后再使用的方法。所以对于static方法不必过于紧张,如果一个方法比较独立又不与其他动态方法互操作,我都设置其为static。这样不论用到他多少次,他都只有那么一份。当然如果可能只用到0次或很少用到,就不要static了,即便永远每人用到他,他也会一直占用那部分内存。