V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
anonymoustian
V2EX  ›  Java

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

  •  
  •   anonymoustian · 2016-03-01 16:19:50 +08:00 · 4198 次点击
    这是一个创建于 3190 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    结合以上几点可推导, private 方法必然是 final 的,因此不要画蛇添足的给 private 方法添加 final 关键字,虽然语法上允许
    SoloCompany
        7
    SoloCompany  
       2016-03-01 21:04:20 +08:00   ❤️ 1
    static 因为是全局的,因而也不存在多态,因此方法也不适合用 static final 来修饰,只应保留关键的 static 关键字,就已经隐含 final 了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1011 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 19:02 · PVG 03:02 · LAX 11:02 · JFK 14:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.