Class.getResource() と ClassLoader.getResource() の違いを理解する
Java の Class.getResource() と ClassLoader .getResource() メソッドは、特定のクラスまたはクラス ローダーに関連付けられたリソースへのアクセスを提供します。どちらの方法にも類似点はありますが、動作と適用性には明確な違いがあります。
リソースの命名規則
重要な違いの 1 つは、リソースの命名方法にあります。 Class.getResource() は、クラスのパッケージに対して相対的に解釈される「相対」リソース名を受け入れます。対照的に、ClassLoader.getResource() は「絶対」リソース名を想定しており、常に絶対パスとみなされます。
例:
// Get resource from the package of the class String resource1 = foo.bar.Baz.class.getResource("xyz.txt"); // Get resource as an absolute path String resource2 = foo.bar.Baz.class.getClassLoader().getResource("foo/bar/xyz.txt");
この例では、resource1 と resource2同じファイルを表します。ただし、リソース名の先頭にスラッシュ「/」が付いている場合、両方のメソッドで絶対リソース パスが生成されます。
キャッシュへの影響
質問によると、キャッシュがディレクトリ リスト レベルで発生することを示唆する証拠はありません。どちらのメソッドも、基礎となるクラス ローダーのメカニズムを利用し、キャッシュ ポリシーはそのレベルで定義されます。
パフォーマンスに関する考慮事項
パフォーマンスの観点からは、Class.getResource() を次のように使用します。相対名は、ClassLoader.getResource() を使用するよりもわずかに高速になる可能性があります。これは、クラス ローダーが相対パスを解決するためにクラスパスをナビゲートする必要がないためです。
結論
Class.getResource() と ClassLoader.getResource() は機能します。目的が異なるため、それに応じて使用する必要があります。 Class.getResource() はパッケージ階層内のリソースにアクセスするのに適していますが、ClassLoader.getResource() は絶対リソース パスを処理するのに適しています。 2 つの方法のどちらを選択するかは、特定のリソースの命名要件とパフォーマンスの考慮事項によって異なります。
以上がClass.getResource() と ClassLoader.getResource(): Java でのリソースの読み込みにどちらを使用する場合?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。