private static final 应该怎么用,怎么去理解?

2016-03-01 16:19:50 +08:00
 anonymoustian

static 和 final 怎么理解?
private 修饰 static 怎么理解?
能不能给以通俗一点的解释和例子? 谢谢

4203 次点击
所在节点    Java
7 条回复
BOYPT
2016-03-01 16:40:38 +08:00
static 是指这个成员在内存中的位置固定,不管初始化多少个实例对象,这个成员都共同使用一处内存;
final 是指不能在继承的类里面改变这个成员;
private 修饰 static 就是说这个静态成员是 private 的只能在内部方法访问。
zerowxxyf
2016-03-01 16:42:34 +08:00
private 是访问权限限定, static 表示不要实例化就可以使用, final 表示不可变的。合在一起大概就是私有全局常量的意思。
anonymoustian
2016-03-01 16:59:48 +08:00
@BOYPT 那 private static 是不是只能类里的静态方法访问
BOYPT
2016-03-01 17:04:34 +08:00
@anonymoustian 静态方法和静态成员不一样概念。
静态成员是所有实例共享使用;
静态方法是指即使没有实例化一个类也可以运行;
static 没有限定在哪里访问的意思。
araraloren
2016-03-01 17:13:33 +08:00
限定了 static, 对于对象全局就存在一个这个对象;对于方法就不再属于任何对象了,而是属于这个类
SoloCompany
2016-03-01 21:01:05 +08:00
private 是访问权限(可见范围)关键字,限制只能在类以及外部类( enclosing class )中才可以访问

static 是因为 java 世界只有类(不能直接定义变量或者方法)才产生的
所以你只要把 static 简单理解为全局变量 /全局方法就可以了,如果没有访问权限这种东西, static 的变量或者方法无论移动到什么地方效果都是完全等价的

static 还有另一种用法,就是用来修饰内部类( inner class ),表示这个内部类不拥有外部类( enclosing class )的指针,也就是说,它完全是一个独立的类,忽略访问权限,抽取为独立的类或者移动到任意一个别的外部类里面效果都是完全等价的

final 关键字用来修饰变量 /方法 /类的含义不完全相同,修饰变量就表示变量只能一次赋值然后禁止修改(如果是引用则只限制引用本身不可变,但引用的内容是可变的),修饰方法或类则表示禁止多态(不允许 override 一个方法 / 不允许继承一个类)

结合以上几点可推导, private 方法必然是 final 的,因此不要画蛇添足的给 private 方法添加 final 关键字,虽然语法上允许
SoloCompany
2016-03-01 21:04:20 +08:00
static 因为是全局的,因而也不存在多态,因此方法也不适合用 static final 来修饰,只应保留关键的 static 关键字,就已经隐含 final 了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/260236

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX