百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

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

yuyutoo 2024-10-12 00:57 9 浏览 0 评论

题目说的是为什么不全部使用 static 方法?

我们尝试着想想:如果全部用 static 方法,世界会是怎样?

举个简单的例子,我们有一个汽车相关的程序,每种不同的汽车的喇叭声音不一样。那如果全部用 static 方法来实现,那么结果是这样的:

<pre class="prettyprint hljs java" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">public class Car {
    public static String benzBee(){
        //奔驰的喇叭声
    }
    public static String bydBee(){
        //比亚迪的喇叭声
    }
    // 其他汽车的喇叭声
}

如上面所示,每当有一个汽车的时候,我们都需要新增一个方法,来表示这种汽车的喇叭声。如果我们要实现启动汽车这个逻辑,在所有方法都用 static 来实现的情况下,其整体逻辑为:

<pre class="prettyprint hljs java" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">public class StartCar {
    // 1\. 插入钥匙
    public static void enterKey(){

    }
   // 2\. 通电启动
    public static void start(){

    }
   // 3\. 放刹车
    public static void releaseBrake(){

    }
    // 4\. 踩油门
    public static void stepGas(){

    }

    public static void main(){
        enterKey();
        start();
        releaseBrake();
        stepGas();
    }
}

这样貌似也是可以实现的,但不知道你有没有发现,这样其实就是一种「面向过程」的编程方式了。所谓面向过程的编程方式,指的是以事件为中心的编程方式,编程的时候把解决问题的步骤分析出来,然后用函数把这些步骤实现,在一步一步的具体步骤中再按顺序调用函数。

如果你有使用过其他脚本语言的话,你会发现我们在写脚本的时候,都是用这种「面向过程」的编程方式写的。首先,我们做啥,接着做啥,最后做啥。

「面向过程」这种编程方式,有两个优点:

  • 流程化使得编程任务明确,在开发之前基本考虑了实现方式和最终结果,具体步骤清楚,便于节点分析。
  • 效率高,面向过程强调代码的短小精悍,善于结合数据结构来开发高效率的程序。

但是它也有缺点:需要深入的思考,耗费精力,代码重用性低,扩展能力差,后期维护难度比较大。但 Java 是面向对象的语言,其设计之初就是用来以「面相对象」的编程方式写代码的。

所以如果你要问:Java 中的方法是否可以全部使用 static 方法?答案是:可以,但是没必要,或者说不合适。因为 Java 就是为面向对象而生,全部用 static 方法写不符合「面向对象」的编程方式。

那么什么是面向对象呢?

世界上有很多人和事物,每一个都可以看做一个对象,而每个对象都有自己的属性和行为,对象与对象之间通过方法来交互。面向对象是一种以「对象」为中心的编程思想,把要解决的问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个对象在整个解决问题的步骤中的属性和行为。

例如对于启动汽车这件事情,以面向对象的方式去编写,那么就会有汽车、轮胎、发动机、钥匙等对象,然后对象之间有对应的属性,然后有对应的动作。

面向对象的优点是:

  • 结构清晰,程序是模块化和结构化,更加符合人类的思维方式。
  • 易扩展,代码重用率高,可继承,可覆盖,可以设计出低耦合的系统。
  • 易维护,系统低耦合的特点有利于减少程序的后期维护工作量。

面向对象的缺点是:

  • 开销大,当要修改对象内部时,对象的属性不允许外部直接存取,所以要增加许多没有其他意义、只负责读或写的行为。这会为编程工作增加负担,增加运行开销,并且使程序显得臃肿。
  • 性能低,由于面向更高的逻辑抽象层,使得面向对象在实现的时候,不得不做出性能上面的牺牲,计算时间和空间存储大小都开销很大。

那么什么时候用面向对象,什么时候用面向过程呢?

在日常生活或编程中,简单的问题可以用面向过程的思路来解决,直接有效。但是当问题的规模变得更大时,用面向过程的思想是远远不够的。所以慢慢就出现了面向对象的编程思想。

