[轉]JAVA中的static調用非static方法的幾點注意


1、由JVM的執行機制決定了在static方法中是不能直接調用改類的其它非static方法的。

  因為類方法(static方法)執行的時候,其所在的堆棧中是沒有指向對象的引用的任何信息的,而非static方法在調用的時候又必須要知道調用該方法的對象的引用。所以從這里可以看出,static方法中是沒有辦法直接調用非static方法的。

  從另外一方面來講,static方法中是不存在this的,而this是一個很重要的指向對象的引用的關鍵字(每個非static方法中都應該存在的,並 且指向了調用該方法的對象的引用;非static方法調用改類其他方法的時候實際上是用到了this.[Method])。所以沒有this的 static方法是不可能直接調用該類中的非static方法的。

2、static方法中可以通過創建(new)該類的引用或者在調用static方法的時候傳遞一個對象的引用過去,這兩種方法來調用非static方法。

  典型的例子就是static void main()方法,在這個static方法中可以看到,會創建任意的實例,然后通過這些實例來調用所屬類的非靜態方法。

3、static方法是在編譯的時候確定的,在類裝入內存的時候也同時裝入內存了。而非static方法是在類的實例化的時候裝入內存的,其必須依賴於類的實例。

  實例在裝入堆棧的時候是會附加上指向method area(具體的可以參看JVM Specification http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html)的指針,所以可以在非靜態方法中調用static方法。

 

 

轉自:http://blog.csdn.net/jc_njj/article/details/5102556


免責聲明!

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



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