Некоторые важные пакеты Java

  • java.lang — "самый базовый" из всех базовых пакетов. Без него Java не работает.
  • java.io — пакет поддержки ввода/вывода.
  • java.util — классы поддержки коллекций объектов, работа с календарем, и др. полезные классы.
  • java.awt — пакет AWT: поддержка визуального программирования (базовый пакет).
  • javax.swing — пакет SWING: новый пакет визуального программирования. Появился в Java2, базируется на AWT и функционально замещает его (не полностью).
  • java.applet — пакет для поддержки создания аплетов.

Использование пакетов в программах

Для того чтобы класс из библиотеки мог быть использован в программе, его нужно подключить. Для этого в начале java-файла нужно поместить оператор "import". Например, пусть требуется использовать класс ArrayList в разрабатываемом нами классе Ex1 (ArrayList находится в пакете java.util).

Тогда файл Ex1.java может начинаться примерно так:

// Ex1.java import java.util.ArrayList; . . .

далее в программе мы уже можем использовать ArrayList. Например,

ArrayList objList = new ArrayList(); . . .

Если в одном программном модуле требуется несколько классов из одного пакета, то можно подключить весь пакет, например,

import java.util.*;

  • Пакет java.lang можно не подключать, он подключается автоматически.

Создание своих собственных пакетов

Для создания собственного пакета нужно

  • 1. Определиться с именем пакета. Пусть, например, Internet-адрес равен [email protected] и мы хотим создать пакет вспомогательных программ (подходящее имя — util). Тогда полное имя пакета должно быть ua.prov.my.util.
  • 2. Создать необходимую структуру каталогов. Нужно выбрать или создать каталог, где мы будем хранить все свои пакеты. Пусть, например, это каталог c:\javaproj. В нем нужно создать каталог ua, в каталоге ua создать каталог prov, в нем — my, и наконец в my — util. Все java-файлы создаваемого пакета должны помещаться в каталог util. Т.е. структура имени пакета определяет структуру каталогов.
  • 3. Указать путь к пакету в bat-файлах трансляции и выполнения. Для удобства работы со своими пакетами желательно прописать путь к пакетам в bat-файлах трансляции и выполнения java-программ. Приведем примеры bat-файлов j.bat и jr.bat, в которых указан путь к выбранному нами для хранения всех пакетов каталогу c:\javaproj. Файл для трансляции (j.bat)
· REM Компилятор JAVA· set JDKHOME=d:\jdk1.3· set CLASSPATH=.;%JDKHOME%\jre\lib\rt.jar;c:\javaproj· d:\jdk1.3\bin\javac %1 %2 %3 %4 %5·

Файл для выполнения (jr.bat)

REM Запуск программы на JAVAset JDKH=d:\jdk1.3set CLASSPATH=.;%JDKH%\jre\lib\rt.jar;%JDKHOME%\jre\lib\i18n.jar;c:\javaproj%JDKH%\jre\bin\java -cp %CLASSPATH% %1 %2 %3 %4 %5 %6
  • 4. В java-файлах пакета указать оператор package. Первым оператором в каждом java-файле пакета должен быть оператор package, в котором указано имя данного пакета. В нашем случае это должен быть оператор вида
· package ua.prov.my.util;

Реализуем простой пример. Создадим в каталоге util такой файл S.java.

package ua.prov.my.util; public class S { public static void o(String str) { System.out.println(str); } }

Оттранслируем его командой

j S.java

Теперь вернемся к примеру в начале занятия и модифицируем его.

  • 1. В начало файла вставим
· import ua.prov.my.util.S;
  • 2. Строки
· System.out.println("v1*v2=" + v1.mult(v2));· System.out.println("v1*v2=" + DoubleVector.mult(v1, v2));· System.out.println("v1*v3=" + v1.mult(v3));·

заменим на

S.o("v1*v2=" + v1.mult(v2));S.o("v1*v2=" + DoubleVector.mult(v1, v2));S.o("v1*v3=" + v1.mult(v3));
  • 3. Оттранслируем и запустим измененную программу. Если мы все сделали правильно, то она будет работать как и прежде. Можно сказать, что мы создали библиотеку (это каталог c:\javaproj). В дальнейшем мы можем расширять ее новыми пакетами и классами.

9)

Массивы в Java

Мы не рассмотрели еще массивы. В Java есть как одномерные, так и многомерные массивы. Но реализация массивов в Java имеет свои особенности. Во-первых массив в Java это объект. Этот объект состоит из размера массива (поле length) и собственно массива.

Рассмотрим сначала простейшие одномерные массивы базовых типов.

