java中靜態方法中調用非靜態方法


我們都知道,靜態static方法中不能調用非靜態(non-static)方法,准確地說是不能 直接 調用non-static方法。但是可以通過將一個對象的引用傳入static方法中,再去調用該對象的non-static方法。
      其實這個事實的應用很經常,以至於我們不去重視:在主函數(static方法)中我們經常創建某個類的實例,再利用其引用變量調用它的非靜態方 法。
[java]  view plain  copy
 print ?
  1. class Test2{  
  2.     public void method2(){  
  3.         System.out.println("HelloWorld2");  
  4.     }  
  5. }  
  6.   
  7. class test{  
  8.     public void method0(){  
  9.         System.out.println("HelloWorld0");  
  10.     }  
  11.     public static void method1(){  
  12.         System.out.println("HelloWorld1");  
  13.     }  
  14.       
  15.     public static void main(String args[]){           
  16.         new test().method0();   
  17.         method1();   
  18.         new Test2().method2();   
  19.     }     
  20. }  

打印結果:
HelloWorld0
HelloWorld1
HelloWorld2

總結:

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

        先后順序是先加載,才能初始化,那么加載的時候初始化static的成員,此時非static的成員還沒有被加載必然不能使用,而非static的成員是在類加載之后,通過new操作符創建對象的時候初始化,此時static 已經分配內存空間,所以可以訪問!

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

下面說說靜態的特點:

1.隨着類的加載而加載

也就是,說靜態會隨着類的消失而消失,說明靜態的生命周期最長
2.優先於對象的存在
明確一點:靜態是先存在的對象是后存在的
3.被所有對象共享
4.可以直接被類名多調用

實例變量和類變量的區別
1.存放位置
類變量隨着類的加載存在於方法區中,實例變量隨着對象的對象的建立存在於堆內存里
2.生命周期
類變量生命周期最長,隨着“類”的加載而加載,隨着類的消失而消失,實例變量隨着“對象”的消失而消失

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

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


免責聲明!

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



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