該方法官方文檔的解釋:
Returns the class with the given binary name if this loader has been recorded by the Java virtual machine as an initiating loader of a class with that binary name.
經過實踐,結論如下:
1.主動調用ClassLoader的loadClass加載一個類,但該ClassLoader並不是被加載類的定義類加載器,那麼後面該ClassLoader的findLoadedClass方法總是回返回null;如果該ClassLoader是被加載類的定義類加載器,則findLoadedClass會返回對應的Class;
2.如果是JVM自己根據類加載機制加載的Class,那麼被加載類的初始類加載器(initiating loader)和被加載類的定義類加載器(defining loader),它們的findLoadedClass均會返回被加載的Class;
思考
根據官方文檔的說明,如果是初始類加載器,按說findLoadedClass都會返回對應的Class,但根據結論1其並未返回,所以我猜測在主動調用加載Class情況下,並沒有標記對應的初始類加載器;
調用loadClass的加載器和定義類加載器之間,如果還有別的類加載器,它們都不會被標記爲被加載類的初始類加載器,它們的findLoadedClass都會返回null;
具體參考https://stackoverflow.com/questions/21962631/findloadedclass-returns-null