Почему public InputStream getResourceAsStream (String name) находится в классе класса? Он просто дает входной поток файла, который находится в файле jar, и нет никакого отношения к классу класса. поэтому он может быть статическим методом и может быть в любом классе.Почему метод getResourceAsStream находится в классе класса?
7
A
ответ
9
Там это отношения к классу:
- Пакет класса принимается во внимание - если вы даете вызов
getResourceAsStream("baz.txt")
на класс дляfoo.bar.SomeClass
он будет искать/foo/bar/baz.txt
- загрузчиком классов учитывается, чтобы найти ресурсы в первую очередь - если бы это был статический метод, как бы он знал, какие файлы jar (и т. д.) нужно искать? Там больше жизни, чем системы загрузчиком классов
1
Это просто дать InputStream файла, который находится в банке файл ...
некорректным. Не все загрузчики классов загружают ресурсы из обычного JAR-файла.
- Загрузка некоторых загрузчиков классов из каталогов.
- Некоторые загрузчики классов загружаются из сети.
- Некоторые загрузчики классов загружаются из нескольких источников.
Вся эта сложность скрыта от вас, когда вы используете ClassLoader
API через Class
в этом случае.
... и нет отношения с классом класса.
Неверный. См. Ответ @Jon Skeet. Обратите внимание, что вызов Class.getResourceAsStream(String)
предоставляет ресурс, относящийся к тому же контексту безопасности, что и класс. Это может быть очень важно, если используются несколько классов загрузчиков/контекстов безопасности.