1. 程式人生 > >什麼時候使用類方法呢?(靜態方法何時使用)

什麼時候使用類方法呢?(靜態方法何時使用)

  • 如果某些操作不依賴具體例項,那它就是靜態的,反之如果某些操作是依賴具體例項的(例如訪問一個特定會員的名稱),那它就應該是例項化的。
  • 靜態方法不用new物件可以直接呼叫
  • 1.與類相關與物件無關 
    2.不需要物件的“輕”方法 
    3.工廠方法
  • 如果某個方法是用頻率較高,或者方法本身通用性較強,無需初始化類成員變數,則可以使用靜態方法,那樣方便,速度也快.
  • 可以直接拿來就用的方法,就算是靜態的.
  • 肯定不涉及具體物件,因為靜態方法內,是無法直接使用任何非靜態成員的。
  • (1)製作工具類 
    (2)可以當作"作局"物件或方法來使用
  • 靜態方法和例項方法是一樣的,在型別第一次被使用時載入。呼叫的速度基本上沒有差別。
  • 靜態方法不用建立例項就可呼叫,比較簡單從面向物件的角度上來說,在抉擇使用例項化方法或靜態方法時,應該根據是否該方法和例項化物件具有邏輯上的相關性,如果是就應該使用例項化物件  反之使用靜態方法
  • 不需要生成物件的 
    經常頻繁使用的 
    工具類裡的(如SqlHelper)
  • 適當地使用static方法本身並沒有什麼,當一個人從來不懂使用多型、介面設計時,很自然地會濫用static方法。
  • 個人理解在多個類中需要呼叫並且是與物件無關的方法可設為靜態方法,方便呼叫。
  • 所有物件共有的方法
  • 再不關係到任何於特定物件相關的操作 
    比如學生的年齡就是學生的相關。 
    修改學生的年齡就不適合用靜態方法。 
    一般來說,如果你的方法裡沒有用到this關鍵字, 
    那就適合用靜態方法
  • 通常通用的類中一些常用的方法可以設計為靜態類
  • 只要是沒有用到類的狀態資訊,只從引數獲取資訊的都可以為靜態的
  • 可以實現某些特殊的設計模式:如Singleton
  • 由於沒有this指標,可以把某些系統API的回撥函式以靜態函式的形式封裝到類的內部
  • 可以封裝某些演算法,比如數學函式,如ln,sin,tan等等,這些函式本就沒必要屬於任何一個物件,所以從類上呼叫感覺更好
  • 總之,從OOA/OOD的角度考慮,一切不需要例項化就可以有確定行為方式的函式都應該設計成靜態的
  • 靜態方法與非靜態方法最明顯的區別就是如果某個方法是公共靜態的,那麼可以直接通過類名.方法名的方法來呼叫,而公共例項方法則需要事先例項化物件,然後才能呼叫。

  這些各種說法,基本上都是正確的。

轉載地址:http://www.cnblogs.com/devinzhang/archive/2012/04/27/2473570.html

相關推薦

少說話多寫程式碼之Python學習050——的成員靜態方法成員方法,getattr,setattr

我們在訪問類的欄位時,還有一些過濾的條件,類似於前端語言比如vue Js、anjularJs中過濾器的概念。在3.0以前可以使用比如,__setattr__,__getattr__的方法進行屬性的過濾。在3.0以後我們如果對某些欄位需要過濾訪問,也可以使用這些函式。 class Rectan

Java 局部變量、實例變量、變量靜態變量區別

其中 對象 llc -c cli num 改變 system name 1. 局部變量: 局部變量是類的方法中的變量; 2. 實例變量: 實例變量也是類中獨立於方法之外的變量,不過沒有static修飾,也叫 對象變量 3. 類變量(靜態變量): 類變量是類中獨立於方法之外的

隨筆⑨ java中的變量 --- 變量靜態變量,final變量,成員變量,局部變量

stat 很大的 public color 靜態 不同 nbsp 綜合 加載 java中的變量 --- 類變量(靜態變量),final變量,成員變量,局部變量 ① 類變量(也叫靜態變量)是類中獨立於方法之外的變量,用static 修飾,靜態變量隨著類的加載而加載。 ② f

什麼時候使用方法靜態方法何時使用

如果某些操作不依賴具體例項,那它就是靜態的,反之如果某些操作是依賴具體例項的(例如訪問一個特定會員的名稱),那它就應該是例項化的。靜態方法不用new物件可以直接呼叫 1.與類相關與物件無關  2.不需要物件的“輕”方法  3.工廠方法 如果某個方法是用頻率較高,或者方法本身通用性較強,無需初始化類成員變數

Java靜態方法 與 非靜態方法實例方法的區別

外部類 允許 靜態成員 靜態 成員 訪問 靜態成員變量 ava 實例方法 靜態方法與實例方法的異同   1.在外部類 調用靜態方法時,有兩種方式:(1)類名.靜態方法()(2)類的對象.靜態方法() ;也就是說調用靜態方法時可以不用創建對象。      調用實例

Java棧,PC寄存器,本地方法棧,堆,方法靜態和運行常量池

局部變量 fan log 變量 實例 分析 創建 china java棧 https://my.oschina.net/wangsifangyuan/blog/711329 前言:當要判斷一個變量存在什麽空間上時,先分析它是哪一種(是實例變量還是局部變量),實例變量存在於所

定義抽象Shape,抽象方法為showArea(),求出面積並顯示,定義矩形Rectangle,正方形Square,圓 Circle,根據各自的屬性,用showArea方法求出各自的面積,在main方法中構造3個對象,調用showArea方法體現多態

子類 protected new 都是 package 使用 類指針 3.1 shape 實現多態的三個條件:1.要有繼承2.要有抽象方法重寫3.用父類指針(引用)指向子類對象 重載重寫重定義的區別: 1.重載:在同一個類中進行;  編譯時根據參數類型和個數決定方法調用; 

Idea 添加註釋:註釋、方法註釋可獲取引數

Idea 添加註釋:類註釋、方法註釋類註釋方法註釋 類註釋 File–Setting–Editor–File and Code Templates–Class: 註釋模板:/** * *

禁用頁面快取的幾種方法靜態和動態

 1、在Asp頁面首部<head>加入    以下是引用片段:   Response.Buffer   =   True       Response.ExpiresAbsolute   =   Now()   -   1       Response.Exp

java 靜態static方法與非靜態方法

1、靜態方法中可以引用靜態方法和靜態變數,不可以引用非靜態方法與變數。  這很好理解:因為靜態方法不需要例項化類,可以直接用(類名.方法名)的方式呼叫。 假設靜態方法可以操作非靜態方法與變數,那麼對於(類名.方法名)的這種方法呼叫方式, 那麼其中的非靜態變數就沒有被例

交給子: Template Method模板方法模式【PHP】

pri align 子類 特定 itl area 圖結構 -a abs Template Method(模板方法模式) ---- 將具體處理交給子類 Template Method 就是定義一個操作中的算法骨架,而將一些步驟延遲到子類中,使得子類可以不改變一個算法

java中方法總結每周更新

實例 參數 創建 方法 get ack bject 子類 generate 1、URLEncoder.encode(username,"utf-8")將“utf-8”編碼的username先解碼,然後再采用URL編碼 2、URLDecoder.decode(autoLogi

Python的程序結構(2) -> 方法/Method -> 靜態方法方法和屬性方法

程序 屬性的方法 屬性方法 cls ati instance 而在 gpo int 靜態方法、類方法和屬性方法 在 Python 中有三種常用的方法裝飾器(參考裝飾器部分內容),可以使普通的類實例方法變成帶有特殊功能的方法,分別是靜態方法、類方法和屬性方法。 靜態方

Array對象的方法總結ES5 與 ES6

判斷 否則 array 復制 indexof define 字符 red 三個參數 ES5 數組方法 1.Array.isArray() 方法用來判斷一個值是否為數組。它可以彌補typeof運算符的不足 2.valueOf() 方法返回數組本身 3.toString()

C#設計模式之十三模板方法模式Template Method Pattern【行為型】

並集 client 變化 args 集中 pac 爸爸 rim 自己 原文:C#設計模式之十三模板方法模式(Template Method Pattern)【行為型】一、引言 “結構型”的設計模式已經寫完了,從今天我們開始講“行為型”設計模式。現在我們開始講【行為型】設

python文件和目錄操作方法大全含實例

file python tree odin inux 長度 需要 tell mtr 一、python中對文件、文件夾操作時經常用到的os模塊和shutil模塊常用方法。 1 得到當前工作目錄,即當前Python腳本工作的目錄路徑: os.getcwd() 2 返回指定

方法@classmethod、屬性方法@property、靜態方法 @staticmethod

baby turn 普通 用不了 stat 類變量 self. mon 小白 class Baby(): # def __init__(self,name):#構造函數不是必須得 # print(‘self的內存地址‘,id(self)) #

Web自動化常用方法封裝不定時更新

display isp 更新 after ive UC second 捕獲 expected 1.對於可能因某些原因延遲出現的瀏覽器Alert彈窗的點擊操作 public void waitAlertClick(){ WebDriverWait wait = new W

【樹莓派】開機自啟動腳本方法之一.Desktop文件

ron 自啟動 startup devel 腳本 name 系統 blank key 轉載處: 又一個讓樹莓派開機運行Python腳本的方法 Linux 創建啟動器(.Desktop文件) 首先,樹莓派使用的是官方推薦的鏡像:RASPBIAN; 在樹莓派上常常會需要開機

C#靜態 靜態方法與非靜態方法比較

定義 都是 無法 不能 tro 就是 類的本質 bsp true 靜態類: 在類(class)上加入static修飾, 表示該類無法被實例化,並且該類中,無法實例化變量或函數。 那麽如果要在此靜態類中添加函數、變量、屬性,則必須都是靜態的。 靜態類的主要特性: 1:僅包含靜