最后我们总结一下:在 Java 中不全部用 static 方法,主要原因是这种编程方式,不符合「面向对象」的编程思路,而是一种「面向过程」的编程思路,而 Java 是为面向对象而生的语言。因此,在 Java 语言中这么做,就像去用铁铲子去舀汤 —— 可以是可以,但就是费劲。

而面向对象,在非常复杂的系统面前,还是非常有价值的。大家都知道,很多电商系统基本都用 Java 开发,这也体现出了面向对象思维的重要性。

相关推荐

深度解读Spring框架的核心原理

深度解读Spring框架的核心原理在Java开发的世界里,提到Spring框架,就像提起一位久经沙场的老将,它几乎成了企业级应用开发的代名词。那么,这个被无数开发者膜拜的框架究竟有何独特之处?今天,我...

「Spring认证」Spring 框架概述

Spring是最流行的企业Java应用程序开发框架。全球数以百万计的开发人员使用SpringFramework来创建高性能、易于测试和可重用的代码。Spring框架是一个开源的Java...

学习Spring框架 这一篇就够了

1.spring概述1.1Spring是什么(理解)...

Spring框架双核解析:IOC与AOP的本质与实战

#Spring核心#IOC容器#AOP编程#Java框架设计...

Spring Boot与传统Spring框架的对比:探索Java开发的新境界

SpringBoot与传统Spring框架的对比:探索Java开发的新境界在Java生态系统中,Spring框架无疑是一个里程碑式的存在。从最初的简单依赖注入容器,到如今覆盖企业级开发方方面面的庞大...

Spring MVC框架源码深度剖析:从入门到精通

SpringMVC框架源码深度剖析:从入门到精通SpringMVC框架简介SpringMVC作为Spring框架的一部分,为构建Web应用程序提供了强大且灵活的支持。它遵循MVC(Model-V...

Spring框架入门

一.spring是什么?Spring是分层...

程序员必知必会技能之Spring框架基础——面向切面编程!

面向切面编程AOP(AspectOrientedProgramming)与OOP(ObjectOrientedProgramming,面向对象编程)相辅相成。AOP提供了与OOP不同的抽象软件结...

Spring Security安全框架深度解读:为你的应用穿上“钢铁铠甲”

SpringSecurity安全框架深度解读:为你的应用穿上“钢铁铠甲”在现代网络世界里,保护我们的应用程序免受各种威胁攻击至关重要。而在这个过程中,SpringSecurity框架无疑是我们最可...

Spring框架的设计哲学与实现:打造轻量级的企业级Java应用

Spring框架的设计哲学与实现:打造轻量级的企业级Java应用Spring框架自2003年诞生以来,已成为企业级Java应用开发的代名词。它不仅仅是一个框架,更是一种设计理念和哲学的体现。本文将带你...

Spring框架深度解析:从核心原理到底层实现的全方位避坑指南

一、Spring框架核心概念解析1.控制反转(IoC)与依赖注入(DI)Spring的核心思想是通过IoC容器管理对象的生命周期和依赖关系。传统开发中,对象通过new主动创建依赖对象,导致高耦合;而S...

Java框架 —— Spring简介

简介一般来说,Spring指的是SpringFramework,它提供了很多功能,例如:控制反转(IOC)、依赖注入...

Spring 框架概述,模块划分

Spring框架以控制反转(InversionofControl,IoC)和面向切面编程(Aspect-OrientedProgramming,AOP)为核心,旨在简化企业级应用开发,使开发者...

spring框架怎么实现依赖注入?

依赖注入的作用就是在使用Spring框架创建对象时,动态的将其所依赖的对象注入到Bean组件中,其实现方式通常有两种,一种是属性setter方法注入,另一种是构造方法注入。具体介绍如下:●属性set...

Spring框架详解

  Spring是一种开放源码框架,旨在解决企业应用程序开发的复杂性。一个主要优点就是它的分层体系结构,层次结构让你可以选择要用的组件,同时也为J2EE应用程序开发提供了集成框架。  Spring特征...

取消回复欢迎 发表评论: