在 Java 中为什么不全部使用 static 方法?

2022-07-21 10:55:45 +08:00
 qiqiqi7001

为什么不能全部用 static

10441 次点击
所在节点    Java
103 条回复
zhuweiyou
2022-07-21 12:41:49 +08:00
可以,操作对象从参数传进去就行了.内存不是问题,加钱就行.
建议你换语言吧
DOLLOR
2022-07-21 12:47:33 +08:00
object.action()和 action(object)没啥区别,也没有谁比谁更好。
但是因为是 java ,java 主打 OOP ,肯定是能 OOP 的地方就 OOP 呀。
sadfQED2
2022-07-21 12:48:25 +08:00
能全部用静态方法啊,我前前前司,一个 java 项目里面,90%都是静态方法。没出任何毛病
darkengine
2022-07-21 12:51:10 +08:00
这个方法里需要访问成员变量怎么办?哦,也都声明成静态成员变量是吧。谁家猫狗全都名字一样年龄一样啊。
dzdh
2022-07-21 12:56:59 +08:00
@murmur #8

fuck 要判断两个 person 性别是否一致吗
FYFX
2022-07-21 13:01:13 +08:00
正如 34 楼所说,最近在看 https://craftinginterpreters.com/representing-code.html#the-expression-problem ,里面提到因为 java 是面向对象的,假定的是你的操作都是基于相似类型的,增加一个新的派生类类会很方便。如果你要全部 static 相当于放弃了 java 的这个特性,但是 java(除了特别新的版本)又没有函数式编程那种好用的模式匹配,你这么做的话会导致不管是加类还是加方法都很麻烦。
min
2022-07-21 13:36:43 +08:00
C++里面为什么需要有 new ?
sun1991
2022-07-21 13:38:59 +08:00
可以全部 static, 没问题.
面向对象编程 vs 面向数据编程.
tabris17
2022-07-21 13:39:51 +08:00
大家冷静听我说:只要我们在 JAVA 中加入动态创建类型的 feature 不就可以了吗 /doge
fox0001
2022-07-21 13:45:20 +08:00
我觉得,如果全静态,解耦不好做。或者像 go 那样再弄个 wire ?
tairan2006
2022-07-21 13:55:19 +08:00
全静态你还 OOP 个啥
2696284032
2022-07-21 14:06:57 +08:00
jvm:听我说谢谢你,感谢有你,温暖了四季
Jooooooooo
2022-07-21 14:10:25 +08:00
其实是个好问题, 大多数方法根本没有多态的场景.
luozic
2022-07-21 14:10:27 +08:00
全静态,那为啥不用汇编 c/c++ 或者 rust ?觉得魔法不够,,,, 那请用 haskell
knva
2022-07-21 14:32:46 +08:00
@murmur 黄码了
EHemingway
2022-07-21 14:40:09 +08:00
打个比方,你喜欢的妹子是前凸后翘,一米七,天黑了人家本来都专门开好房等你的了。你说不 我要用 static !好嘛房间里瞬间涌入像什么 400 斤的人妖,一米五的肌♂肉猛男,这下你高兴了?
qiqiqi7001
2022-07-21 14:55:26 +08:00
为什么都在说 jvm ,静态方法和实例方法其实在性能上没有区别,加载时机,和内存占用都一样,调用速度也没有区别。
w950888
2022-07-21 15:22:00 +08:00
因为第一门语言是 C, 初学 Java 时这么玩过, 当时搞不明白面向对象, 所有的方法都加 static, 哈哈哈哈
wellerman
2022-07-21 15:42:22 +08:00
哈哈哈,居然有人收藏了。 方法 static 了,那成员变量不就 static 了。那一个类只能处理一种信息,要处理多种就只能复制多个类文件。
guyuesh3
2022-07-21 15:43:32 +08:00
@qiqiqi7001
2.静态方法和实例方法其实在性能上没有区别,加载时机,和内存占用都一样,调用速度也没有区别。
我想问这两个那个是正确的

这个正确,方法是所有对象共享的,不存在一个对象一个方法。类的实例占用的空间,可以大致任务等同于类内部字段所占用的空间。调用速度有差别,但是不会巨大( invokestatic invokevirtual invokeinterface invokespecial 的区别)

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

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

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

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

© 2021 V2EX