ホームページ > Java > &#&チュートリアル > Class.getResource() と ClassLoader.getResource(): リソースの読み込みにおける主な違いは何ですか?

Class.getResource() と ClassLoader.getResource(): リソースの読み込みにおける主な違いは何ですか?

DDD
リリース: 2025-01-01 13:13:11
オリジナル
492 人が閲覧しました

Class.getResource() vs. ClassLoader.getResource(): What's the Key Difference in Resource Loading?

Class.getResource() と ClassLoader.getResource() の違い

Class.getResource() と ClassLoader.getResource() は両方ともクラスに関連付けられたリソースを取得するために使用されます。ただし、それらの動作には微妙な違いがあります。

Class.getResource() は、相対または絶対のいずれかのリソース名を受け入れます。相対リソース名は、クラスのパッケージに対して相対的に解釈されます。一方、ClassLoader.getResource() は常にリソース名を絶対名として扱います。

この違いを説明すると、

// Find the resource "xyz.txt" relative to the class's package
String resource1 = foo.bar.Baz.class.getResource("xyz.txt").getPath();

// Find the resource "xyz.txt" absolutely
String resource2 = foo.bar.Baz.class.getClassLoader().getResource("foo/bar/xyz.txt").getPath();
ログイン後にコピー

この場合、resource1 はファイル "xyz. txt" はパッケージ "foo.bar" 内にありますが、resource2 は同じファイルを参照しますが、絶対ファイルを使用します。 path.

ディレクトリ リストのキャッシュ

ディレクトリ リストのキャッシュに関する指摘は正しいです。ディレクトリのリストは Class オブジェクトにキャッシュされます。これは、クラスがロードされた後にディレクトリ構造に加えられた変更は、Class.getResource() の使用時に反映されないことを意味します。

この動作は、クラス API ドキュメントの「getResource」メソッドで文書化されています。

指定された名前のリソースを検索します。特定のクラスに関連付けられたリソースを検索するためのルールは、クラスの定義クラス ローダーによって実装されます。このメソッドは、このオブジェクトのクラス ローダーに委任します。このオブジェクトがブートストラップ クラス ローダーによってロードされた場合、メソッドは ClassLoader.getSystemResource(java.lang.String) に委譲されます。

追加メモ

お気づきのように、 ClassLoader.getResource() を使用すると、新しく作成されたファイルにアクセスできるようになります。これは、ClassLoader がディレクトリ リストをキャッシュしないため、ファイル システムの現在の状態が常に反映されるためです。

以上がClass.getResource() と ClassLoader.getResource(): リソースの読み込みにおける主な違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート