![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Tamerlann |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 10.11.2002 Где: Минск, Беларусь Репутация: 2 Всего: 2 |
Господа, помогите, пожалуста, разобраться:
В переменной classpath содержится c:\Java\lib В этой дирректории я храню свои пакеты. Я создаю файл, предположим такой: c:\Java\lib\P.java в котором содержится класс P в пакете mypack. Компилирую этот файл. Получаю дирректорию c:\Java\lib\mypack и файл c:\Java\lib\mypack\P.class Теперь, при попытке использовать данный пакет:
компилятор ругается именно на строку №3 и говорит: cannot access P bad class file: C:\Java\lib\P.java file does not contain class P Please remove or make sure it appears in the correct subdirectory of the classpath. Если импортировать так:
то уже не ругается. Если удалить сам исходник (я его переименовывал), т.е. P.java, например, в !P.java, то тоже перестает ругаться. И еще наблюдение: если класс в пакете объявить final:
то вообще не ругается, независимо от наличия исходника или способа импорта. Вообще мне это все не мешает. Я обычно просто всегда перименовываю исходник после его окончательной компиляции. Но просто мне очнь интересно, что же на самом деле происходит? Как понять такое поведение? --------------------
http://timursdev.blogspot.com/ |
||||||
|
|||||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Потому что он содержит класс mypack.P а не Р. Компилятор делает вот что: 1. Ищет в своих библиотеках, и не находит Р. 2. Ищет в папке jre<...>/lib/ext 3. Ищет в путях прописанных в CLASSPATH, если он пустой - ищет в текущей папке. 3. Т.к. ты используешь класс Р, а твой класс не принадлежит к-л пакету, то он считается принадлежащим дефаулт пакету, как и все файлы в текущей папке. Потому он и ищет в текущей директории, находит файл Р.java, пытается его откомпилить. Но он должен был бы находиться в папке mypack, вот компилятор и ругается. Если Р переименовать или удалить, компилятор смотрит на импорт и начинает искать пакет mypack в текущей директории, находит его, и все ок. Можно было бы задать CLASSPATH=.:/mypathtodirectory/mypack/ - тогда все бы сработало и при непереименованном / неудаленном P.java. Hасчет final ты чегo-тo перепутал, нe может быть таkого. -------------------- |
|||
|
||||
Tamerlann |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 10.11.2002 Где: Минск, Беларусь Репутация: 2 Всего: 2 |
Спасибо, кажется разобрался.
![]() Вообщем, спасибо. P.S. С final я правда перепутал, видимо я тогда импортировал конкретный пакет. --------------------
http://timursdev.blogspot.com/ |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |