• 请不要在回答技术问题时复制粘贴 AI 生成的内容
palmers
V2EX  ›  程序员

请问 java 中的`static` 方法是否违背了 java 一切皆对象的说法?

  •  
  •   palmers · Nov 10, 2016 · 4172 views
    This topic created in 3471 days ago, the information mentioned may be changed or developed.

    按照 java 的哲学,一切皆对象, 所有成员应该都会有一个对象作为挂载点,但是static修饰的成员是否违背这一哲学或者原则?

    25 replies    2016-11-14 18:21:51 +08:00
    FrankFang128
        1
    FrankFang128  
       Nov 10, 2016 via Android   ❤️ 1
    Class 也是对象
    WhyAreYouSoSad
        2
    WhyAreYouSoSad  
       Nov 10, 2016
    一切对象也可以共享某个类别里面的固定资源啊,好比现实世界的各个领域,范围的公共资源。
    mooncakejs
        3
    mooncakejs  
       Nov 10, 2016
    1 楼说得对, class 本身就是对象,你可以理解成 static 属性其实是 Class 的成员, Class 由 java 负责生成单例
    itqls
        4
    itqls  
       Nov 10, 2016
    类对象
    wikimore
        5
    wikimore  
       Nov 10, 2016
    static 是面向过程专用,比如一些 Utils ,违背了面向对象,但是不违背一切皆对象吧?
    pangliang
        6
    pangliang  
       Nov 10, 2016
    char int byte 就不是对象
    misaka19000
        7
    misaka19000  
       Nov 10, 2016
    Java 中(几乎)一切都是对象。《 Thinging In Java 》
    misaka19000
        8
    misaka19000  
       Nov 10, 2016
    靠, thinking 拼错了
    aristotll
        9
    aristotll  
       Nov 10, 2016
    有 primitive 类型的

    为了提高性能

    只是现在 autoboxing 让这种差别在写的时候小了起来
    incompatible
        10
    incompatible  
       Nov 10, 2016
    楼主可以试着写一段代码通过反射去调用一个 static 方法。
    当你调用 Method.invoke(target, args)时,要把该 static 方法所属的 Class 对象作为 target 传入的。
    Which means, static method 是以 Class 对象作为你所说的挂载点的。
    imcxy
        11
    imcxy  
       Nov 10, 2016
    哲学,你太较真了。
    cheneydog
        12
    cheneydog  
       Nov 10, 2016
    怎么好用怎么来,何必追求理论上的完美,现实中总是这样妥协,又那样妥协。
    Chrisplus
        13
    Chrisplus  
       Nov 10, 2016
    不违背一切皆对象(但是有违背的)
    jason19659
        14
    jason19659  
       Nov 10, 2016
    有基本类型就已经违背了
    xingda920813
        15
    xingda920813  
       Nov 10, 2016
    @incompatible 静态方法 Method.invoke(target, args) 中的 target 传入 null 即可。
    kaneg
        16
    kaneg  
       Nov 10, 2016 via iPhone
    java 本来就不是一切皆对象,原始类型,如 int , long 等
    lightening
        17
    lightening  
       Nov 10, 2016
    每个 “一切皆对象” 的语言的 “一切” 的定义都不同……
    102400
        18
    102400  
       Nov 10, 2016
    Ruby 应该符合
    otakustay
        19
    otakustay  
       Nov 10, 2016
    static 因为没有多态性所以说违背面向对象是可以说的,但确实没有违背一切皆对象,毕竟 class/method/field 都可以是对象

    但我其实不认为 java 里 class 是对象,不然不应该有 this.getClass()这种东西了,你应该可以直接把 MyClass 当作参数传给某方法,或者作为某个类的某个字段
    0915240
        20
    0915240  
       Nov 10, 2016
    从大的来说一切都对象。
    细究起来确实是“不常规”。
    georgema1982
        21
    georgema1982  
       Nov 11, 2016
    首先 java 并非一切皆对象。所以这个题目本身就是建立在错误前提下的假命题。
    ryanzyy
        22
    ryanzyy  
       Nov 11, 2016
    @102400
    lambda {|x| puts x} 是对象
    但是 &(lambda {|x| puts x}) 不是对象
    102400
        23
    102400  
       Nov 11, 2016
    @ryanzyy 这是 Python 吧
    ryanzyy
        24
    ryanzyy  
       Nov 13, 2016
    @102400 ruby 里的 block 都不是对象
    102400
        25
    102400  
       Nov 14, 2016
    @ryanzyy 绝对的纯粹应该没有吧, Ruby 应该可以算比较纯粹的了,至少对 Python 来说
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3241 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 85ms · UTC 13:14 · PVG 21:14 · LAX 06:14 · JFK 09:14
    ♥ Do have faith in what you're doing.