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

2016-11-10 15:26:10 +08:00
 palmers

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

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

为了提高性能

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

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

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

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

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

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

© 2021 V2EX