Java中的類和c 中的類,在使用中要理解?

時間 2021-06-01 17:57:32

1樓:Lieu

長文慎入, 內含"星際"穿越

我覺得這是乙個程式語言設計的問題, 也是個空間緯度的問題. 很有意思.

還沒接受過科班的CS的訓練, 程式設計經驗僅限J2EE的前後端, 拋磚引玉, 談談自己的思考.

二維世界

我認為程式語言的基本元素是操作符和變數, 而通過操作符操作變數這一行為即乙個語句. 比如有變數a, 有操作符int, 則組成的語句

inta

;的意思就是在記憶體中分配乙個指定大小的地方用來存放a. 而語句a=

a+1;

之中有變數a和1, 有操作符=和+. 這已經是個有一定複雜度的系統了, 因為我們設定了語句是可以看成乙個整體, 即語句a+1可以作為乙個整體, 當成變數b來處理. a=a+1就是a=b.

而且操作符可以有三元操作符如 a>b?c:d, 如果你高興還可以做個N元操作符 x?

1:2:3:

4:n.

三維世界

目前為止, 我們的程式設計世界只是一條條的語句, 每次執行乙個複雜任務, 都要寫一堆語句, 是不是好煩, 如果任務重複性高, 就要重複寫好多遍. 其實這已經有了一點函式概念的萌發. 從直觀的角度來說, 我們總是希望相互之間有密切關係的東西能包裹在一起, 所以就把關係密切的語句包裹起來成為一串語句, 叫他為函式吧, 給他乙個函式名以供呼叫, 將來要呼叫這一串語句只要呼叫這個函式名就好了.

(注意現在的函式還沒有引數傳遞)

這一下子開啟了新世界的大門! 為什麼? 因為產生了新的空間啊, 現在我們的程式設計世界有一維的變數和操作符, 二維的語句, 三維的函式.

高緯度可以包括進任意數量的低緯度呢! 或者說在函式這個空間裡你可以寫任意數量的語句, 使用任意數量的變數. 記得前面說的自定義N元操作符嗎, 這其實類似乙個星際穿越(誤!

流程控制)的問題, 因為我們把二維的語句看成了乙個一維的整體(變數)來處理. 在二維的世界裡是可以穿越一維的, 比如a>b?c+1:

d, true的時候跳過了一維d, false的時候跳過了一維(c+1). 同樣, 在三維的函式裡, 也是可以穿越二維(語句)的, 就有了if-else,while,for,switch. 這裡, 將二維串起成三維的是變數狀態的傳遞.

偉大的造物主又規定三維的函式可以看做一維的變數, 即return.(腦洞時間, 如果函式的return值可以看做一維的操作符會如何? 二維的語句呢?

) 於是, 我們的程式設計世界只有乙個個的函式. 但是因為三維函式和一維變數平起平坐了, 所以有了引數傳遞.舉個例子

functionName

(vara)

相比二維世界, 這裡的複雜度就高的多了, 出現了遞迴, 大部分複雜到填上去的演算法也不過是這個維度. 不過這裡有個奇怪的地方, 既然函式時最高維的世界了, 那函式裡呼叫的那個anotherFunction, 簡直是異世界的亂入啊. 所謂函式呼叫這個功能是三點五維的.

(注意之前沒有二點五維這個概念, 因為二維語句可以視作一維變數, 自動降維了, 但此時三維函式不能視作二維語句.)

四維世界

這一維度正是題主所困惑的, 沒關係地球人, 我理解你. 這是因為你雖身處四維, 卻沒有體會過四維甚至五維的妙處, 這只有在更高維度才能體會.

現在進入了四維世界, 稱呼他為類, 類是四維的, 所以他可以包含無限的一維變數, 一維操作符, 二維語句, 三維函式.(當然有一定的限制和組合的要求) 在這個四維的空間裡, 函式裡呼叫的其他函式不再是異世界的亂入, 而是乙個類裡的同胞, 所以三維世界可以串成四維的. 雖然目前類是最高維度, 但是類沒有可執行的功能(也就是不能視作二和三維), 所以類只是作為乙個四維容器來承載這些低緯度的內容, 執行功能這個重任交給了main函式.

在main函式裡, 你通過函式呼叫, 在函式間肆意的穿越, 因為觸碰不到邊界, 覺得四維是個啥沒用的東西, 就像只有二維的語句時, 你剛剛萌發了一點函式的概念, 不知道三點五維的函式呼叫功能有啥好處一樣.

如果說要有四點五維度異世界亂入的功能, 我覺得static是乙個, 泛型和集合類也是乙個, 如下, ActionContext和Map, String, Object, sysout是個什麼東東?

class

SomeAction

}五維世界

這一世界比較抽象了, 可以理解為乙個工程.工程裡有好多的類, 一樣的, 通過函式的呼叫來實現類之間的穿越. 同乙個類也可以有多個例項(平行世界), 他們之間有不同的狀態.

從這一點上來說, 類是對更複雜和更龐大的函式和變數狀態進行了一種包裝. 在這一複雜度上, 出現了public, private等關鍵字, 以及extends, implements等功能. OOP的三個關鍵, 繼承多型封裝, 在這一維度的世界才能大放異彩, 比如函式那個維度有演算法, 這個維度有設計模式.

來看在乙個struts2的action類中.

class

SomeAction

extends

ActionSupport

implements

SomeWare

//getter & setter

}進入這一維度, 就好比三體裡描述的藍色空間號上的人進入四維碎片一樣, 一開始害怕, 恐懼, 不敢施展手腳, 但一旦習慣了之後再出去就覺得壓抑難受. 而這一切對於未進入過高維空間的人來說是無法體會的.

所以題主, 快來五維世界歡快地穿越吧!

(感覺前半篇在安利我的程式語言觀, 後半部又寫得好娛樂好水...)

C 中的類 class entry public entry next 這裡的entry與next有什麼關係?entry怎麼能修飾next呢?

你建立了乙個類,就建立了乙個型別。public entry next 看不懂,public Integer next 能看懂吧?乙個道理。 南蔥 遞迴型別並不是乙個很基礎的概念,乙個型別之所以能成為它自己的組成部分,乙個很重要的前提就是遞迴型別展開是可以終止的,換句話說就是該型別的例項可以為空值 這...

Java 中 double 類資料運算精度不准怎麼解決呢?

wuxinliulei final String jsonStr final JsonObject jsonObject new JsonObject jsonStr final String payFee jsonObject.getString payFee final BigDecimal b...

C 在類中能定義本身型別的成員嗎?

番茄.go 至少有兩種情況是允許的。指標靜態成員變數 Member.cpp include classA AA a int main 執行 g Wall O2 o Member Member.cpp Member An object of class A.An object of class A.A...