Warum public InputStream getResourceAsStream (String name) ist in der Klasse Class? Es gibt nur Inputstream der Datei, die in JAR-Datei ist, und es gibt keine Beziehung mit Class-Klasse. so kann es statische Methode sein und es kann in jeder Klasse sein.Warum ist die Methode "getResourceAsStream" in der Klasse "Class"?
7
A
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ürfoo.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.