java中靜態方法中調用非靜態方法的詳解

靜態static方法中不能調用非靜態(non-static)方法,準確地說是不能 直接調用non-static方法。可是能夠經過將一個對象的引用傳入static方法中,再去調用該對象的non-static方法。
其實這個事實的應用很常常,以致於咱們不去重視:在主函數(static方法)中咱們常常建立某個類的實例,再利用其引用變量調用它的非靜態方法。
 
class Test2{  
    public void method2(){  
        System.out.println("HelloWorld2");  
    }  
}  
  
class test{  
    public void method0(){  
        System.out.println("HelloWorld0");  
    }  
    public static void method1(){  
        System.out.println("HelloWorld1");  
    }  
      
    public static void main(String args[]){           
        new test().method0();   
        method1();   
        new Test2().method2();   
    }     
}  
打印結果:
HelloWorld0
HelloWorld1
HelloWorld2
 
總結:

      首先static的成員是在類加載的時候初始化的,JVM的CLASSLOADER的加載,首次主動使用加載,而非static的成員是在建立對象的時候,即new 操做的時候才初始化的;函數

        前後順序是先加載,才能初始化,那麼加載的時候初始化static的成員,此時非static的成員尚未被加載必然不能使用,而非static的成員是在類加載以後,經過new操做符建立對象的時候初始化,此時static 已經分配內存空間,因此能夠訪問!this

      簡單點說:靜態成員屬於類,不須要生成對象就存在了.而非靜態須要生成對象才產生.因此靜態成員不能直接訪問非靜態.  spa

下面說說靜態的特色:code

1.隨着類的加載而加載對象

也就是,說靜態會隨着類的消失而消失,說明靜態的生命週期最長
2.優先於對象的存在
明確一點:靜態是先存在的對象是後存在的
3.被全部對象共享
4.能夠直接被類名多調用

實例變量和類變量的區別
1.存放位置
類變量隨着類的加載存在於方法區中,實例變量隨着對象的創建存在於堆內存裏
2.生命週期
類變量生命週期最長,隨着「類」的加載而加載,隨着類的消失而消失,實例變量隨着「對象」的消失而消失

靜態的使用注意事項:
1.靜態方法只能訪問靜態成員(包括成員變量和成員方法)
   非靜態方法能夠訪問靜態也能夠訪問非靜態
2.靜態方法中不能夠定義this,super關鍵字
   由於靜態優先於對象存在,因此靜態方法中不能夠出現this,super關鍵字
3.主函數是靜態的。
    blog

靜態的利弊
   利:對對象的共享數據進行單獨空間的存儲,節省空間,沒有必要每個對象中都存儲一份
     能夠直接被類名所調用
   弊:生命週期過長,訪問出現侷限性(只能訪問靜態)生命週期

相關文章
相關標籤/搜索