0
在退出該特定方法後刪除方法中創建的對象/字段?在退出時刪除方法創建的對象
實施例:
public static void createFolder() {
File folder = new File(C:\example\path "foldername");
folder.mkdir();
}
會用於存儲文件的存儲「文件夾」在所述「createFolder」方法的退出刪除?
在退出該特定方法後刪除方法中創建的對象/字段?在退出時刪除方法創建的對象
實施例:
public static void createFolder() {
File folder = new File(C:\example\path "foldername");
folder.mkdir();
}
會用於存儲文件的存儲「文件夾」在所述「createFolder」方法的退出刪除?
由folder
引用的File
對象在退出該方法後有資格進行垃圾回收,因爲對該方法的唯一引用(folder
)超出了該範圍的範圍。
實際上,垃圾收集是無法準確判斷的,但會在此之後的某個時間。
更一般地說,方法中的局部變量在堆棧上分配,並在超出範圍時被刪除。如果它們是基元(int,float,long等),它們立即停止存在。如果它們是引用(就像你的情況一樣)引用不再立即存在,但只要引用存在,引用的對象就會繼續存在。例如,如果您的createFolder()
方法要返回值folder
,並且調用方在其自己的變量之一中保存了該引用,則File
對象不會(尚未)符合GC的條件。當全部對某個對象的引用停止存在時,該對象本身就符合GC的條件。該語言沒有指定GC何時發生。
由於一些深奧的主題與「弱」引用有關,這很複雜,但您可以暫時忽略它們。
這是純粹的學術還是有更深層次的問題? –
@KarthikT我試圖找到檢查文件夾是否存在的最佳方法,並在需要時創建一個文件夾(如果文件夾不存在,則無法寫入文件)。我的文章顯示了我目前使用的一個虛擬版本。 TL; DR:學術。 – Aaron
@Aaron當你說'文件夾'是你在談論本地變種或實際的文件系統文件夾?我期望如果您的'文件夾'var被垃圾收集,實際的文件夾不會被刪除。 –