Class.forNameの()の詳細な使用方法
メイン関数 にClass.forName(xxx.xx.xx)はクラスを返します。 Class.forNameの(xxx.xx.xx)の役割は、JVMは、クラスの静的コードセクションを実行することを意味し、指定されたクラスを見つけてロードするJVMが必要です。
さて、次の3つの質問に答えることにClass.forName()の使用の下で詳細に説明します。
A.にClass.forName()を使用?
まずウォームアップに、あなたがそれをインスタンス化する方法、クラスのパッケージ名とクラス名を表す文字列変数を、与えるために?あなたの最初の考えは確かに新しいですが、次の点に注意してください
A = A(A)にClass.forName( "pacage.A")のnewInstance();.
これはあなたのAのA =新しいA()であり、同じ効果。
今、仕事に取り掛かります。
:そのようなユーザの入力文字列に応じてオブジェクトを作成するときに必要に応じてクラス・オブジェクトと動的ロードを作成し
、文字列= STR「ユーザ入力文字列」
;クラスTはClass.forNameの(STR)=
t.newInstanceを();
最初のクラスの場合、のnewInstance()メソッドと新しいメソッドがキーに加えているとき、それが外部キーであるインスタンスを生成し、違いは何最も重要なのでしょうか?
違いは、前者は新しいクラスを作成することですクラスローディング機構の使用である、オブジェクトを作成する方法それではありません。
なぜオブジェクトを作成するには、2つの方法がありますか?これは主に、アカウントにソフトウェア、スケーラブルな拡張性と再利用可能なソフトウェアの設計を取っています。
Javaは、多くの場合、オブジェクトを作成するために、工場モードのnewInstance()メソッドを使用しているので、なぜ工場モデルから使用することは、特定の答えを見つけることができます。:例えば
、クラスC = Class.forNameの( "例")
ファクトリー=(ExampleInterface)c.newInstance();
次のようにインターフェースを書き込むことができる場合の例ExampleInterface:
文字クラス名= "例";
クラスC = Class.forNameの(クラス名);
工場=(ExampleInterface)c.newInstance();
それは、さらに形式で書かれている:
文字列クラス名= readfromXMlConfig; //文字列からXML設定ファイル取得
クラスCを= Class.forNameの(クラス名);
工場=(ExampleInterface)c.newInstance();
クラス名が存在しない上記の例のコードでは、それは限り、彼らはExampleInterfaceを継承できるよう、......関係なくExampleクラスの変化は、上記のコードは同じである、あるいは兄弟、例3、Example4のクラス例2例を置き換える方法、利点を持っていないされています。
ビューのJVMの観点から、我々は新しいクラスを作成するには、キーワードを使用し、このクラスをロードすることはできません。しかし、ことを確認する必要がある場合のnewInstance()メソッドを使用して:
、このクラスがロードされている1、
図2に示すように、このクラスが接続されています。
2段階以上のクラスの静的メソッドにforName(で)完了し、この静的メソッドの呼び出しは、ローダのJava APIのをロードするクラスローダーを起動します。
今、私たちは実際にこの新しい2段階方式、クラスをロードするために、すなわち、クラスの最初の呼び出しのロード方法を打破するために、のnewInstance()を参照することができ、その後、インスタンス化します。
このステップの利点は明白です。カップリングを減少させる手段を提供するために、クラスの静的ロードメソッドにforNameを呼び出すときに私たちはより良い柔軟性を得ることができます。
二.newとClass.forNameの()の違いは何ですか?
実際には、上記のいくつかは、ここで要約する、と言われている:
新しいキーワードである一方、第一に、のnewInstance()は、メソッドであり、
それはオブジェクトのみを呼び出すことができます生成するので、第二に、クラス下のnewInstance()の使用は制限がありますコンストラクタのパラメータ、および新しいキーワードオブジェクトを生成するにはこの制限はありません。
要するに:
のnewInstance():タイプ弱い、非効率は、唯一の引数なしのコンストラクタを呼び出すことができます。
新しい:強いタイプは、比較的効率的な、それは、パブリック設定を呼び出すことができます。
Class.forNameのは、( "")クラスを返します。
Class.forNameの( "")。NewInstanceメソッドは( ) オブジェクトを返します。
III。なぜ便利にClass.forName(のデータベース駆動型のパッケージをロードする場合)が、(のnewInstanceを呼び出していませんでしたか)?
具体的には、Javaデータベース開発の開発は、多くの場合にClass.forName()このメソッドを使用します。
Javaドキュメントを照会することによって、我々はClass.forNameの()静的メソッドの目的は、動的にクラスをロードすることで使用ができます。
典型的には、符号化処理は、ローディングが完了した後だけでなく、クラスのnewInstance一般コール()静的メソッドを操作するためのオブジェクトをインスタンス化します。したがって、Class.forNameの()は、動的にロードされたクラスである単一の使用は役に立たない、究極の目的は、オブジェクトをインスタンス化することです。
相关英文参考文献如下: 私たちは唯一のJVMが、ユーザにドライバのインスタンスを必要としない、ためにドライバをロードする ので(xxx.xx.xx)にClass.forNameを呼び出すあなたはClass.forNameのを呼び出す場合、十分です(xxxは.xx.xx).newInstance()、 結果は、Class.forNameの(xxx.xx.xx)を呼び出すと同じ意志 にClass.forName(xxx.xx.xx).newInstance()は最初のドライバをロードするので 、その後の作成たとえば、あなたは、通常に使用することは決してありませんinstacne あなたはそれを作成する必要はありませんので。
==========================华丽的分割线==================== =========
Class.forNameの()、Class.forNameの()。のnewInstance()、新三者区别!
唯一のデータベースドライバClass.forNameの()までを読み込み、なぜ最後に理解します!!それは私に2時間を悩ま!!私はあなたが支援するために、私はこの事を書いている願っています。
具体的には、Javaデータベース開発の開発は、多くの場合にClass.forName()このメソッドを使用します。
ここでは、クラスの下のnewInstance()と新しいの違いは何であることを?言及する必要がありますか まず、のnewInstance()は新しいキーワードである方法であることは、オブジェクトが唯一の引数なしのコンストラクタを呼び出して、新しいキーワードを使用してオブジェクトを生成することができます生成するので、第二に、クラス下のnewInstance()の使用は制限がありますこの制限なし。
次のようにまあ、これまでのところ、我々は要約:
Class.forNameの(「」)クラスを返します
。Class.forNameの(「」)のnewInstance( )はオブジェクトを返します
が、我々はデータベースドライバをロードする理由は、データベースの開発経験は、友人を見つけるだろうときパッケージには、いくつかのnewInstance()メソッドを呼び出していませんでしたか?Class.forNameの(xxx.xx.xx).newInstance():一部とありますが、データベースに書かれているいくつかのJDBC接続がClass.forNameの(xxx.xx.xx)で 、 なぜ二つの異なる綴り、それはあるのですか?
今述べた、Class.forNameの( ""); 効果は、クラスの静的初期設定がある場合、検索し、指定されたクラスをロードするためにJVMを必要とすることで、その後、JVMは、クラスの静的コードセクションを実行するためにバインドされています。
JDBCドライバの仕様で明確にこのクラスは、DriverManagerのに自身を登録しなければならない必要即ちJDBCドライバは、次のようでなければならないすべてのドライバクラスコード: パブリッククラスドライバ{MyJDBCDriver器具
{静的
にDriverManager.registerDriver(新しい新しいMyJDBCDriver());
}
}
これは、レジスタ内の静的初期化子にされているので、我々だけにClass.forName(XXX.XXX)を必要とするので、JDBCを使用する場合、その上に。
プライベート静的最終ログインLOG = LogFactory.getLog(ProxoolDriver.class)。
静的{
{試す
にDriverManager.registerDriver(新ProxoolDriver());
}キャッチ(のSQLException E){
System.out.printlnは(e.toString())。
}
}
メイン関数 にClass.forName(xxx.xx.xx)はクラスを返します。 Class.forNameの(xxx.xx.xx)の役割は、JVMは、クラスの静的コードセクションを実行することを意味し、指定されたクラスを見つけてロードするJVMが必要です。
さて、次の3つの質問に答えることにClass.forName()の使用の下で詳細に説明します。
A.にClass.forName()を使用?
まずウォームアップに、あなたがそれをインスタンス化する方法、クラスのパッケージ名とクラス名を表す文字列変数を、与えるために?あなたの最初の考えは確かに新しいですが、次の点に注意してください
A = A(A)にClass.forName( "pacage.A")のnewInstance();.
これはあなたのAのA =新しいA()であり、同じ効果。
今、仕事に取り掛かります。
:そのようなユーザの入力文字列に応じてオブジェクトを作成するときに必要に応じてクラス・オブジェクトと動的ロードを作成し
、文字列= STR「ユーザ入力文字列」
;クラスTはClass.forNameの(STR)=
t.newInstanceを();
最初のクラスの場合、のnewInstance()メソッドと新しいメソッドがキーに加えているとき、それが外部キーであるインスタンスを生成し、違いは何最も重要なのでしょうか?
違いは、前者は新しいクラスを作成することですクラスローディング機構の使用である、オブジェクトを作成する方法それではありません。
なぜオブジェクトを作成するには、2つの方法がありますか?これは主に、アカウントにソフトウェア、スケーラブルな拡張性と再利用可能なソフトウェアの設計を取っています。
Javaは、多くの場合、オブジェクトを作成するために、工場モードのnewInstance()メソッドを使用しているので、なぜ工場モデルから使用することは、特定の答えを見つけることができます。:例えば
、クラスC = Class.forNameの( "例")
ファクトリー=(ExampleInterface)c.newInstance();
次のようにインターフェースを書き込むことができる場合の例ExampleInterface:
文字クラス名= "例";
クラスC = Class.forNameの(クラス名);
工場=(ExampleInterface)c.newInstance();
それは、さらに形式で書かれている:
文字列クラス名= readfromXMlConfig; //文字列からXML設定ファイル取得
クラスCを= Class.forNameの(クラス名);
工場=(ExampleInterface)c.newInstance();
クラス名が存在しない上記の例のコードでは、それは限り、彼らはExampleInterfaceを継承できるよう、......関係なくExampleクラスの変化は、上記のコードは同じである、あるいは兄弟、例3、Example4のクラス例2例を置き換える方法、利点を持っていないされています。
ビューのJVMの観点から、我々は新しいクラスを作成するには、キーワードを使用し、このクラスをロードすることはできません。しかし、ことを確認する必要がある場合のnewInstance()メソッドを使用して:
、このクラスがロードされている1、
図2に示すように、このクラスが接続されています。
2段階以上のクラスの静的メソッドにforName(で)完了し、この静的メソッドの呼び出しは、ローダのJava APIのをロードするクラスローダーを起動します。
今、私たちは実際にこの新しい2段階方式、クラスをロードするために、すなわち、クラスの最初の呼び出しのロード方法を打破するために、のnewInstance()を参照することができ、その後、インスタンス化します。
このステップの利点は明白です。カップリングを減少させる手段を提供するために、クラスの静的ロードメソッドにforNameを呼び出すときに私たちはより良い柔軟性を得ることができます。
二.newとClass.forNameの()の違いは何ですか?
実際には、上記のいくつかは、ここで要約する、と言われている:
新しいキーワードである一方、第一に、のnewInstance()は、メソッドであり、
それはオブジェクトのみを呼び出すことができます生成するので、第二に、クラス下のnewInstance()の使用は制限がありますコンストラクタのパラメータ、および新しいキーワードオブジェクトを生成するにはこの制限はありません。
要するに:
のnewInstance():タイプ弱い、非効率は、唯一の引数なしのコンストラクタを呼び出すことができます。
新しい:強いタイプは、比較的効率的な、それは、パブリック設定を呼び出すことができます。
Class.forNameのは、( "")クラスを返します。
Class.forNameの( "")。NewInstanceメソッドは( ) オブジェクトを返します。
III。なぜ便利にClass.forName(のデータベース駆動型のパッケージをロードする場合)が、(のnewInstanceを呼び出していませんでしたか)?
具体的には、Javaデータベース開発の開発は、多くの場合にClass.forName()このメソッドを使用します。
Javaドキュメントを照会することによって、我々はClass.forNameの()静的メソッドの目的は、動的にクラスをロードすることで使用ができます。
典型的には、符号化処理は、ローディングが完了した後だけでなく、クラスのnewInstance一般コール()静的メソッドを操作するためのオブジェクトをインスタンス化します。したがって、Class.forNameの()は、動的にロードされたクラスである単一の使用は役に立たない、究極の目的は、オブジェクトをインスタンス化することです。
相关英文参考文献如下: 私たちは唯一のJVMが、ユーザにドライバのインスタンスを必要としない、ためにドライバをロードする ので(xxx.xx.xx)にClass.forNameを呼び出すあなたはClass.forNameのを呼び出す場合、十分です(xxxは.xx.xx).newInstance()、 結果は、Class.forNameの(xxx.xx.xx)を呼び出すと同じ意志 にClass.forName(xxx.xx.xx).newInstance()は最初のドライバをロードするので 、その後の作成たとえば、あなたは、通常に使用することは決してありませんinstacne あなたはそれを作成する必要はありませんので。
==========================华丽的分割线==================== =========
Class.forNameの()、Class.forNameの()。のnewInstance()、新三者区别!
唯一のデータベースドライバClass.forNameの()までを読み込み、なぜ最後に理解します!!それは私に2時間を悩ま!!私はあなたが支援するために、私はこの事を書いている願っています。
具体的には、Javaデータベース開発の開発は、多くの場合にClass.forName()このメソッドを使用します。
ここでは、クラスの下のnewInstance()と新しいの違いは何であることを?言及する必要がありますか まず、のnewInstance()は新しいキーワードである方法であることは、オブジェクトが唯一の引数なしのコンストラクタを呼び出して、新しいキーワードを使用してオブジェクトを生成することができます生成するので、第二に、クラス下のnewInstance()の使用は制限がありますこの制限なし。
次のようにまあ、これまでのところ、我々は要約:
Class.forNameの(「」)クラスを返します
。Class.forNameの(「」)のnewInstance( )はオブジェクトを返します
が、我々はデータベースドライバをロードする理由は、データベースの開発経験は、友人を見つけるだろうときパッケージには、いくつかのnewInstance()メソッドを呼び出していませんでしたか?Class.forNameの(xxx.xx.xx).newInstance():一部とありますが、データベースに書かれているいくつかのJDBC接続がClass.forNameの(xxx.xx.xx)で 、 なぜ二つの異なる綴り、それはあるのですか?
ただ、Class.forNameの(「」)を言及し;役割はクラスの静的初期化がある場合は、見つけて、指定されたクラスをロードするためにJVMを依頼することです、そして、JVMは、クラスの静的コードセクションを実行するためにバインドされています。JDBCドライバの仕様で明確にこのクラスは、DriverManagerのに自身を登録しなければならない必要即ちJDBCドライバは、次のようでなければならないすべてのドライバクラスコード:
パブリッククラスドライバ{MyJDBCDriver器具
{静的
にDriverManager.registerDriver(新しい新しいMyJDBCDriver());
}
}
これは、レジスタ内の静的初期化子にされているので、我々だけにClass.forName(XXX.XXX)を必要とするので、JDBCを使用する場合、その上に。
プライベート静的最終ログインLOG = LogFactory.getLog(ProxoolDriver.class)。
静的{
{試す
にDriverManager.registerDriver(新ProxoolDriver());
}キャッチ(のSQLException E){
System.out.printlnは(e.toString())。
}
}
唯一のデータベースドライバClass.forNameの()までを読み込み、なぜ最後に理解します!!それは私に2時間を悩ま!!私はあなたが支援するために、私はこの事を書いている願っています。
具体的には、Javaデータベース開発の開発は、多くの場合にClass.forName()このメソッドを使用します。
ここでは、クラスの下のnewInstance()と新しいの違いは何であることを?言及する必要がありますか まず、のnewInstance()は新しいキーワードである方法であることは、オブジェクトが唯一の引数なしのコンストラクタを呼び出して、新しいキーワードを使用してオブジェクトを生成することができます生成するので、第二に、クラス下のnewInstance()の使用は制限がありますこの制限なし。
次のようにまあ、これまでのところ、我々は要約:
Class.forNameの(「」)クラスを返します
。Class.forNameの(「」)のnewInstance( )はオブジェクトを返します
が、我々はデータベースドライバをロードする理由は、データベースの開発経験は、友人を見つけるだろうときパッケージには、いくつかのnewInstance()メソッドを呼び出していませんでしたか?Class.forNameの(xxx.xx.xx).newInstance():一部とありますが、データベースに書かれているいくつかのJDBC接続がClass.forNameの(xxx.xx.xx)で 、 なぜ二つの異なる綴り、それはあるのですか?
ただ、Class.forNameの(「」)を言及し;役割はクラスの静的初期化がある場合は、見つけて、指定されたクラスをロードするためにJVMを依頼することです、そして、JVMは、クラスの静的コードセクションを実行するためにバインドされています。JDBCドライバの仕様で明確にこのクラスは、DriverManagerのに自身を登録しなければならない必要即ちJDBCドライバは、次のようでなければならないすべてのドライバクラスコード:
パブリッククラスMyJDBCDriver実装ドライバ{
静的{
DriverManager.registerDriver(新新MyJDBCDriver());
}
}
JDBCを使用した場合には、レジスタ内の静的初期化子になっているので、我々は唯一のClass.forName(XXX.XXXを)必要があるので、それに。
プライベート静的最終ログインLOG = LogFactory.getLog(ProxoolDriver.class)。
静的{
{試す
にDriverManager.registerDriver(新ProxoolDriver());
}キャッチ(のSQLException E){
System.out.printlnは(e.toString())。
}
}