Лабораторная работа 1 2 лабораторная работа 2 31 лабораторная работа 3 44 лабораторная работа 4 74
Скачать 1.76 Mb.
|
СОДЕРЖАНИЕ ЛАБОРАТОРНАЯ РАБОТА №1 2 ЛАБОРАТОРНАЯ РАБОТА №2 31 ЛАБОРАТОРНАЯ РАБОТА №3 44 ЛАБОРАТОРНАЯ РАБОТА №4 74 ЛАБОРАТОРНАЯ РАБОТА №5 126 ЛАБОРАТОРНАЯ РАБОТА №6 186 ЛАБОРАТОРНАЯ РАБОТА №7 207 ЛАБОРАТОРНАЯ РАБОТА №8 230 ЛАБОРАТОРНАЯ РАБОТА №9 256 ЛАБОРАТОРНАЯ РАБОТА №10. 278 ЛАБОРАТОРНАЯ РАБОТА №11. 301 Правила техніки безпеки 321 Вимоги до оформлення звітів. 322 ЛАБОРАТОРНАЯ РАБОТА №1Тема: Обзор языка программирования java. Цель: ознакомится с языком программирования java. Теоретические сведенья Обзор языка java Рассматриваемые вопросы: 1.1 Первый пример простой программы 1.2 Типы данных 1.3 литералы 1.4 Переменные 1.5 Операции Объектно-ориентированное программирование (ООП) это основная характеристика языка java. Фактически все jаvапрограммы являются, по меньшей мере, частично, объектно-ориентированными. Все компьютерные программы состоят из двух элементов: кода и данных. Более того, концептуально программа может быть организована вокруг своего кода или вокруг своих данных. То есть организация некоторых программ определяется тем "что происходит", а других тем, "на что оказывается влияние". Существуют две концепции создания программы. Первый способ называют моделью, ориентированной на процессы. Этот под ход характеризует программу в виде последовательностей линейных шагов (т.е. кода). Модель, ориентированную на процессы, можно рассматривать в качестве кода, воздействующею на данные. Процедурные языки вроде С достаточно успешно используют эту модель. Однако этот подход порождает ряд проблем с увеличением размеров и сложности программ. Для преодоления увеличивающейся сложности была начата разработка подхода, названного объектно-ориентированным программированием. Объектно-ориентированное программирование организует программу вокруг ее данных (т.е. объектов) и набора подробно определенных интерфейсов к этим данным. Объектно-ориентированную программу можно характеризовать как данные, управляющие доступом к коду. 1.1 Первый пример простой программы /* Это простая программа Java. Назовите этот файл "Example. j ava" . */ class Example { // Программа начинается с обращения к main(). public static void main(String args[]) { Sуstеm.оut.рriпtln("Простая Jаvапрограмма."); } } Для большинства языков программирования имя файла, который одержит исходный код программы, не имеет значения. Однако в java это не так. Прежде всего, следует твердо усвоить, что присваиваемое исходному файлу имя очень важно. В данном случае именем исходного файла должно быть Example.java. В java исходный файл официально называется модулем компиляции. Он представляет собой текстовый файл, который содержит определения одного или более классов. Компилятор java требует, чтобы исходный файл имел расширение .jаvа. Как видно из кода программы, именем определенного программой класса является также Example. И это не случайно. В java весь код должен размещаться внутри класса. В соответствии с принятым соглашением имя этоrо класса должно совпадать с именем файла, содержащего программу. Необходимо также, чтобы употребление строчных и прописных букв имени файла соответствовало их употреблению в имени класса. Это обусловлено тем, что jаvакод чувствителен к регистру символов. Пока что соглашение о соответствии имен файлов и имен классов может казаться произвольным. Однако оно упрощает поддержку и организацию программ. Более подробное рассмотрение первого примера программы Хотя программа Example.java достаточно коротка, с ней связано несколько важных особенностей, характерных для всех jаvапрограмм. Программа начинается со следующих срок: /* Это простая проrрамма Java. Назовите этот файл "Example. j ava" . */ Этот фрагмент кода комментарий. Подобно большинству других языков программирования, java позволяет вставлять примечания в исходный файл программы. Компилятор игнорирует содержимое комментариев. Эти комментарии служат описанием или пояснением действий программы для любого, кто просматривает исходный код. В данном случае комментарий описывает программу и напоминает, что исходный файл должен быть назван Examplе.jаva. Конечно, в реальных приложениях комментарии служат главным образом для пояснения работы отдельных частей программы или действий, выполняемых отдельной функцией. В java поддерживаются три стиля комментариев. Комментарий, приведенный в начале программы, называют многострочным комментарием. Этот тип комментария должен начинаться с символов / * и заканчиваться символами * /. Весь текст, помещенный между этими двумя символами комментария, компилятором игнорируется. Как следует из его названия, многострочный комментарий может содержать несколько строк. Следующая строка программы имеет такой вид: class Example { В этой строке ключевое слово class используется для объявления о том, что выполняется определение нового класса. Example это идентификатор, являющийся именем класса. Все определение класса, в том числе его членов, будет размещаться между открывающей ( {) и закрывающей (}) фигурными скобками. В среде java все действия программы осуществляются внутри класса. В этом состоит одна из причин того, что все jаvапрoграммы (по крайней мере, частично) являются объектно-ориентированными. Следующая строка программы однострочный комментарий: / / Программа начинается с обращения к mаin () . Это второй тип комментариев, поддерживаемый языком java. Однострочный комментарий начинается с символов / / и завершается концом строки. Как правило, программисты используют многострочные комментарии для вставки длинных примечаний, а однострочные комментарии для помещения коротких, построчных описаний. Следующая строка кода выглядит так: public static void main(String args[]) Она начинается с метода main (). Как видно из предшествующего ей комментария, выполнение программы начинается с этой строки. Выполнение всех jаvаприложений начинается с вызова метода main ( ). Ключевое слово public - спецификатор доступа, который позволяет программисту управлять видимостью членов класса. Когда члену класса предшествует ключевое слово public, этот член доступен коду, расположенному вне класса, в котором определен данный член. (Противоположное ему по действию ключевое слово private, которое препятствует использованию члена класса кодом, определенным вне eгo класса.) В данном случае метод main () должен быть определен как public, поскольку при запуске программы он должен вызываться кодом, определенным вне eгo класса. Ключевое слово static позволяет вызывать метод main () без конкретизации экземпляра класса. Это необходимо потому, что метод main () вызывается виртуальной машиной java до создания каких-либо объектов. Ключевое слово void просто сообщает компилятору, что метод main () не возвращает никаких значений. Как будет показано в дальнейшем, методы могут также возвращать значения. Как было отмечено, main () - метод, вызываемый при запуске jаvаприложений. Необходимо помнить, что язык java чувствителен к регистру символов. Следовательно, строка Main не эквивалентна строке main. Для передачи любой информации, необходимой методу, служат переменные, указываемые в скобках, которые следуют за именем метода. Эти переменные называют параметрами. Если для данного метода никакие параметры не требуются, следует указывать пустые скобки. Метод main () содержит только один параметр, но достаточно сложный. Параметр String args [] объявляет параметр args, который представляет собой массив экземпляров класса String. (Массивы - это коллекции аналогичных объектов.) Объекты типа String хранят символьные строки. В данном случае параметр args принимает любые аргументы командной строки, присутствующие во время выполнения программы. Последним символом строки является символ фигурной скобки ( {). Он обозначает начало тела метода main () . Весь код, образующий метод, будет располагаться между открывающей и закрывающей фигурными скобками метода. Еще один важный момент: метод main () служит всего лишь началом программы. Сложная программа может включать десятки классов, только один из которых должен содержать метод main (), чтобы выполнение было возможным. Следующая строка кода приведена ниже внутри метода main ( ): Sуstеm.оut.рrintln("Простая Jаvапрограмма."); Эта строка выводит на экран строку текста " Простая Jаvапрограмма. ", за которой следует новая строка. В действительности вывод выполняется встроенным методом println (). В данном случае метод println () отображает переданную ему строку. Оператор println () завершается символом точки с запятой. В java все операторы заканчиваются этим символом. Причина отсутствия символа точки с запятой в конце остальных строк программы в том, что с технической точки зрения они не являются операторами. Первый символ } завершает метод main (), а последний определение класса Example. 1.2 Типы данных Java — это язык со строгой типизацией. Каждая переменная и каждое выражение имеют тип, и каждый тип строго определен. Все назначения — явные или через передачу параметров в вызовах методов, проверяются на совместимость типов. Не имеется никаких автоматических приведений или преобразований конфликтующих типов, как в некоторых языках. Компилятор Java проверяет все выражения и параметры, чтобы гарантировать, что типы совместимы. Любые несоответствия типов — ошибки, которые должны быть исправлены прежде, чем компилятор закончит компилировать. 1.2.1 Простые типы Java определяет восемь простых (или элементных) типов данных: byte, short, int, long, char, float, double И boolean. Их можно объединить в четыре группы. - Целые (Integers). Эта группа включает типы byte, short, int и long, которые являются полнозначными целыми числами со знаком. - Числа с плавающей точкой (Floating-point number). Эта группа включает типы float и double, которые представляют числа с дробной точностью. - Символы (Characters). Эта группа включает тип char, который представляет символы в наборе символов, подобные буквам и цифрам. - Логические или булевские (Boolean). Эта группа включает тип boolean, который является специальным типом для представления значений true/false (истина/ложь). Можно использовать указанные типы сами по себе, создавать массивы или новые классы типов. Таким образом, они формируют основу для всех других типов данных. Простые типы представляют одиночные (не множественные) значения. Хотя Java во всем остальном полностью объектно-ориентирован, простые типы не являются таковыми. Они аналогичны простым типам, которые можно найти в большинстве других не объектно-ориентированных языков. Причина этого кроется в эффективности. Выполнение простых типов в виде объектов слишком ухудшило бы эффективность. Простые типы определены так, чтобы знать их явный диапазон и математическое поведение. Из-за требования мобильности, все типы данных имеют строго определенный диапазон. Например, int — всегда 32-битный, независимо от специфической платформы. Это позволяет программам быть записанными так, чтобы гарантировать ее выполнение без переводана любой машинной архитектуре. Тогда как строгая спецификация размера целого числа может вызывать небольшую потерю производительности, в некоторых средах это необходимо, чтобы достичь мобильности. 1.2.2 Целые типы Java определяет четыре целых типа: byte, short, int и long. Вес они со знаками — положительные и отрицательные значения. Java не поддерживает беззнаковых и только положительных целых. Не смотря на это, проектировщики Java чувствовали, что целые числа без знака все таки нужны. В частности, что концепция целых без знака(unsigned) использовалась главным образом, чтобы специфицировать поведение старшего бита, который определял знакцелого типа (int), когда он выражен как число. Java управляет значением старшего бита иначе, предоставляя специальную операцию "беззнакового правого сдвига". Таким образом, потребность в типе целого числа без знака была устранена. О ширине(или количестве бит, отводимых для хранения значения) целочисленного типа нельзя думать как о количестве памяти, которую он занимает, а скорее, как о поведении, которое она определяет для переменных и выражений этого типа. Исполнительная среда Java вольна использовать любой размер, какой она хочет, тогда как типы ведут себя согласно их объявлению. Существует, по крайней мере, одна реализация исполнительной среды, которая хранит числа типа byte и short как 32-разрядные (а не 8- и 16-разрядные) значения, чтобы улучшить эффективность, потому что этим значением выражается размер слова большинства используемых в настоящее время компьютеров. Ширина и диапазоны этих целых типов широко изменяются, как показано в табл. 1. Табл. 1
Тип byte Тип byte - самый маленький целый тип. Это 8-разрядный тип со знаком, значения которого изменяются в диапазоне от —128 до 127. Переменные типа byte особенно полезны, когда вы работаете с сетевым или файловым потоком данных. Они также могут использоваться при работе с рядами двоичных данных, которые не могут быть непосредственно совместимы с другими встроенными типами Java. Байтовые переменные объявляются при помощи ключевого слова byte. Например, следующее предложение объявляет две байтовые переменные с именами b и с: byte b,c; Тип short Тип short — 16-разрядный тип данных со знаком. Диапазон изменения его значений от -32,768 до 32,767. Пожалуй, это наименее используемый тип Java, так как он определен со старшим байтом в начале (в так называемом формате big-endian). Этот тип главным образом применим к 16-разрядным компьютерам, которые становятся все более и более редкими. пример объявления short переменной: short s; Тип Int Чаще всего используется тип int. Это 32-разрядный тип со знаком, который имеет диапазон от -2,147,483,648 до 2,147,483,647. В дополнение к другим применениям, переменные типа int обычно используются для управления циклами и индексирования элементов массива. Всякий раз, когда появляется целочисленное выражение, включающее операнды типа byte, short, int и целочисленные константы, тип полного выражения расширяется (или повышается) до типа int прежде, чем выполняется вычисление. Тип int наиболее универсален и эффективен и должен быть использован для расчетов, индексации элементов массива или выполнения целочисленных операций. Может показаться, что использование short или byte экономит память, но нет никакой гарантии, что Java не будет внутренне так или иначе расширять эти типы до int. Тип long Тип long — 64-разрядный тип со знаком. Он полезен в тех случаях, когда тип int недостаточен (по размеру памяти), чтобы хранить желаемое значение. Диапазон значений long весьма велик. Это делает его полезным при работе с большими целыми числами. Например, вот программа, которая вычисляет мили, пройденные светом за указанное число дней. // Вычисляет расстояние, пройденное световым сигналом // используя long-переменные class Light { public static void main(String args[]) { int lightspeed; long days; long seconds; long distance; // аппроксимация скорости света в мили в секунду lightspeed = 186000; days = 1000; // задать количество дней seconds = days * 24 * 60 * 60; // преобразовать в секунды distance = lightspeed * seconds; // вычислить расстояние System.out.print("За " + days); System.out.print(" дней световой сигнал пройдет около "); System.out.println(distance + " миль."); } } Эта программа генерирует следующий вывод: За 1000 дней световой сигнал пройдет около 16070400000000 миль. Ясно, что результат не мог быть получен в int-переменной. 1.2.3 Типы с плавающей точкой Числа с плавающей точкой, также известные как вещественные числа, используются при оценке выражений, которые требуют дробной точности. Например, вычисления квадратного корня или трансцендентных функций типа синуса и косинуса приводят к вещественному значению с определенной точностью, что и требует типа с плавающей точкой. Java реализует стандартный набор типов с плавающей точкой и соответствующие операции с ними. Существует два вида типов с плавающей точкой fidat и double, которые представляют числа с одинарной и двойной точностью, соответственно. Их ширина и диапазоны представлены в табл. 2. Табл. 2
Тип float Тип float определяет значение с одинарной точностью, которое использует 32 бита памяти. Вычисления с одинарной точностью быстрее на некоторых процессорах, а значения занимают половину пространства значений двойной точности. Но тип оказывается неточным, когда его значения становятся или очень большими, или очень маленькими. Переменные типа float полезны, когда нужен дробный компонент, но не требуется большой степени точности. Например, тип float может быть полезен при представлении долларовых цен с учетом центов. Пример объявления float-переменных: float hightemp, lowtemp; Тип double Тип двойной точности, обозначаемый ключевым словом double, для хранения значений использует 64 бита памяти. На некоторых современных процессорах, которые были оптимизированы для высокоскоростных математических вычислений, операции с двойной точностью на самом деле выполняются быстрее, чем с одинарной. Все трансцендентные математические функции, типа sin , cos и sqrt, возвращают double-значения. Когда нужно поддержать точность во многих итерационных вычислениях или манипулировать с многозначными числами, double — лучший выбор. Ниже представлена короткая программа, которая использует переменные двойной точности, чтобы вычислить площадь круга. // Вычислить площадь круга, class Area { public, static void main (String args []){ double pi, r, a; r = 10.8 ; // радиус кpyгa. Pi = 3.14 ; // пи приближенно. a = pi * r * r; // вычисляет площадь System.out.println("Площадь круга равна " + a); } } 1.2.4 Символьный тип (char) Для хранения символов Java использует тип char. Однако, программисты C/C++, остерегайтесь: тип char в Java — не тот же, что в С или С++. В C/C++ char — целочисленный тип шириной в 8 бит. В Java это не так. Вместо этого, для представления символов Java использует Unicode. Unicodeопределяет полный набор интернациональных символов, который может представлять все символы, находящиеся во всех человеческих языках. Он объединяет множество наборов символов, таких как латинский, греческий, арабский, кириллица, иврит, Katakana, Hangul и многие другие. Для этой цели он требует 16 бит. Таким образом, char в Java — 16-разрядный тип данных. Диапазон его значений варьируется от 0 до 65 536. Нет никаких отрицательных символов. Стандартный набор символов, известный как ASCII, все еще располагается в интервале значений от 0 до 127, как обычно, а расширенный 8-разрядный набор символов, ISO-Latin-1, в диапазоне от 0 до 255. Так как язык Java разработан для записи апплетов "всемирного использования", то имеет смысл, чтобы для представления символов он использовал Unicode. Конечно, использование Unicode несколько неэффективно для языков, подобных английскому, немецкому, испанскому или французскому, чьи символы могут легко содержаться в 8 битах. Но такова цена, которая должна быть заплачена за глобальную мобильность. 1.2.5 Булевский тип (boolean) Java имеет простой тип, называемый boolean (булевый или булевский), для логических значений. Он может иметь только одно из двух возможных значений true (истина) или false (ложь). Это тип, возвращаемый всеми операциями отношений, такими как a 1.3.1 Целочисленные литералы Целые числа, вероятно наиболее часто используемый тип в обычных программах. Любое полное числовое значение — целый литерал. Например, 1, 2, 3 и 42. Это все десятичные значения, т. е. числа с основанием 10. Имеются два других основания, которые можно использовать в целых литералах — восьмеричное (octal), с основанием 8, и шестнадцатеричное (hexadecimal), с основанием 16. Восьмеричные значения обозначены в Java ведущим нулем. Обычные десятичные числа не могут иметь ведущий нуль. Таким образом, казалось бы, правильное значение 09 даст ошибку компилятора, так как 9 — вне восьмеричного диапазона от 0 до 7. Более обычное основание для чисел, используемых программистами — шестнадцатеричное, которое четко согласуется с размерами слов по модулю 8, такими как 8, 16, 32 и 64 бита. Шестнадцатеричную константу обозначают с ведущими нулями. Для представления шестнадцатеричного значения используются цифры от 0 до 9 и буквы латинского алфавита от А до F или от а до f (для значений от 10 до 15). Целые литералы создают значение типа int, которое в Java является 32-разрядным целым числом. Так как Java строго типизирован, возникает вопрос, как можно назначить целый литерал одному из целых типов, такому как byte или long, без генерации ошибки несоответствия типов? К счастью, такие ситуации легко управляемы. Когда литеральное значение назначается byte- или short-переменной, никакая ошибка не генерируется, если это значение находится в пределах диапазона целевого типа. Аналогично, целый литерал может всегда назначаться переменной типа long. Однако, чтобы определить длинный литерал, нужно будет явно сообщить компилятору, что его значение имеет тип long. Это осуществляется добавлением в конец литерального значения символа L (в верхнем или нижнем регистре). 1.3.2 Литералы с плавающей точкой Числа с плавающей точкой представляют десятичные значения с дробным компонентом. Они могут быть выражены или в стандартной или научной (экспоненциальной) форме. Стандартная форма состоит из числового компонента, за которым следует десятичная точка, а далее — дробная компонента. Например, 2.0, 3.14159 и 0.6667 представляют правильные числа с плавающей точкой в стандартной системе обозначений. Научная форма представления использует стандартные обозначения — число с плавающей запятой плюс суффикс, который определяет степень 10, на которую должно быть умножено число. Экспонента обозначается буквой Е или е, за которой следует положительное или отрицательное десятичное число. Например: 6.022Е23, 314159Е-05 и 2е+100. По умолчанию литералы с плавающей точкой Java имеют double-точность. Чтобы определить float-литерал, следует добавить в конец его записи символ F или f. Можно также явно определить double-литерал, добавляя D или d, но подобное определение будет избыточным. По умолчанию тип double занимает 64 бита памяти, в то время как менее точный тип с плавающей точкой требует только 32 бита. 1.3.3 Булевые литералы Булевы литералы просты. Имеются только два логических значения — true и false. Значения true и false не конвертируются в какое-либо числовое представление. Литерал true в Java не равняется 1, а литерал false не равняется 0. В Java они могут быть назначены только переменным, объявленным типом boolean, или использоваться в выражениях с булевскими операциями. 1.3.4 Символьные литералы Символы в Java — это индексы в наборе символов Unicode. Они являются 16-разрядными значениями, которые можно преобразовывать в целые числа и с которыми можно манипулировать целочисленными операциями, такими как сложение и вычитание. Литеральный символ представляется внутри пары одиночных кавычек. Все видимые символы ASCII могут быть непосредственно введены внутри кавычек, например: 'я', 'г' и '@'. Для символов, которые невозможно ввести непосредственно, существуют несколько escape-последовательностей, позволяющих ввести нужный символ. Имеется также механизм для прямого ввода значения символа в восьмеричном или шестнадцатеричном представлении. Для восьмеричной формы используют обратный слэш (\), за которым следует число из трех цифр. Для шестнадцатеричного представления нужно ввести обратный слэш с символом и (\и), затем четыре шестнадцатеричных цифры. В табл. 3 представлены символьные escape-последовательности Табл. 3
|