欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

ClassforName和ClassLoaderloadClass的區(qū)別

ClassforName和ClassLoaderloadClass的區(qū)別?

Class的裝載分了三個(gè)階段,loading,linking和initializing,分別定義在TheJavaLanguageSpecification的12.2,12.3和12.4。

Class.forName(className)

實(shí)際上是調(diào)用Class.forName(className,true,

this.getClass().getClassLoader())。注意第二個(gè)參數(shù),是指Class被loading后是不是必須被初始化。

ClassLoader.loadClass(className)實(shí)際上調(diào)用的是ClassLoader.loadClass(name,false),第二個(gè)參數(shù)指出Class是否被link。

區(qū)別就出來(lái)了。Class.forName(className)裝載的class已經(jīng)被初始化,而ClassLoader.loadClass(className)裝載的class還沒(méi)有被link。

一般情況下,這兩個(gè)方法效果一樣,都能裝載Class。但如果程序依賴于Class是否被初始化,就必須用Class.forName(name)了。

如,在JDBC編程中,常看到這樣的用法,Class.forName("com.mysql.jdbc.Driver"),如果換成了

getClass().getClassLoader().loadClass("com.mysql.jdbc.Driver"),就不行。