2010-06-17 3 views

Antwort

9

Es ist eine Beziehung zur Klasse:

  • Das Paket der Klasse berücksichtigt wird - wenn Sie Anruf getResourceAsStream("baz.txt") auf die Klasse für foo.bar.SomeClass geben es für /foo/bar/baz.txt
  • Die Classloader aussehen wird berücksichtigt, um die Ressourcen an erster Stelle zu finden - wenn es eine statische Methode wäre, wie würde sie wissen, in welchen JAR-Dateien (usw.) sie suchen? Es gibt mehr im Leben als das System Classloader
1

Es nur Input der Datei geben, die in JAR-Datei ist ...

Falsch. Nicht alle Klassenladeprogramme laden Ressourcen aus der regulären JAR-Datei.

  • Einige Klassenlader laden aus Verzeichnissen.
  • Einige Klassenlader werden vom Netzwerk geladen.
  • Einige Klassenladeprogramme laden von mehreren Quellen.

dieser Komplexität Alles ist dir verborgen, wenn Sie die ClassLoader API über Class in diesem Fall verwendet werden.

... und es gibt keine Beziehung zur Klasse Klasse.

Falsch. Siehe @ Jon Skeets Antwort. Beachten Sie, dass der Aufruf von Class.getResourceAsStream(String) eine Ressource angibt, die demselben Sicherheitskontext wie die Klasse angehört. Dies kann sehr wichtig sein, wenn mehrere Klassenlader/Sicherheitskontexte verwendet werden.