區別:1.靜態方法是使用static關鍵字修飾的方法,屬於類別的,不屬於物件;非靜態方法是不使用static關鍵字修飾的普通方法,屬於對象,不屬於類別。 2.靜態方法可以直接調用,類別名稱調用和物件調用;非靜態方法只能透過物件調用。 3.生命週期不同。
本教學操作環境:windows7系統、java8版、DELL G3電腦。
一、靜態方法和非靜態方法的區別(呼叫物件、引用變數不同)
靜態方法:是使用static關鍵字修飾的方法,又叫類別方法.屬於類別的,不屬於對象, 在實例化物件之前就可以透過類別名稱.方法名稱呼叫靜態方法。 (靜態屬性,靜態方法都是屬於類別的,可以直接透過類別名稱呼叫)。
A.在靜態方法中,可以呼叫靜態方法。
B.在靜態方法中,不能呼叫非靜態方法。
C.在靜態方法中,可以引用類別變數(即,static修飾的變數)。
D.在靜態方法中,不能引用成員變數(即,沒有static修飾的變數)。
E.在靜態方法中,不能使用super和this關鍵字
非靜態方法:是不含有static關鍵字修飾的普通方法,又稱為實例方法,成員方法。屬於對象的,不屬於類別的。 (成員屬性,成員方法是屬於物件的,必須透過new關鍵字建立物件後,再透過物件呼叫)。
A.在普通方法中,可以呼叫普通方法。
B.在普通方法中,可以呼叫靜態方法
C.在普通方法中,可以引用類別變數和成員變數
D.在普通方法中,可以使用super和this關鍵字
二、靜態方法和非靜態方法的區別(調用方法不同)
靜態方法可以直接調用,類別名稱調用和對象調用。 (類別名稱.方法名稱 / 物件名稱.方法名稱)
但是非靜態方法只能透過物件呼叫。 (物件名稱.方法名稱)
三、靜態方法與非靜態方法的差異(生命週期不同)
靜態方法的生命週期跟對應的類別一樣長,靜態方法和靜態變數會隨著類別的定義而被分配和裝載入記憶體中。一直到執行緒結束,靜態屬性和方法才會被銷毀。 (也就是靜態方法屬於類別)
非靜態方法的生命週期和類別的實例化物件一樣長,只有當類別實例化了一個對象,非靜態方法才會被創建,而當這個對象被銷毀時,非靜態方法也馬上被銷毀。 (也就是非靜態方法屬於物件)
總結:類別方法可以直接透過類別名稱調用,實例方法必需先實例化類,再初始化對象,然後透過類別的實例物件才能調用
舉例:
class XYZ{ public static void main(String[] str){ XYZ.testStatic(); //直接通过类调用 XYZ a = new XYZ(); //实例化,然后构造方法会初始化 a.testMethod(); //对象调用方法 } public static void testStatic(){ System.out.println("This is static method"); } public void testMethod(){ System.out.println("This is instance method"); } }
靜態static變數/方法在類別載入的過程中被初始化,在記憶體中只存在一份,所以可以把它當作是全域變數/方法。
相關影片教學推薦:Java影片教學
#以上是java靜態方法和非靜態方法的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!