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

2016 年 11 月 10 日
 palmers

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

4452 次点击
所在节点    程序员
25 条回复
FrankFang128
2016 年 11 月 10 日
Class 也是对象
WhyAreYouSoSad
2016 年 11 月 10 日
一切对象也可以共享某个类别里面的固定资源啊,好比现实世界的各个领域,范围的公共资源。
mooncakejs
2016 年 11 月 10 日
1 楼说得对, class 本身就是对象,你可以理解成 static 属性其实是 Class 的成员, Class 由 java 负责生成单例
itqls
2016 年 11 月 10 日
类对象
wikimore
2016 年 11 月 10 日
static 是面向过程专用,比如一些 Utils ,违背了面向对象,但是不违背一切皆对象吧?
pangliang
2016 年 11 月 10 日
char int byte 就不是对象
misaka19000
2016 年 11 月 10 日
Java 中(几乎)一切都是对象。《 Thinging In Java 》
misaka19000
2016 年 11 月 10 日
靠, thinking 拼错了
aristotll
2016 年 11 月 10 日
有 primitive 类型的

为了提高性能

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

但我其实不认为 java 里 class 是对象,不然不应该有 this.getClass()这种东西了,你应该可以直接把 MyClass 当作参数传给某方法,或者作为某个类的某个字段
0915240
2016 年 11 月 10 日
从大的来说一切都对象。
细究起来确实是“不常规”。

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

https://v2ex.ih06.com/t/319569

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

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

© 2021 V2EX