int intAry[]; или int[] intAry;

Это описание переменной (или поля) intAry — ссылки на массив. Соответственно, в этом описании размер массива не указывается и сам массив не создается. Как и любой другой объект массив должен быть создан операцией new .

intAry = new int[10];

Создает массив из 10 целых и адрес этого массива заносит в intAry. Как обычно в Java допустимо объединять описание и инициализацию.

int[] intAry = new int[10];

Для массивов допустима инициализация списком значений.

int intAry[] = {1, 2, 3, 4};

Здесь описан массив из 4-х элементов и сразу определены их начальные значения.

Элементы массивов в Java нумеруются с 0. При обращении к элементу массивы его индексы задаются в квадратных скобках. Например.

x = a[3]; // x присваивается значение 3-го (4-го по порядку) элемента массива aintAry[i] = 0; // i — му элементу массива intAry присваивается значение 0

Java жестко контролирует выход за пределы массива. При попытке обратиться к несуществующему элементу массива возникает IndexOutOfBoundException.

Для двумерных массивов ставится не одна пара скобок, а две, для трехмерных — три и т.д. Например.

s = someAry[i][0];tAry[i][j][k] = 10;

Как уже указывалось, массив является объектом, который, в частности, хранит поле length — размер массива. Это позволяет задавать обработку массивов произвольного размера. Рассмотрим пример метода, вычисляющего сумму элементов массива.

public double sum(double ary[]) { double s = 0; for ( int i = 0; i < ary.length; i++ ) { s += ary[i]; } return s;}

Массивы объектов

Одномерный массив объектов — это массив ссылок на объекты. Соответственно, нужно создать как массив, так и сами объекты. Наиболее частая ошибка у начинающих при работе с массивами классов примерно следующая. Создается сам массив, например,

A[] a1 = new A[10];

а потом сразу идет попытка работы с элементами этого массива. Но здесь построен только массив ссылок, а сами объекты еще не созданы.

Пусть у нас есть некоторый класс SomeClass и нужно построить массив из 4-x объектов этого класса.

Вариант 1. (явное создание)

SomeClass objAry[] = new SomeClass[4];for (int j = 0; j < 4; j++ ) objAry[j] = new SomeClass();

Вариант 2. (использование списка инициализации)

SomeClass objAry[] = new SomeClass[] { new SomeClass(), new SomeClass(), new SomeClass(), new SomeClass(), };

Многомерные массивы

Они строятся по принципу "массив массивов". Разберемся с этим. Массив вляется объектом. Двумерный массив — это массив ссылок на объекты-массивы. Трехмерный массив — это массив ссылок на массивы, которые, в свою очередь, являются массивами ссылок на массивы.

Это выглядит несколько сложно. Но, к счастью, есть сокращенные варианты создания массива, которые позволяют сразу разместить все необходимые массивы ссылок. Кроме того, если удается использовать списки инициализации (а это возможно, когда размер массива заранее известен), то все гораздо проще. Пусть, например, требуется создать массив целых 3*3.

Вариант 1. (явное создание)

int ary[][] = new int[3][3];

Вариант 2. (использование списка инициализации)

int ary[][] = new int[][] { {1, 1, 1}, {2, 2, 2}, {1, 2, 3}, };
  • Внимание: в варианте 1 массив создан, но его элементы имеют неопределенное значение. Если попытаться их использовать, возникнет Exception.

Соответственно, все несколько усложняется при использовании массивов объектов. Создадим аналогичный массив объектов класса SomeClass.

Вариант 1. (явное создание)

SomeClass ary[][] = new SomeClass[3][3];for ( int k = 0; k < 3; k++ ) for ( int j = 0; j < 3; j++ ) ary[k][j] = new SomeClass();

Вариант 2. (использование списка инициализации)

SomeClass ary[][] = new SomeClass[][] { { new SomeClass(), new SomeClass(), new SomeClass(), }, { new SomeClass(), new SomeClass(), new SomeClass(), }, { new SomeClass(), new SomeClass(), new SomeClass(), }, };

Глядя на примеры со списком инициализации, можно задаться вопросом, что будет, если мы в одних строках зададим одно количество элементов, а в других — другое. Например.

int ary[][] = new int[][] { {1, 1, 1, 1}, {2, 2, 2}, {1, 2, 3, 4, 5}, };

В Java такое допустимо и именно потому, что многомерный массив является массивом ссылок на массивы. Т.е. каждый массив следующего уровня является самостоятельным массивом и может иметь свой размер. Причем, создание таких "непрямоугольных" массивов возможно не только с использованием списка инициализации, но и явно.

Наши рекомендации