成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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 開發,這也體現出了面向對象思維的重要性。

責任編輯:武曉燕 來源: 樹哥聊編程
相關推薦

2022-12-06 08:26:16

SpringAOPthis調用方法

2021-04-26 20:44:59

Nacos方法String.inte

2019-09-17 15:30:13

Java編程語言

2019-06-26 07:54:53

ArrayListsubList源碼

2012-09-26 10:02:44

框架開發項目

2020-04-07 13:40:13

GraphQLAPI編程語言

2022-01-16 08:02:01

pycharm日志記錄器

2012-04-26 11:39:04

Javastatic變量

2024-02-20 22:13:49

SQL語句編程

2016-03-24 09:53:24

swiftguardios

2009-06-25 10:33:53

StaticJava類

2010-06-17 15:53:41

WAP協議

2017-07-03 13:33:42

AndroidItemDecorat

2014-11-21 10:50:26

JavaString

2011-03-08 12:59:38

proftpd

2021-03-01 08:19:09

Java 包裝類對象

2021-11-15 06:56:45

MyBatis開發項目

2020-09-26 07:19:46

Java

2020-06-19 08:01:48

Kotlin 協程編程

2021-03-22 09:56:01

Java基礎System類Static
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品国产a级 | 欧美激情视频一区二区三区免费 | 精国产品一区二区三区四季综 | 一区二区不卡 | 91精品国产综合久久香蕉麻豆 | 国色天香成人网 | 国产精品国产三级国产aⅴ中文 | 免费在线黄 | 中文字幕视频在线观看 | 午夜激情小视频 | 日韩精品一区二区三区视频播放 | 91毛片在线看 | 在线免费看毛片 | 日本精品一区二区三区在线观看视频 | 免费不卡视频 | 男女羞羞在线观看 | 中文字幕11页 | 亚洲综合一区二区三区 | 午夜视频精品 | 亚洲美女网站 | 黄色三级毛片 | 国产人免费人成免费视频 | 国产精品一区二区av | 国产午夜精品久久 | 国产三级电影网站 | 在线一区二区三区 | 国产精品国产精品 | 九九热这里只有精品6 | 视频一区二区国产 | 久久久视 | 四虎伊人 | 欧美区日韩区 | 99爱在线免费观看 | 91视频一区| 99精品欧美一区二区三区 | 国产91丝袜在线熟 | 久草影视在线 | 999久久久免费精品国产 | 久久黄网| 亚洲精品视频导航 | 九九热免费视频在线观看 |