java 全局变量,局部变量

醉生梦死丶 发布于 2014/01/24 22:47
阅读 1K+
收藏 2

java什么时候定义全局变量,什么时候定义局部变量?

比方说我SpringMvc项目中的一个Controller类DictController,还有一个DictControllerHelper类。helper类主要是帮助controller类处理一些杂事,比方说执行SQL查询,格式化数据等。

在controller类里面我是全局初始化helper类,还是在用到helper类的方法里初始化,或者是在controller的构造方法里初始化?    以前我都是放到方法下初始化的。

如果要全局初始化的话,是用 private DictControllerHelper...  还是用 private final DictControllerHelper... 还是用 private final static DictControllerHelper...?什么情况下用呢?

我感觉这好像是涉及的内存或者线程安全问题了,说起来惭愧,工作也有2年了,对这些还不是很了解。

望大虾们指导指导。

以下是问题补充:

@醉生梦死丶:比方说controller类有时候要删除某条数据,但是有其他数据关联了他,所以我要先删除其他的数据,但是都放在一个方法里感觉代码太乱了。但是如果在controller里面写私有方法感觉controller的方法又太多了,所以放helper类里面了 (2014/01/26 17:41)
加载中
0
华兹格
华兹格

java好像没有你说的像C语言那样的全局变量,有局部变量。

初始化helper类?感觉你在说注入的的方式而已,3种注入方式:接口注入、setter注入、构造器注入。推荐setter注入、接口注入,不推荐构造器注入。

这个和线程&内存关系不大,你想多了。。。

以上都是我的愚见。。。

0
醉生梦死丶
醉生梦死丶

引用来自“hanzhankang”的答案

java好像没有你说的像C语言那样的全局变量,有局部变量。

初始化helper类?感觉你在说注入的的方式而已,3种注入方式:接口注入、setter注入、构造器注入。推荐setter注入、接口注入,不推荐构造器注入。

这个和线程&内存关系不大,你想多了。。。

以上都是我的愚见。。。

用setting注入的话,我还要在spring里面配置啊。而且helper类也就是处理一些杂事。
我以前是直接写在方法里面new一个的,XXHelper helper = new XXHelper(); helper.toJson(xxx);
我现在在想要不要移出来的,放在类下面,private XXHelper helper = new XXhelper();
然后直接在方法里面调用。按照你说的,放在类里面或者方法里面初始化,差别不是很大,都行是不是?
Catelyn
Catelyn
所以你放到属性里new相当于prototype,没问题,不过建议交给spring管理
0
华兹格
华兹格
如果 helper里面是通用的处理,建议抽象成一个工具,或者作出一个父类。如果这个helper是依附于特定实体的话,感觉没有单独存在的必要。
0
醉生梦死丶
醉生梦死丶

引用来自“hanzhankang”的答案

如果 helper里面是通用的处理,建议抽象成一个工具,或者作出一个父类。如果这个helper是依附于特定实体的话,感觉没有单独存在的必要。

不是通用的,只适合这个controller用。

感觉有那么点意思了

52iSilence7
52iSilence7
只适合这个类。。写一个私有方法就行了。
0
Catelyn
Catelyn
只要不把业务对象比如实体类提到属性里就没什么安全问题,这个类就是stateless的,spring默认注入为singleton,如果业务对象必须作为属性可以使用prototype,至于你说的tojson方法,可以定义一个baseobject类实现这个方法,其他需要这个方法的再继承,或者写一个工具类的静态方法
0
崔钢
崔钢

你知道static这个东西么?

0
银古
银古

像这种多用的类,无论是全局还是局部,每次用到都new一个出来等着回收机制回收,大大增大了内存负担。两种方法1.单例模式,在helper类中定义一个private static的实例,要用时再get。2.定义一个工具类集合,把你要用的方法都public static到里面去

但是见你说只适合这个controller..那为什么还要定义一个类出来..把方法私有化不好吗,个人愚见...

0
醉生梦死丶
醉生梦死丶

引用来自“银古”的答案

像这种多用的类,无论是全局还是局部,每次用到都new一个出来等着回收机制回收,大大增大了内存负担。两种方法1.单例模式,在helper类中定义一个private static的实例,要用时再get。2.定义一个工具类集合,把你要用的方法都public static到里面去

但是见你说只适合这个controller..那为什么还要定义一个类出来..把方法私有化不好吗,个人愚见...

有道理,但是真的“大大的增加”了内存负担吗?为什么不放私有,主要因为这样的话,controller类就会有很多方法,看起来比较乱,另搞一个类那么就不会很乱了
银古
银古
高并发下,这种优化还是必要的吧。觉得看起来乱的话就用我上面介绍的两种方法吧。我们这边代码是定义静态工作类比较多
0
醉生梦死丶
醉生梦死丶

引用来自“惉惉自喜”的答案

只要不把业务对象比如实体类提到属性里就没什么安全问题,这个类就是stateless的,spring默认注入为singleton,如果业务对象必须作为属性可以使用prototype,至于你说的tojson方法,可以定义一个baseobject类实现这个方法,其他需要这个方法的再继承,或者写一个工具类的静态方法
涉及的设计模式问题了吗,我要去了解一下这方面的知识了
返回顶部
顶部