Загрузка классов Java

1

У меня есть тот же класс, принадлежащий 2 различным пакетам.

package x1.y1.Class
packgage x2.y2.Class

Возможно ли, что если я x1.y1.Class через загрузчик классов, вместо этого загружается x2.y2.Class?

  • 1
    Вы имеете в виду случайно? Или это то, что вы пытаетесь достичь?
  • 0
    да .. случайно .. есть ли вероятность
Показать ещё 1 комментарий
Теги:
classloader

2 ответа

5
Лучший ответ

Проще говоря, нет (если вы случайно не загрузите неправильный).

Классы загружаются их полностью квалифицированным именем класса, которое включает в себя пакет (например, x1.y1.Class)

4

Нет, этого не может быть по двум причинам:

  • Классный загрузчик находит класс по пакету, глядя в нужное место
  • Даже если вы случайно помещаете класс в неправильное место, сам файл класса включает имя пакета, и это проверяется во время загрузки класса.

Я просто попытался сделать это преднамеренно, заменив p1/Foo.class на файл для класса p2.Foo и получил следующую ошибку:

Exception in thread "main" java.lang.NoClassDefFoundError: p1/Foo (wrong name: p2/Foo)

Если вы хотите сделать это, вам понадобится загрузчик классов, который намеренно посмотрел бы в неправильном месте, а затем изменил загруженный байт-код.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню