1

重複の可能性:
「Class.forName()」と「Class.forName().newInstance()」の違いは何ですか?

私のAndroidアプリでは、jdbc接続を使用してmysqlサーバーに接続します。その中で違いを知りたい

`Class.forName("com.mysql.jdbc.Driver");` 

Class.forName("com.mysql.jdbc.Driver").newInstance(); 

また、サーバーが接続されていないときにタイムアウト機能を設定する方法は?

4

1 に答える 1

3

Class.forName()Class オブジェクト (特定の Java クラスを表すオブジェクト) を返します。

newInstance()-- java.lang.Class のメソッド -- 表現されたクラスの引数なしコンストラクタを使用して、そのクラスのインスタンスを作成します。

あなたの質問について:(http://www.coderanch.com/t/385654/java/java/Difference-between-Class-forName-Classからの参照)

Class.forName()クラスへの参照を取得し、クラスClass.forName().newInstance()の引数なしコンストラクターを使用して新しいインスタンスを返そうとします。これまでのところ驚くことはありません。のもう 1 つの一般的な使用法Class.forName()は、クラスをロードすることです。これは、一部のタイプのクラスには、他の目的で必要なロード プロセスによる副作用があるためです。JDBCDriver クラスは、DriverManagerロードされたときに自分自身を Class に登録する必要があるため、このプロセスの大規模なユーザーです。

おそらく v1.1.8、おそらく Java 1.2 までの Java の暗黒時代には、デフォルトClassLoaderではインスタンスが作成されるまでクラスがロードされないという問題がありました。このような場合、Class.forName()ではなくを使用すると、JDBC コードは失敗しますClass.forName().newInstance()

newInstance()すぐに破棄されるインスタンスを作成しますが、正しく機能させる必要がありましClass.forName()た。この回避策は不要になりました。

于 2012-07-17T07:03:55.087 に答える