語句myClassLoader.loadClass(className)中繼承自父類方法loadClass內(nèi)部的奇怪調用
陳述事實:
? ? 教學視頻中,MyClassLoade類中l(wèi)oadClass(String name)這個繼承自ClassLoader類,該方法內(nèi)部會調用findClass(String name)方法,而MyClassLoader里已經(jīng)被覆蓋了繼承來的findClass(String name)。
描述現(xiàn)象
? ? 在調試時發(fā)現(xiàn),調用myClassLoader.loadClass(className)時,跟蹤到父類ClassLoader里loadClass(String name, boolean resolve)中一個語句:c = findClass(name)時,發(fā)現(xiàn)調用的竟然不是MyClassLoader的findClass方法,而是URLClassLoader里的findClass方法。
問題:
? ? 請問各位碼友,為什么是這樣?
上圖片:
2019-08-06
URLClassLoader是ClassLoader的一個子類,java加載時逐級上傳,當前類加載器無法加載時拋給父級加載器,當父級加載器為null時bootstrapclassloader充當父級加載器啟動。這里看應該是先傳給了URLClassLoader加載器,調用它的findclass。URLClassloader這個是用來安裝指定路徑加載資源的一個加載類。classloader只能加載classpath下的類。我猜可能是因為代碼中給定了要加載類的路徑,所以java先傳給了URLClassLoader類加載器。如果這個加載器無法加載還會繼續(xù)傳遞給父類classloader