static關鍵字大家肯定是用的很多了,說起來大家也都知道,這有什麼好談的?
可是回想起以前的一些事情,不免叫我心中......
事情起因,一個項目中的一些類中全部都是方法,但是被設計成了非靜態類了。於是我為了說服同事將這些類設計成靜態的,下了好大的力度。等同事明白過來以後,我已疲憊不堪。
不知道您是否存在以下觀點?
- static是從面向過程到面向對象的遺留產物,以往開發都是面向過程的,所以很多使用了靜態類、靜態方法,到了面向過程以後,這個關鍵字被保留下來了。因此面向對象開發中最好不用或少用static關鍵字。
- 無論是靜態類還是非靜態類,效果都是一樣的,沒什麼區別。
- 如果你非要讓我使用靜態類,那麼這樣做的意義在哪裡?
- 如果我把非靜態類該為靜態類,那麼會不會有什麼問題?
下面針對以上的一些觀點,筆者闡述下自己的理解,如果哪裡有寫的不對的地方,還請指出。
- static關鍵字的確是面向過程開發的時代就有的關鍵字,但是並不代表是面向對象開發中就應該盡量避免static關鍵字。
- 靜態類跟非靜態類效果肯定是不一樣的,區別肯定是有的。
- 根據筆者的經驗,static類一般用於與狀態無關的類。那麼,什麼是與狀態無關的類?我的理解是當一個類中沒有屬性,只有方法的的時候,就可以認為這個類是與狀態無關的類。回想非靜態類實例化一個對象,目的在什麼地方?目的就是通過這個實例化的對象來保存類的狀態。
不是嗎?例如
A a = new A();
a.Name = "Kevin";
a.Sex = "男";
......
通過我們實例化的對象a,類的狀態被對象a保持住了。
如果我們的類沒有屬性,全是方法,那麼,有必要為了調用類中的方法,先實例化一個對象出來嗎?
因此,筆者建議,在做類的設計的時候,如果類是與狀態無關的類,建議將其設計為static類。
至於說這樣做的意義:首先,省略了構造一個對象的性能損耗,雖然可以忽略不計。其次,對程序員比較友好,調用類的方法更加的方便。
- 只要一個類是與狀態類無關的類,那麼將其設計成靜態類是沒有問題的。
對於以上的一些觀點,純屬個人經驗之談。如果您有不同的觀點,歡迎共同交流。