簡體   English   中英

Classloader如何確定它可以加載哪些類?

[英]How Classloader determines which classes it can load?

我正在閱讀Java中的類加載。

動機

假設我們有一個看起來像這樣的類加載器層次結構,我理解First加載的類不能由Second加載的類直接訪問(反之亦然)。

 Bootstrap
     |
   System
     |
   Common
   /    \
First Second

我也理解一個類加載器檢查它的父類加載器是否可以加載該類,如果是這種情況,則將加載委托給它的父類。

類加載器如何確定它們是否可以加載某個給定的類?

這取決於類加載器的實現。 ClassLoader.findClass(String)檢索ClassLoader可以加載的所有類

有許多實現,但最常見的是URLClassLoader ,它從目錄和jar文件加載類。

類加載器檢查CLASSPATH路徑變量中的所有類(java類文件) 如果你的班級在那里找到,它就存在,否則就不存在。

實際上, 您的/src目錄和所有子目錄(=包)都會被掃描。

類加載器將請求的類名轉換為文件名,然后嘗試從文件系統中查找該名稱的“類文件”。 正如@poitroae所說,它使用CLASSPATH變量(如果設置)作為起始位置。 大多數IDE等都將此擴展為包含項目的工作目錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM