Размещение пакетов по файлам
То обстоятельство, что class-файлы, содержащие байт-коды классов, должны быть размещены по соответствующим каталогам, накладывает свои особенности на процесс компиляции и выполнения программы.
Обратимся к тому же примеру. Пусть в каталоге D:\jdkl.3\MyProgs\ch3 есть пустой подкаталог classes и два файла – Base.java и Inp2.java, – содержимое которых показано в листингах 3.1 и 3.2. Рис. 3.2 демонстрирует структуру каталогов уже после компиляции.
Мы можем проделать всю работу вручную.
- В каталоге classes создаем подкаталоги р1 и р2.
- Переносим файл Base.java в каталог р1 и делаем р1 текущим каталогом.
- Компилируем Base.java, получая в каталоге р1 три файла: Base.class, Inpl.class, Derivedpl.class.
- Переносим файл Inp2java в каталог р2.
- Снова делаем текущим каталог classes.
- Компилируем второй файл, указывая путь p2\Inp2.java.
- Запускаем программу java p2.inp2.
Вместо шагов 2 и 3 можно просто создать три class-файла в любом месте, а потом перенести их в каталог p1. В class-файлах не хранится никакая информация о путях к файлам.
Смысл действий 5 и 6 в том, что при компиляции файла Inp2.java компилятор уже должен знать класс p1.Base, а отыскивает он файл с этим классом по пути p1.Base.class, начиная от текущего каталога.
Обратите внимание на то, что в последнем действии 7 надо указывать полное имя класса.
Если использовать ключи (options) командной строки компилятора, то можно выполнить всю работу быстрее.
- Вызываем компилятор с ключом – d путь, указывая параметром путь начальный каталог для пакета:
javac – d classes Base.java
Компилятор создаст в каталоге classes подкаталог р1 и поместит туда три class-файла.
- Вызываем компилятор с еще одним ключом – classpath путь, указывая параметром путь каталог classes, в котором находится подкаталог с уже откомпилированным пакетом pi:
javac – classpath classes – d classes Inp2.java
Компилятор, руководствуясь ключом – d, создаст в каталоге classes подкаталог р2 и поместит туда два class-файла, при создании которых он "заглядывал" в каталог pi, руководствуясь ключом – classpath.
- Делаем текущим каталог classes.
- Запускаем профамму java p2.inp2.