Rumah >Java >javaTutorial >Class.getResource() vs. ClassLoader.getResource(): Apakah Perbezaannya dan Bilakah Saya Perlu Menggunakan Mana?

Class.getResource() vs. ClassLoader.getResource(): Apakah Perbezaannya dan Bilakah Saya Perlu Menggunakan Mana?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-19 16:58:14658semak imbas

Class.getResource() vs. ClassLoader.getResource(): What's the Difference and When Should I Use Which?

Menyelidiki Perbezaan antara Class.getResource() dan ClassLoader.getResource()

Perbezaan antara Class.getResource() dan ClassLoader .getResource() terletak pada tafsiran sumber nama.

Nama Sumber Relatif lwn. Mutlak

Class.getResource() menerima kedua-dua nama sumber "relatif" dan "mutlak". Apabila menggunakan nama relatif, sumber ditafsirkan secara relatif kepada pakej kelas. Sebaliknya, ClassLoader.getResource() sentiasa menganggap laluan mutlak.

Untuk menggambarkan ini:

foo.bar.Baz.class.getResource("xyz.txt"); // relative name
foo.bar.Baz.class.getClassLoader().getResource("foo/bar/xyz.txt"); // equivalent

Slash Terkemuka

Dalam konteks Class.getResource(), nama sumber yang diawali dengan garis miring ("/") dianggap mutlak. Ini adalah untuk menyelaraskan dengan gelagat yang dijangkakan apabila berurusan dengan sistem fail sebenar.

foo.bar.Baz.class.getResource("/data/xyz.txt"); // absolute name
foo.bar.Baz.class.getClassLoader().getResource("data/xyz.txt"); // also absolute

Caching:

Bagi soalan anda mengenai caching, anda betul dalam pemerhatian anda . Penyenaraian direktori dicache oleh ClassLoader, tetapi bukan oleh Class.getResource(). Ini boleh membawa kepada senario di mana fail atau perubahan direktori yang baru dibuat mungkin tidak dapat dilihat dengan serta-merta menggunakan Class.getResource() tetapi boleh dilihat melalui ClassLoader.getResource().

Dokumentasi API untuk Class.getResource() mengesahkan tingkah laku ini:

"Kaedah ini mewakilkan kepada pemuat kelas objek ini. Jika objek ini dimuatkan oleh pemuat kelas bootstrap, kaedah mewakilkan kepada ClassLoader.getSystemResource(java.lang.String)."

Cadangan

Secara umum, disyorkan untuk menggunakan ClassLoader.getResource() jika anda perlukan untuk mengakses sumber yang mungkin tidak terdapat dalam pakej kelas. Walau bagaimanapun, jika anda secara khusus bekerja dengan sumber yang berkaitan dengan pakej kelas dan inginkan gambaran segera perubahan direktori, anda boleh menggunakan Class.getResource() sambil mengambil kira had cachingnya.

Atas ialah kandungan terperinci Class.getResource() vs. ClassLoader.getResource(): Apakah Perbezaannya dan Bilakah Saya Perlu Menggunakan Mana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn