首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 初學者疑惑:File[] listFiles() 為何不需要 new 關鍵字?

     編輯:程式設計疑難解答

問題來源

初學 Java 時閱讀 JDK 文檔:File[] listFiles() 回傳「抽象路徑名陣列」。疑惑:int[] a = new int[n] 需要 new 分配空間,為何 File[] files = dir.listFiles() 直接得到陣列卻未見 new?

核心解答

new 操作已封裝在方法內部。JDK 原始碼簡化版:

public File[] listFiles() {
    // 內部邏輯掃描目錄,統計檔案數量 n
    File[] files = new File[n]; // 這裡做了 new
    // 逐個建立 File 物件填入陣列
    return files; // 直接回傳已建立好的陣列
}

類比理解

class A {}
A getA() { return new A(); } // new 在方法裡

// 呼叫端
A a = new A();       // 顯式 new
A a2 = getA();       // 隱式 new,結果相同

關鍵概念

  • 工廠方法 / 靜態工廠:方法負責建立並初始化物件/陣列,呼叫者無需關心建構細節。
  • 陣列也是物件:File[] 是參考型別,方法回傳的是指向堆上陣列物件的參考。
  • JDK 文檔「Returns」說明回傳值型別與語意,而非建構過程。

延伸閱讀

  • String.split()、Files.readAllLines() 等同理,皆在內部完成 new。
  • 若需自訂陣列大小或型別,才需自行 new Type[size]。

理解「誰負責 new」是掌握 Java 記憶體模型與 API 設計的基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved