前段时间在知乎上看到这个问题。一开始觉得挺无厘头的,仔细一想,才发现是考验语言理解力的。所以写下我的理解,今天把答案搬到这里来和大家分享。这个问题看似有点无厘头,但仔细想想,还是很考验答主对Java语言的理解程度的。如果您没有任何Java开发经验,您可能无法弄清楚为什么。作为一个工作了8年,写了12年Java代码的研发老手,我简单说一下这个问题。问题是为什么不都使用静态方法呢?让我们试想一下:如果所有的静态方法都被使用,世界会是什么样子?举个简单的例子,我们有一个汽车相关的程序,每辆不同的汽车喇叭的声音是不同的。如果全部用静态方法实现,结果会是这样:publicclassCar{publicstaticStringbenzBee(){//奔驰的喇叭声}publicstaticStringbydBee(){//比亚迪的喇叭声}//其他汽车喇叭声}如上所示,只要有汽车,我们就需要添加一个新的方法来表示汽车喇叭声。如果我们要实现启动汽车的逻辑,当所有方法都用static实现时,整体逻辑是:publicclassStartCar{//1.插入钥匙publicstaticvoidenterKey(){}//2.开机并启动publicstaticvoidstart(){}//3.松开刹车publicstaticvoidreleaseBrake(){}//4.踩油门publicstaticvoidstepGas(){}publicstaticvoidmain(){enterKey();开始();释放刹车();步骤气体();}}这看起来是可以实现的,但是不知道大家有没有发现,这其实是一种“面向过程”的编程方式。所谓面向过程的编程方法是指以事件为中心的编程方法。编程时分析解决问题的步骤,然后将这些步骤用函数实现,在具体步骤中按顺序依次调用函数。如果你用过其他的脚本语言,你会发现,我们在写脚本的时候,都是采用这种“面向过程”的编程方式来编写的。首先,我们做什么,下一步做什么,最后做什么。“面向过程”的编程方法有两个好处:过程使编程任务明确,开发前基本考虑实现方法和最终结果,具体步骤清晰,便于节点分析。效率高,面向过程,强调代码的短小,善于结合数据结构开发高效的程序。但它也有缺点:需要深入思考,耗费精力,代码复用性低,扩展性差,后期维护相对困难。但是Java是一种面向对象的语言,它最初的设计目的是为了以“面向对象”的编程风格编写代码。那么如果你想问:Java中的所有方法都可以使用静态方法吗?答案是:可以,但是没有必要,或者不合适。因为Java是为面向对象而生的,全部使用静态方法来写,不符合“面向对象”的编程方式。那么什么是面向对象呢?世界上有很多人和事,每个人都可以看作是一个对象,每个对象都有自己的属性和行为,对象之间通过方法进行交互。面向对象是一种以“对象”为中心的编程思想。它将要解决的问题分解为各种对象。创建对象的目的不是为了完成一个步骤,而是描述一个对象在整个解题步骤中的作用。属性和行为。比如启动汽车,用面向对象的方式来写,那么就会有汽车、轮胎、发动机、钥匙等对象,然后对象之间就会有相应的属性,然后就会有做相应的动作。面向对象的优点是:结构清晰,程序模块化结构化,更符合人的思维方式。可以设计易于扩展、代码复用率高、可继承、可覆盖、低耦合的系统。系统的易维护性和低耦合性有助于减少程序后期维护的工作量。面向对象的缺点是:开销大,在修改对象内部时,对象的属性不允许外部直接访问,所以很多没有其他意义,只负责读或写的行为必须被添加。这增加了编程的负担,增加了运行时的开销,并使程序显得臃肿。低性能。由于逻辑抽象层较高,在实现面向对象时,不得不牺牲性能,计算时间和空间存储大小都非常昂贵。那么什么时候使用面向对象,什么时候使用面向过程呢?在日常生活或编程中,用面向过程的思维可以直接有效地解决简单的问题。但是当问题的规模变大的时候,仅仅使用面向过程的思维是不够的。于是慢慢的出现了面向对象编程的思想。最后总结一下:Java不使用静态方法的主要原因是这种编程方式不符合“面向对象”的编程思想,而是一种“面向过程”的编程思想,而Java是面向对象的编程。天生的语言。所以,用Java语言做这件事,就好像拿铲子去舀汤一样——可以,但是很费力。而面向对象,面对非常复杂的系统,还是很有价值的。大家都知道很多电子商务系统基本都是用Java开发的,这也体现了面向对象思想的重要性。
