按照 java 的哲学,一切皆对象, 所有成员应该都会有一个对象作为挂载点,但是static
修饰的成员是否违背这一哲学或者原则?
1
FrankFang128 2016-11-10 15:37:45 +08:00 via Android 1
Class 也是对象
|
2
WhyAreYouSoSad 2016-11-10 15:41:38 +08:00
一切对象也可以共享某个类别里面的固定资源啊,好比现实世界的各个领域,范围的公共资源。
|
3
mooncakejs 2016-11-10 15:49:26 +08:00
1 楼说得对, class 本身就是对象,你可以理解成 static 属性其实是 Class 的成员, Class 由 java 负责生成单例
|
4
itqls 2016-11-10 15:53:25 +08:00
类对象
|
5
wikimore 2016-11-10 16:05:11 +08:00
static 是面向过程专用,比如一些 Utils ,违背了面向对象,但是不违背一切皆对象吧?
|
6
pangliang 2016-11-10 16:27:13 +08:00
char int byte 就不是对象
|
7
misaka19000 2016-11-10 16:38:05 +08:00
Java 中(几乎)一切都是对象。《 Thinging In Java 》
|
8
misaka19000 2016-11-10 16:38:48 +08:00
靠, thinking 拼错了
|
9
aristotll 2016-11-10 16:53:44 +08:00
有 primitive 类型的
为了提高性能 只是现在 autoboxing 让这种差别在写的时候小了起来 |
10
incompatible 2016-11-10 16:58:08 +08:00
楼主可以试着写一段代码通过反射去调用一个 static 方法。
当你调用 Method.invoke(target, args)时,要把该 static 方法所属的 Class 对象作为 target 传入的。 Which means, static method 是以 Class 对象作为你所说的挂载点的。 |
11
imcxy 2016-11-10 17:05:08 +08:00
哲学,你太较真了。
|
12
cheneydog 2016-11-10 17:07:26 +08:00
怎么好用怎么来,何必追求理论上的完美,现实中总是这样妥协,又那样妥协。
|
13
Chrisplus 2016-11-10 17:17:16 +08:00
不违背一切皆对象(但是有违背的)
|
14
jason19659 2016-11-10 17:18:42 +08:00
有基本类型就已经违背了
|
15
xingda920813 2016-11-10 18:02:46 +08:00
@incompatible 静态方法 Method.invoke(target, args) 中的 target 传入 null 即可。
|
16
kaneg 2016-11-10 18:49:33 +08:00 via iPhone
java 本来就不是一切皆对象,原始类型,如 int , long 等
|
17
lightening 2016-11-10 18:53:07 +08:00
每个 “一切皆对象” 的语言的 “一切” 的定义都不同……
|
18
102400 2016-11-10 19:22:43 +08:00
Ruby 应该符合
|
19
otakustay 2016-11-10 19:30:50 +08:00
static 因为没有多态性所以说违背面向对象是可以说的,但确实没有违背一切皆对象,毕竟 class/method/field 都可以是对象
但我其实不认为 java 里 class 是对象,不然不应该有 this.getClass()这种东西了,你应该可以直接把 MyClass 当作参数传给某方法,或者作为某个类的某个字段 |
20
0915240 2016-11-10 20:27:37 +08:00
从大的来说一切都对象。
细究起来确实是“不常规”。 |
21
georgema1982 2016-11-11 08:14:06 +08:00
首先 java 并非一切皆对象。所以这个题目本身就是建立在错误前提下的假命题。
|
22
ryanzyy 2016-11-11 14:13:54 +08:00
|