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