import僅僅包含導入操作,并不包含將字節(jié)碼文件加載進內存這一動作,將字節(jié)碼文件加載進內存是后續(xù)的實例化操作完成的。例如通過import導入了一堆包和類,但是后續(xù)什么都沒用(沒用實例化),那么導入的東西是不會被加載進內存的。而且import是編譯期的,如果你在后續(xù)代碼中沒有使用到你導入的內容,那么import語句甚至不會編譯和執(zhí)行。查看字節(jié)碼文件可以看出,import的作用就是對你程序中要用到(實例)的東西進行署名(signature),當程序運行的時候好知道你實例化的對象的類的字節(jié)碼文件去哪里找。
而Class.forName方法包含的動作是:根據給出的全類名(方法的參數)找到對應的字節(jié)碼文件,并將字節(jié)碼文件通過ClassLoader加載進內存中生成Class類對象(方法的返回值就是Class類對象)。
這些就是二者的區(qū)別了。