反射中ClassforName()とClassLoader.loadClass()の違い
転載先http://www.cnblogs.com/zabulon/p/5826610.html http://blog.csdn.net/qq_27093465/article/details/52262340
一、Javaクラスのロードプロセス
二、分析Class.forName()とClassLoader.loadClass
class.forName()はクラスを除く.classファイルはjvmにロードされるほか、クラスを解釈し、クラスのstaticブロックを実行します.
classLoaderはただ一つのことをします.classファイルはjvmにロードされ、staticの内容は実行されず、newInstanceでのみstaticブロックが実行されます.
Class.forName(name,initialize,loader)パラメータ付き関数はstaticブロックをロードするかどうかを制御することもできます.またnewInstance()メソッドを呼び出した場合のみ呼び出し構造関数を使用してクラスのオブジェクトを作成します.
三、データベースリンクはなぜClassを使うのか.forName(className)
JDBC Driverのソースコードは以下の通りなのでClassを使用する.forName(classname)は、クラスに戻るときにstaticブロックを実行することができます.
一、Javaクラスのロードプロセス
: , , Java.lang.class ;
: 、 , ;
: ;( , , , )
: ;
: ;
: Java Java , 。
二、分析Class.forName()とClassLoader.loadClass
Class.forName(className) , Class.forName(className,true,classloader);
2 boolean , Class.forName(className) 。
, static ,static 。
ClassLoader.loadClass(className) , ClassLoader.loadClass(className,false);
2 boolean , ,false , ,
,
class.forName()はクラスを除く.classファイルはjvmにロードされるほか、クラスを解釈し、クラスのstaticブロックを実行します.
classLoaderはただ一つのことをします.classファイルはjvmにロードされ、staticの内容は実行されず、newInstanceでのみstaticブロックが実行されます.
Class.forName(name,initialize,loader)パラメータ付き関数はstaticブロックをロードするかどうかを制御することもできます.またnewInstance()メソッドを呼び出した場合のみ呼び出し構造関数を使用してクラスのオブジェクトを作成します.
三、データベースリンクはなぜClassを使うのか.forName(className)
JDBC Driverのソースコードは以下の通りなのでClassを使用する.forName(classname)は、クラスに戻るときにstaticブロックを実行することができます.
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}