Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Пакеты и Папки


Автор: Vovan_Danielyan 12.8.2007, 00:00
Изучая пакеты, узнал, что иерархия пакетов должна точно совпадать с иерархией каталогов. Так вот, появился вопрос:
программа начинается с подключения класса из стандартного пакета:
Код

import java.io.File;
........

раз есть такой покет, следовательно должен существовать каталог java/io в котором я найду класс File. Но вот только я этот каталог нигде не видел - хотя искал повсюду.
Подскажите: может, я ищу не там, или вообще нет такого каталога, и все это ерунда?

Автор: chand0s 12.8.2007, 00:59
Либо должна быть иерархия каталогов либо эта же самая иерархия должна быть "положена" в jar-файл.  В любом случае, и путь до иерархии и путь по jar'а необходимо указывать в classpath.

Автор: DsKTY 12.8.2007, 01:52
вот: 
 .. \jdk1.6.0_01\jre\lib\rt.jar


Автор: LSD 12.8.2007, 11:41
Цитата(Vovan_Danielyan @  12.8.2007,  01:00 Найти цитируемый пост)
Изучая пакеты, узнал, что иерархия пакетов должна точно совпадать с иерархией каталогов.

На самом деле не должна smile
Единственное, что должно быть - ClassLoader должен уметь загрузить этот класс, различая классы в разных пакетан, но с одинаковыми именами. Просто таково поведение системного ClassLoader-а. А вот если взять Oracle, то там классы лежат в полях таблицы и никакой структуры каталогов там нет. Ты можешь написать свой ClassLoader и реализовать там какой хочешь алгоритм.

Автор: Vovan_Danielyan 12.8.2007, 18:38
Про то, что можно запихать иерархию в класс не знал, спасибо, chand0s
Непонятно осталось только одно:
Цитата

В любом случае, и путь до иерархии и путь по jar'а необходимо указывать в classpath.

А у меня переменная CLASSPATH вообще не определена, java как-то сама находит этот архив - по умолчанию что-ли?
А переписывать ClassLoader я лучше пока не буду smile

Автор: LSD 12.8.2007, 23:38
Цитата(Vovan_Danielyan @  12.8.2007,  19:38 Найти цитируемый пост)
А у меня переменная CLASSPATH вообще не определена, java как-то сама находит этот архив - по умолчанию что-ли?

Да все свои классы JRE найдет и без указания CLASSPATH.

Автор: Invisible 23.11.2007, 09:15
Простите что поднимаю тему, но перечитав кучу ваших постов и различных статей на тему пакетов так и не смог реализовать.

У меня есть CLASSPATH:
.;C:\java.lab\lessonI\classF4;C:\Program Files\Java\j2re1.4.2_03\lib\ext\QTJava.zip

Хочу создать пакет , пишу 
Файл some.java
Код

package classF4;   
        
class some {


Файл sss.java
Код

import java.awt.Point;
package classF4;
class sss {
   void main() {
      System.out.println(new Point());
System.out.println(new some());

   }

Оба файла в папке clssF4, это правильно?? Что делаю не так?

Автор: DKroshkin 23.11.2007, 10:42
1. Все import-ы должны быть после package
2. Если у тебя метод main это точка входа на исполнение, то должна определяться как public static void main(...)

Автор: Hidrag 23.11.2007, 11:06
Цитата(Invisible @  23.11.2007,  09:15 Найти цитируемый пост)
Оба файла в папке clssF4, это правильно?? Что делаю не так? 

Правильно! Ты ведь указал один и тот же пакет для обоих классов и учти замечания  DKroshkin

Автор: DKroshkin 23.11.2007, 11:09
+ еще одно замечание. 
Имя файла должно соответствовать открытому классу. Т.е. классы должны быть со спецификатором public

Если не прав то поправьте.

Автор: Invisible 23.11.2007, 15:23
Изменил код таким образом:
Файл sss.java
Код

package clssF4;

import java.awt.Point;
public class sss {
   public static void main() {
      System.out.println(new Point());
   }



А он теперь вобще пишет то что я не понимаю:
Код

(С) Корпорация Майкрософт, 1985-2001.

C:\java.lab\lessonI\clssF4>javac sss.java

C:\java.lab\lessonI\clssF4>java sss
Exception in thread "main" java.lang.NoClassDefFoundError: sss (wrong name: clss
F4/sss)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$000(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)

C:\java.lab\lessonI\clssF4>
 

Автор: fixxer 23.11.2007, 16:00
http://www.skipy.ru/technics/likbez.html

Автор: _Michael 23.11.2007, 16:14
Неее. Надо так:

C:\java.lab\lessonI>java clssF4.sss

Автор: Hidrag 23.11.2007, 16:21
_Michael, не надо так,

надо так:
Цитата(fixxer @  23.11.2007,  16:00 Найти цитируемый пост)
Читать вдумчиво 
 иначе не поймет и завтра снова спросит

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)