靜態方法和非靜態方法的區別


靜態方法static(類方法)和 非靜態方法(實例方法)的區別:

方法我們主要分為三種:
1.構造方法
2.非靜態方法(普通方法/實例方法)
3.靜態方法(類方法)

對於1(補充一下):構造方法分為無參構造方法 和 有參構造方法。另外
這兩個方法,涉及到了方法重載(小伙伴可以自己去了解方法重載、方法重寫、方法重構區別,當然我其他文章也會寫相關的介紹)。

一、靜態方法和非靜態方法的區別(調用對象、引用變量不同)
對於2:靜態方法,是使用static關鍵字修飾的方法,又叫類方法。屬於類的,不屬於對象,在實例化對象之前就可以通過類名.方法名調用靜態方法。(靜態屬性,靜態方法都是屬於類的,可以直接通過類名調用)。
A.在靜態方法中,可以調用靜態方法。
B.在靜態方法中,不能調用非靜態方法。
C.在靜態方法中,可以引用類變量(即,static修飾的變量)。
D.在靜態方法中,不能引用成員變量(即,沒有static修飾的變量)。
E.在靜態方法中,不能使用super和this關鍵字

對於3:非靜態方法,是不含有static關鍵字修飾的普通方法,又稱為實例方法,成員方法。屬於對象的,不屬於類的。(成員屬性,成員方法是屬於對象的,必須通過new關鍵字創建對象后,再通過對象調用)。
A.在普通方法中,可以調用普通方法。
B.在普通方法中,可以調用靜態方法
C.在普通方法中,可以引用類變量和成員變量
D.在普通方法中,可以使用super和this關鍵字

二、靜態方法和非靜態方法的區別(調用方法不同)
靜態方法可以直接調用,類名調用和對象調用。(類名.方法名 / 對象名.方法名)
但是非靜態方法只能通過對象調用。(對象名.方法名)

三、靜態方法和非靜態方法的區別(生命周期不同)
靜態方法的生命周期跟相應的類一樣長,靜態方法和靜態變量會隨着類的定義而被分配和裝載入內存中。一直到線程結束,靜態屬性和方法才會被銷毀。(也就是靜態方法屬於類)
非靜態方法的生命周期和類的實例化對象一樣長,只有當類實例化了一個對象,非靜態方法才會被創建,而當這個對象被銷毀時,非靜態方法也馬上被銷毀。(也就是非靜態方法屬於對象)

總結:類方法可以直接通過類名調用,實例方法必需先實例化類,再初始化對象,然后通過類的實例對象才能調用

舉例:

class ABC{

 public static void testStatic(){
	 System.out.println("This is static method");
 }
 public void testMethod(){
 	 System.out.println("This is instance method");
 }

 public static void main(String[] str){
      ABC.testStatic();         //直接通過類調用
  ABC a = new ABC();        //實例化,然后構造方法會初始化
  a.testMethod();           //對象調用方法
  }

--- 借鑒於https://blog.csdn.net/SeniorShen/article/details/100058364


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM