我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java 中不全部使用 Static 方法的理由

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java 中不全部使用 Static 方法的理由

前阵子在知乎上看到这个问题,一开始觉得还挺无厘头的,但细细一想却发觉这里面很考验对语言的理解。于是写下了我的理解,今天把回答搬运到这里,与大家一起分享。

这个问题看起来有点无厘头,但仔细想想却非常考验答主对 Java 这门语言的理解。如果没有什么 Java 开发经验,那估计是想不出所以然来的。作为一个工作了 8 年,写了 12 年 Java 代码的研发老兵,我来简单聊聊这个问题。

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

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

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

public class Car {
    public static String benzBee(){
        //奔驰的喇叭声
    }
    public static String bydBee(){
        //比亚迪的喇叭声
    }
    // 其他汽车的喇叭声
}

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

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 开发,这也体现出了面向对象思维的重要性。

到此这篇关于Java 中不全部使用 Static 方法的理由的文章就介绍到这了,更多相关Java不全部使用 Static 方法内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java 中不全部使用 Static 方法的理由

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java 中不全部使用 Static 方法的理由

这篇文章主要介绍了Java 中不全部使用 Static 方法的理由,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2022-11-13

Java中static、this、super、final的使用方法

这篇文章主要介绍“Java中static、this、super、final的使用方法”,在日常操作中,相信很多人在Java中static、this、super、final的使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法
2023-06-03

Java中Static关键字使用的方法有哪些

本文小编为大家详细介绍“Java中Static关键字使用的方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中Static关键字使用的方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 直接
2023-07-05

Java中static关键字的使用方式

这篇文章主要介绍“Java中static关键字的使用方式”,在日常操作中,相信很多人在Java中static关键字的使用方式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中static关键字的使用方式
2023-06-20

详解Java中static关键字的使用和原理

static可以用来修饰的成员变量和成员方法,被修饰的成员是属于类的,而不是单单是属于某个对象的。本文就来详细说说他的使用和原理,需要的可以参考一下
2022-11-13

java 中匿名内部类的使用方法

本篇文章为大家展示了java 中匿名内部类的使用方法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。java 中匿名内部类的实例详解原来的面貌: class TT extends Test{ v
2023-05-31

C语言中static的使用方法实例详解

static一般用于修饰局部变量,全局变量,函数,下面这篇文章主要给大家介绍了关于C语言中static用法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2022-11-13

java尾部递归的使用方法

这篇文章给大家分享的是有关java尾部递归的使用方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、说明在尾部递归中,递归调用是函数执行的最后一件事,因此编译器不需要保存函数堆栈帧。大多数编译器可以像优化迭代代
2023-06-15

java中不定长参数的使用方法

java中不定长参数的使用方法不定长参数方法的语法如下:返回值 方法名(参数类型...参数名称)在参数列表中使用“...”形式定义不定长参数,其实这个不定长参数a就是一个数组,编译器会将(int...a)这种形式看作是(int[] a)的形式。示例:编写一个不
java中不定长参数的使用方法
2016-04-19

angular9中路由守卫的使用方法

小编给大家分享一下angular9中路由守卫的使用方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!路由守卫是什么任何用户都能在任何时候导航到任何地方。但有时候出
2023-06-14

Java中Unsafe在安全领域的使用方法

本文小编为大家详细介绍“Java中Unsafe在安全领域的使用方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中Unsafe在安全领域的使用方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。0 前言u
2023-06-29

npm安装的全局包/工具不能使用,不是内部/外部命令的解决方法

这篇文章主要给大家介绍了关于npm安装的全局包/工具不能使用,不是内部/外部命令的解决方法,文中通过图文将解决的方法介绍的非常详细,需要的朋友可以参考下
2023-03-19

C++单例模式实例化一个对象不全部使用static的原因是什么

今天小编给大家分享一下C++单例模式实例化一个对象不全部使用static的原因是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一
2023-06-30

Java中static修饰的静态变量、方法及代码块的特性与使用

这篇文章主要介绍了Java中static修饰的静态变量、方法及代码块的特性与使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-16

java中ThreadLocal避免线程不安全的方法

这篇文章主要介绍java中ThreadLocal避免线程不安全的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、说明ThreadLocal 翻译是线程本地变量的意思, ThreadLocal 就是用来创建线程的
2023-06-15

Java 动态代理中Proxy的使用方法

本篇文章给大家分享的是有关Java 动态代理中Proxy的使用方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。动态代理可以提供对另一个对象的访问,同时隐藏实际对象的具体事实
2023-06-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录