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

h3g2010 2011-11-25 04:22:17
今天用Eclipse的一个FindBug插件来扫描工程,提示了好多这样的问题:

就是建议把

private final int ABC = 1;

替换成

private static final int ABC = 1;

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

请各位大侠指教!
...全文
644 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
liujiaoshui 2012-11-13
  • 打赏
  • 举报
回复
用static修饰过的常量会存到常量池里面。存入的方式是:先到常量池里面寻找,看是否该常量已经存在,如果存在返回该常量的引用,不存在就在常量池里面新建一个常量,返回引用。如果没有修饰,就属于对象的属性,绝大多是对象是存在堆中,也就是如果多个对象存在同样一个常量,在堆中会为每一个对象的该常量分配存储空间。由此可以看出,static修饰后的作用就是减少内存的消耗,常量的存储位置发生了变化。
JAVAkuroro 2011-11-30
  • 打赏
  • 举报
回复
可以把static final 看做类变量 一个类中只有唯一的一个 final看做对象变量 每个对象里面只有唯一一个 但是各个对象的final变量可以不一样
lliiqiang 2011-11-30
  • 打赏
  • 举报
回复
static是代表所有的对象共用的资源
Firebirds 2011-11-30
  • 打赏
  • 举报
回复
static 的 内存只能存在一个。非static的 可以有N个 一个对象就有一个!·
小绵羊 2011-11-29
  • 打赏
  • 举报
回复
private final int ABC = 1;该类的每个实例都持有一个abc变量

private static final int ABC = 1;整个应用中只存在一个abc变量
cp298674954 2011-11-29
  • 打赏
  • 举报
回复
static 是确定生命周期的
孟祥月 2011-11-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 awusoft 的回复:]

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

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

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

在创建对象的时候,需要每个成员变量(非静态)……
[/Quote]
很详细 楼主看了这个就可以不看别的了
lxbccsu 2011-11-29
  • 打赏
  • 举报
回复
常驻内存只有在加载了当前类的时侯才会发生;

波杰克男 2011-11-27
  • 打赏
  • 举报
回复
楼上的强大
awusoft 2011-11-27
  • 打赏
  • 举报
回复
什么叫常量?一般来说就是不会变的量
静态与非静态:
静态:对于该类的对象来说,都只有一个,叫类变量
非静态:每个该类的对象都各有一个,叫成员变量.

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

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

在创建对象的时候,需要每个成员变量(非静态)开辟内存空间,类变量(静态变量)则是在类加载的时候就创建好了.
叮当你去哪了 2011-11-25
  • 打赏
  • 举报
回复
减小内存开销,static,保证了你的ABC变量在内存中只有一个,而且唯一

62,614

社区成员

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

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