Лекции (989962), страница 54
Текст из файла (страница 54)
Использование пакетовДля того, чтобы в одном классе можно было использовать другой класс, необходимо импортировать этоткласс при помощи директивы import. Пример: import avtomobil; . Однако вы видите, что во всех приведенных ранее примерах этого не сделано. Объясняется это тем, что директиву import можно опустить, еслифайл класса находится в том же каталоге. Директива import используется, в основном, для импорта классовиз пакетов.Рассмотрим понятие пакета.
Как известно, каждый класс помещается в отдельный файл класса.Большое количество файлов классов напоминает жесткий диск без каталогов или папок, поэтому файлыклассов должны быть некоторым образом организованы. Для объединения исходных текстов файловклассов в один файл используются пакеты. Они напоминают библиотеки, имеющиеся во многих языках.Помимо того, что пакеты позволяют логически сгруппировать классы, они еще снимают проблемусовпадения имен классов. Допустим, что есть два пакета "маляры" и "художники" и в рамках каждогопакета описан класс "кисточка" (очевидно, что малярная кисть отличается от кисти художника).
Если быпакетов не существовало, то возник бы конфликт, т.к. существует два класса с одинаковым именем.Использование пакетов снимает эту проблему, т.к. теперь доступ к классам будет организован так:"маляры.кисточка" и "художники.кисточка".Для того чтобы включить класс в пакет, нужно при его объявлении использовать оператор package,который должен быть первым оператором в файле. Другими словами, перед этим оператором могут бытькомментарии и пробелы, но ничего больше.
Пример: Ляхевич А.Г., 2000 - 2002 годВерноНеверноpackage tachki;import java.awt.*;import java.io.*;import java.awt.*;import java.io.*;package tachki;class avtomobil {long nomer;void poehal ( ) { System.out.println (" Еду "); }}class avtomobil {long nomer;void poehal ( ) { System.out.println (" Еду "); }}class mercedes extends avtomobil {void poehal ( ){ System.out.println (" Еду быстро …"); }void marka ( ){ System.out.println (" Шестисотый мерс!"); }}class mercedes extends avtomobil {void poehal ( ){ System.out.println (" Еду быстро …"); }void marka ( ){ System.out.println (" Шестисотый мерс!"); }}Для использования класса из пакета, необходимо импортировать его, или импортировать пакет целиком.Синтаксис:import имя_пакета . имя_класса// импортировать один классimport имя_пакета .
*// импортировать все классы из пакетаПример:import tachki . mercedes;import tachki . * ;Можно и не импортировать пакет, тогда для использования класса придется указывать его полное название,включая имя пакета, что неудобно: tachki.mercedes moya_tachka = new tachki.mercedes ( );Также желательно не импортировать большие пакеты целиком, а ограничиться только теми классами,которые действительно нужны:1) При импорте пакета целиком виртуальная машина Java должна отслеживать имена всех элементов,имеющихся в пакете. На это расходуется дополнительная оперативная память.
Кроме того, в этом случаенемного снижается быстродействие системы2) Если импортируется несколько пакетов и окажется, что они имеют совпадающие имена файлов классов,то возникнет конфликт: какой же класс все-таки использовать?3) Самый главный минус связан с пропускной способностью Internet-соединения. Когда вы целикомимпортируете пакеты, отсутствующие на вашем компьютере, то перед тем, как продолжить работу, браузердолжен загрузить через сеть все файлы классов для целого пакета. Если в пакете имеется 30 классов, аиспользуются только два, будут напрасно расходоваться значительные ресурсы и время пользователя.8.8. ИнтерфейсыВ языке Java отсутствует множественное наследование, т.е.
любой объект может порождаться только отодного объекта. Но иногда надо, чтобы объект унаследовал не только свойства и методы родителя, но исвойства и методы другого объекта. Для этих целей используются интерфейсы – классы, в которыхобъявлены, но не описаны методы. Класс, реализующий интерфейс, должен сам описать реализациюметодов интерфейса. При описании методов интерфейсов, можно не указывать модификаторы доступа, всеони по умолчанию рассматриваются как public. Другие модификаторы доступа в описании методовинтерфейса использовать нельзя. В интерфейсах также нельзя использовать переменные, не являющиесяконстантами (final). Любые поля интерфейса, вне зависимости указаны модификаторы доступа или нет,рассматриваются как public, final и static.Синтаксис объявления интерфейса следующий:public interface имя_интерфейса extends список_интерфейсов{ /* объявление свойств, объявление методов без описания их реализации */ }Пример:public interface Radio {final String nazvanie = "Автомобильный радиоприемник"; // описание константыpublic long Volna( );// описание метода}Интерфейс применяется к объекту при помощи ключевого слова implements (синтаксис см.
выше). Пример:class mercedes extends avtomobil implements Radio – к классу mercedes применяется интерфейс Radio. Ляхевич А.Г., 2000 - 2002 год8.9. Арифмитические и логические операции. Циклы и управляющие операторы.Арифметические и логические операцииОперацияОписаниеx=3Присвоить переменной x значение 3.+, -, *, /, %Сложение, вычитание, умножение, деление и деление по модулю (определение остаткаот деления).Увеличить x на единицу, уменьшить x на единицу.x ++, x -+=, -=, *=, /=x == 3x != 3<,<=,>,x|yСложение, вычитание, умножение и деление с присваиванием.x+=3 аналогично команде x=x+3.Операция равенства: x равен 3.
Используется в конструкции IF..ELSE и др.Пример: if (x==3) { //действия };Операция неравенства: x не равен 3.>= Операции отношений: меньше, меньше или равно, больше, больше или равно.x&yПоразрядная операция ИЛИ (OR). Результатом является число, полученное всоответствии с таблицей истинности для ИЛИ. Пример:x: 00001010 = 10y: 00001100 = 12Результат: 00001110 = 14Поразрядная операция И (AND).x^yПоразрядная операция исключающее ИЛИ (XOR).~xПоразрядное логическое отрицание НЕ (NOT).&=,|=, ^=x||yПоразрядные операции с присваиванием: x&=y аналогично x=x&yx && yЛогическая операция ИЛИ (OR).
В отличие от поразрядных операций, результатлогической операции не число, а только значение ИСТИНА или ЛОЖЬ. Именнологические операции используются в конструкциях IF..ELSE и др.Логическая операция И (AND).!xЛогическая операция НЕ (NOT).-xУнарная операция "изменение знака".x<<2Поразрядный сдвиг битов влево: сдвинуть биты переменной х на 2 бита влево. Пример:00000001 (двоичное) <<2 дает 00000100 (двоичное).Поразрядный сдвиг вправо, поразрядный сдвиг вправо без знака.>>, >>><<=, >>=, >>>= Поразрядный сдвиг с присваиванием.Оператор if - else:Синтаксис:if (выражение) {операторы;} else {операторы; }Пример:1) if ( x==2 && x!=3 ) { /*операторы выполняются если x равен 2 и не равен 3*/ } else { /*операторы */ }2) if (x==2) { /*операторы */ }Оператор whileСинтаксис:1) while (выражение) {операторы;}2) do {операторы;} while (выражение);Пример:1) while(x==2 && x!=3) { x++; /* и др.
операторы - выполняются пока x равен 2 и не равен 3 */ }2) do { /*операторы */ } while (x==2);Операторы forСинтаксис:1) for ( тип_данных счетчик=исходное_значение; (условие_остановки); шаг ) { /*операторы */ }Пример:1) for ( int i=0, long j=10; ( ( i >100 ) | | yslovie_J ( )); i++, raschet_J ( ) ) { /*операторы */ } Ляхевич А.Г., 2000 - 2002 год2) for (int i=0; i==100; i++) {/*операторы */ }Описание метокВ Java нет операторов Goto, поэтому управление на метки передается при помощи операторов break иcontinue (см.
ниже). Метки описываются не относительно всей программы, а относительно только техоператоров, которые заключены между скобками { } в описании метки. Описание меток можно вкладыватьодно в другое.Синтаксис:метка : { /*операторы, относительно которых определена метка*/ }Пример:metka1: { x++;metka2:{ y++; }}Оператор breakИспользуется в конструкциях while, for и switch (см. ниже). Прерывает выполнение цикла и передаетуправление по указанной метке. Если метка не указана, то управление передается строке, следующей зациклом.
Пример:Пример 1metka1: { for (int i=0; i==100; i++) {metka2: { for (int m=0; m==100; m++) {if ( i==77 ) break metka1;if ( m==99 ) break metka2; }}}}Пример 2for (int i=0; i==100; i++) { if ( i==77 ) break; }Пример 3metka: { int x = 3;/* операции */if (x==3) break metka; }Операторы continueИспользуется в конструкциях while, for и switch (см. ниже). Прерывает выполнение цикла и преждевременнопередает управление к следующему проходу цикла. Указание метки в операторе continue позволяет выбратьуровень вложенности цикла, которому передается управление.
Пример:Пример 1metka1: { for (int i=0; i==100; i++) {metka2: { for (int m=0; m==100; m++) {if ( i==77 ) continue metka1;if ( m==99 ) continue metka2; }}}}Пример 2for (int i=0; i==100; i++) { if ( i==77 ) continue; }Операторы switchПереключатель switch (должен иметь целый тип: byte, short, char, int, но не float и boolean) передает управление одному из нескольких составляющих его операторов в зависимости от значения переключателя. Еслисовпадений нет, то управление передается метке по умолчанию (default).
Если default-метка отсутствует,программа продолжается с первого оператора, стоящего после блока switch.Синтаксис:switch (переключатель) {case значение1 : оператор1; операторN; break;case значениеN: оператор1; операторN; break;default: оператор1; операторN; break;}Пример:int x=1; switch (x){case 1: System.out.println ("one"); break;case 2: case 3: case ' ': System.out.println ("two or three or space"); break;case default: System.out.println ("Default"); }8.10. Математические функции, дата и время, работа со строкамиМатематические функции:В пакете java.lang имеется класс Math, который предоставляет некоторые полезные математические итригонометрические функции. Пример:class primer {public static void main(String args[ ] ) { // Запуск программы Ляхевич А.Г., 2000 - 2002 годint chislo1 = Math.min (100, 700); // Возвращает минимальное значения из двух чисел 100 и 700int chislo2 = Math.max (100, 700); // Возвращает максимальное значения из двух чисел 100 и 700int chislo3 = Math.abs (-3); // Возвращает абсолютное значение числаint chislo4 = ( int ) ( 10*Math.random ( ) ) + 1; /* Возвращает случайное целое число от 1 до 10.Здесь Math.random( ) возвращает случайное число от 0 до 1, а конструкция ( int ) ( выражение ) служитдля преобразования выражения, находящегося под скобками, к типу int.
Аналогично можно проводитьпреобразования и между другими типами данных. Наример: ( long ) ( 15.234 + 10.017 ) */long chislo5 = Math.round (10.5); //Округление по правилам математики. Результат = 11double chislo6 = Math.floor(10.7); //Округление всегда в меньшую сторону. Результат = 10double chislo7 = Math.ceil (10.3); //Округление всегда в большую сторону. Результат = 11double chislo8 = Math.rint (10.5); //Округление до ближайшего целого.
Результат = 10double chislo9 = Math.sqrt ( 4 ); //Квадратный корень из 4.double chislo10 = Math.pow ( 7, 1/3 ); // Число 7 в степени 1/3double chislo11 = Math.log ( 7 ); // Натуральный логарифм числа 7.double chislo12 = Math.log ( 7 ) / Math.log ( 10 ); // Десятичный логарифм числа 7.double chislo14 = Math.exp ( 7 ); // Экспонента числа 7, т.е. e7. Существует константа Math.Edouble chislo15 = Math.sin ( 3.14 ); // Синус. Угол задается в радианах. Радианы=градусы*Math.PI / 180.double chislo16 = Math.cos ( Math.PI / 2 ); // Косинус.