读书人

静态恒量与非静态常量的区别

发布时间: 2012-12-20 09:53:21 作者: rapoo

静态常量与非静态常量的区别
今天用Eclipse的一个FindBug插件来扫描工程,提示了好多这样的问题:

就是建议把

private final int ABC = 1;

替换成

private static final int ABC = 1;

我们都知道,静态类型只需要初始化一次,但是这样就常驻内存了不是吗,我的问题就是为什么常量要声明称静态的呢?

请各位大侠指教!
[最优解释]
常驻内存只有在加载了当前类的时侯才会发生;


[其他解释]
减小内存开销,static,保证了你的ABC变量在内存中只有一个,而且唯一
[其他解释]
什么叫常量?一般来说就是不会变的量
静态与非静态:
静态:对于该类的对象来说,都只有一个,叫类变量
非静态:每个该类的对象都各有一个,叫成员变量.

因为是常量,不会变的,所有的对象都是一样的,所以就只需要一个就够了.

工商银行卡类:他们有一个静态的银行卡名称叫:工商银行卡-->静态
每个卡又月自己的卡号-->非静态.

在创建对象的时候,需要每个成员变量(非静态)开辟内存空间,类变量(静态变量)则是在类加载的时候就创建好了.
[其他解释]
楼上的强大
[其他解释]

引用:
什么叫常量?一般来说就是不会变的量
静态与非静态:
静态:对于该类的对象来说,都只有一个,叫类变量
非静态:每个该类的对象都各有一个,叫成员变量.

因为是常量,不会变的,所有的对象都是一样的,所以就只需要一个就够了.

工商银行卡类:他们有一个静态的银行卡名称叫:工商银行卡-->静态
每个卡又月自己的卡号-->非静态.

在创建对象的时候,需要每个成员变量(非静态)……

很详细 楼主看了这个就可以不看别的了
[其他解释]
static 是确定生命周期的
[其他解释]
private final int ABC = 1;该类的每个实例都持有一个abc变量

private static final int ABC = 1;整个应用中只存在一个abc变量
[其他解释]
static是代表所有的对象共用的资源
[其他解释]
可以把static final 看做类变量 一个类中只有唯一的一个 final看做对象变量 每个对象里面只有唯一一个 但是各个对象的final变量可以不一样
[其他解释]
static 的 内存只能存在一个。非static的 可以有N个 一个对象就有一个!
[其他解释]
用static修饰过的常量会存到常量池里面。存入的方式是:先到常量池里面寻找,看是否该常量已经存在,如果存在返回该常量的引用,不存在就在常量池里面新建一个常量,返回引用。如果没有修饰,就属于对象的属性,绝大多是对象是存在堆中,也就是如果多个对象存在同样一个常量,在堆中会为每一个对象的该常量分配存储空间。由此可以看出,static修饰后的作用就是减少内存的消耗,常量的存储位置发生了变化。

读书人网 >J2SE开发

热点推荐