Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Импорт пакета. Нужен ли исходник? 
V
    Опции темы
Tamerlann
  Дата 14.2.2005, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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

Теперь, при попытке использовать данный пакет:

Код

1. import mypack.*;
2. ...
3. P p = new P();


компилятор ругается именно на строку №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.

Если импортировать так:
Код

import mypack.P;

то уже не ругается.

Если удалить сам исходник (я его переименовывал), т.е. P.java, например, в !P.java,
то тоже перестает ругаться.

И еще наблюдение: если класс в пакете объявить final:
Код

public final P {

то вообще не ругается, независимо от наличия исходника или способа импорта.

Вообще мне это все не мешает. Я обычно просто всегда перименовываю исходник после его окончательной компиляции. Но просто мне очнь интересно, что же на самом деле происходит? Как понять такое поведение?
--------------------
http://timursdev.blogspot.com/ 
PM MAIL WWW Skype   Вверх
Domestic Cat
Дата 14.2.2005, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Цитата
cannot access P
bad class file: C:\Java\lib\P.java
file does not contain class P


Потому что он содержит класс mypack.P а не Р.

Компилятор делает вот что:
1. Ищет в своих библиотеках, и не находит Р.
2. Ищет в папке jre<...>/lib/ext
3. Ищет в путях прописанных в CLASSPATH, если он пустой - ищет в текущей папке.
3. Т.к. ты используешь класс Р, а твой класс не принадлежит к-л пакету, то он считается принадлежащим дефаулт пакету, как и все файлы в текущей папке. Потому он и ищет в текущей директории, находит файл Р.java, пытается его откомпилить. Но он должен был бы находиться в папке mypack, вот компилятор и ругается. Если Р переименовать или удалить, компилятор смотрит на импорт и начинает искать пакет mypack в текущей директории, находит его, и все ок.
Можно было бы задать CLASSPATH=.:/mypathtodirectory/mypack/ - тогда все бы сработало и при непереименованном / неудаленном P.java.

Hасчет final ты чегo-тo перепутал, нe может быть таkого.


--------------------

PM   Вверх
Tamerlann
Дата 17.2.2005, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 10.11.2002
Где: Минск, Беларусь

Репутация: 2
Всего: 2



Спасибо, кажется разобрался.
smile Правда, у меня возникло ещё больше вопросов, после этого ответа, но с ними оказалось просто разобраться. Вообще, оказывается очень удобно, хотя и немного запутанно сначала: можно регулировать будет он компилить импортируемый класс заново или нет, куда положит и т.д.

Вообщем, спасибо.

P.S. С final я правда перепутал, видимо я тогда импортировал конкретный пакет.
--------------------
http://timursdev.blogspot.com/ 
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1061 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.