Скачиваний:
35
Добавлен:
05.07.2021
Размер:
2.64 Mб
Скачать

ЛАБОРАТОРНАЯ РАБОТА №7 ПО ПРЕДМЕТУ «ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ». ЧАСТЬ 2.

«КРАТКИЙ ОБЗОР ЯЗЫКА JAVA. ВВЕДЕНИЕ В ООП В

JAVA»

Цель работы: изучить ряд основных языковых средств языка Java.

Объектно-ориентированное программирование (ООП) составляет основу языка Java. Каждая программа нa Java является объектноориентированной. В каждой программе нa Java применяются принципы инкапсуляции, наследования и полиморфизма.

Рассмотрим несколько практических примеров программ, написанных на языке Java. Начнем с компиляции и запуска короткого примера программы.

/*Пример №1. Это простая программа на Java. Необходимо присвоить исходному файлу имя "Example.java"*/

class Example{

//Эта программа начинается с вызова метода main() public static void main(String args[] ){

System.out.println("Simple Java example.");

}}

Здесь и далее используется стандартный комплект разработчика Java SE 16 Developer's Kit(Java SE 16), который вышел в марте 2021,

предоставляемый компанией Oracle.

НАПИСАНИЕ КОДА ПРОГРАММЫ

Для большинства языков программирования имя файла, который содержит исходный код программы, не имеет значения. Но в Java исходному файлу должно быть присвоено имя главного класса. В данном примере исходному файлу должно быть присвоено Example.java. Т.к. в Java

исходный файл официально является единицей компиляции. Исходный файл также представляет собой текстовый файл, содержащий определения

1

одного или нескольких классов. Компилятор Java требует, чтобы исходный файл имел расширение .java.

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

класса должно совпадать с именем файла, содержащего исходный код программы. Кроме того, имя файла должно соответствовать имени публичного класса, включая строчные и прописные буквы (в Java учитывается регистр символов). Соглашение о строгом соответствии имен файлов и классов значительно упрощает сопровождение и организацию программ.

КОМПИЛЯЦИЯ ПРОГРАММЫ

Чтобы скомпилировать программу Example, запустите компилятор (javac), указав имя исходного файла в командной строке следующим образом:

Компилятор javac создаст файл Example.class, содержащий версию байт-кода.

Байт-код Java является промежуточным представлением программы, содержащим инструкции, которые будет выполнять виртуальная машина JVМ. Следовательно, компилятор javac выдает результат, который не является непосредственно исполняемым кодом.

Чтобы выполнить программу, следует воспользоваться загрузчиком приложений jаvа. Ему нужно передать имя класса Example в качестве аргумента командной строки, как показано ниже.

Выполнение данной программы приведет к выводу на экран строки

«Simple Java example.».

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

2

расширением .class. И если он найдет такой файл, то выполнит код, содержащийся в указанном классе.

АНАЛИЗ КОДА ПРОГРАММЫ

Хотя сама программа Example.java небольшая, с ней связано несколько важных особенностей, характерных для всех программ на Java. Начинается эта программа со следующих строк:

/*Пример №1. Это простая программа на Java. Необходимо присвоить исходному файлу имя "Example.java"*/

Эти строки кода содержат комментарий. Подобно большинству других языков программирования, Java позволяет вставлять примечания к коду программы в ее исходный файл. Компилятор игнорирует содержимое комментариев. Комментарии описывают или поясняют действия программы. В данном случае комментарий описывает программу и напоминает, что исходному файлу должно быть присвоено имя Example.java. В реальных прикладных программах комментарии служат главным образом для пояснения работы отдельных частей программы или действий, выполняемых отдельными языковыми средствами.

В Java поддерживаются три вида комментариев: однострочные, многострочные, документационные. Комментарий, приведенный в программе, называется многострочным. Этот вид комментариев должен начинаться с символов /* и оканчиваться символами */.

Следующая строка программы выглядит следующим образом:

class Example {

В этой строке кода ключевое слово class служит для объявления вновь определяемого класса, а слово Example – в качестве идентификатора, обозначающего имя класса. Все определение класса, в том числе его элементов, должно располагаться между открывающей({) и закрывающей(})

фигурными скобками. В среде Java все действия программы выполняются только в пределах класса. В этом и состоит одна из причин, по которым все программы на Java являются объектно-ориентированными.

Следующая строка кода данной программы содержит однострочный комментарий:

//Эта программа начинается с вызова метода main()

Это второй вид комментариев называется однострочным комментарием и начинается с символов //, а завершается символом конца строки. Как правило, программисты пользуются многострочными

3

комментариями для вставки длинных примечаний, а однострочными – для коротких, построчных описаний.

Специальным образом оформленные комментарии (так называемые документирующие комментарии) используются для автоматического создания документации к библиотекам функций или классов. Для этого используются генератор документации javadoc. Документирующий комментарий должен находиться перед документируемым элементом. Первым символом в комментарии (и в начале каждой строки комментария) должен быть *. Блоки разделяются пустыми строками. Документирующий комментарий начинается с символов /** и оканчивается символами */. Пример документирующего комментария приведен ниже.

/**

*Имя или краткое описание объекта

*Развернутое описание

*

*@имя_дескриптора значение

*@return тип_данных

*/

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

Строка кода:

public static void main(String args []) {

Эта строка кода содержит объявление метода main(). Выполнение всех прикладных программ на Java начинается с вызова метода main(). Ключевое слово public является модификатором доступа, который дает программисту возможность управлять видимостью элементов класса. Когда элементу класса предшествует ключевое слово public, то этот элемент доступен из кода за пределами класса. Совершенно противоположное обозначает ключевое слово private – оно не разрешает доступ к элементу класса из кода за пределами класса.

В данном случае метод main() должен быть определен как public, поскольку при запуске программы он должен вызываться из кода за пределами его класса. Ключевое слово static позволяет вызывать метод main() без получения экземпляра класса. Это необходимо потому, что метод main() вызывается виртуальной машиной JVМ перед созданием любых объектов. А ключевое слово void сообщает, что метод main() не возвращает никаких значений.

4

Имя Main не равнозначно имени main. Компилятор Java скомпилирует классы, в которых отсутствует метод main(), но загрузчик приложений не сможет выполнить код таких классов. Так, если вместо имени main ввести имя Main, то компилятор скомпилирует программу, но загрузчик приложений Java выдаст сообщение об ошибке, поскольку ему не удалось обнаружить метод main().

Для передачи любой информации, требующейся методу, служат переменные, указываемые в скобках вслед за именем метода. Эти переменные называются параметрами. Если параметры не требуются методу, то указываются пустые скобки. У метода main() имеется единственный параметр. Так, в выражении String args[] объявляется параметр args, обозначающий массив экземпляров класса String. В объектах типа String хранятся символьные строки. В данном случае параметр args принимает любые аргументы командной строки, присутствующие во время выполнения программы. В данной программе эта информация, вводимая из командной строки, не используется.

Последним элементом в рассматриваемой здесь строке кода оказывается символ открывающей фигурной скобки({). Он обозначает начало тела метода main(). Весь код, составляющий тело метода, должен располагаться между открывающей и закрывающей фигурными скобками в определении этого метода.

Метод main() служит началом программы. Сложная программа может включать в себя десятки классов, но только один из них должен содержать метод main(), чтобы программу можно было запустить на выполнение.

В строке кода:

System.out.println("Simple Java example.");

на экран выводится текстовая строка "Simple Java example." с последующим переходом на новую строку. На самом деле вывод текста на экран выполняется встроенным методом println(). В данном случае метод println() отображает переданную ему текстовую строку. С помощью этого метода можно выводить и другие типы данных. Анализируемая здесь строка кода начинается с обозначения стандартного потока вывода System.out. System обозначает имя класса класс, предоставляющий доступ к системе, а out – поток вывода, связанный с консолью.

Обратите внимание на то, что оператор, в котором вызывается метод println(), завершается точкой с запятой. В языке Java все операторы должны оканчиваться этим символом. Причина отсутствия точки с запятой в конце остальных строк кода программы состоит в том, что формально они не являются операторами. Первый символ } завершает метод main(), а последний символ } – определение класса Example.

5

ИСПОЛЬЗОВАНИЕ ПЕРЕМЕННЫХ Переменная – это именованная ячейка памяти, которой может

быть присвоено значение в программе. Во время выполнения программы значение переменной может изменяться. В следующем примере программы демонстрируются способы объявления переменной и присвоения ей значения. Как следует из комментариев в начале программы, ее исходному файлу следует присвоить имя Example2.java.

/*Пример №2. Присвоить исходному файлу имя "Example2.java"*/ class Example2 {

public static void main(String args[]) {

int num; //объявляется переменная с именем num

num = 100; //переменной num присваивается значение 100 System.out.println("Этo переменная num: " + num);

num = num * 2;

System.out.print("Знaчeниe переменной num*2 равно "); System.out.println(num);

}}

Результаты работы программы:

В первой строке метода main() объявляется целочисленная переменная num. В Java требуется, чтобы переменные были объявлены до их применения. Ниже приведена общая форма объявления переменных.

тип имя_переменной;

В этом объявлении тип обозначает конкретный тип объявляемой переменной, а имя_переменной – имя переменной. Если требуется объявить несколько переменных одного типа, то это можно сделать в виде разделенного запятыми списка имен переменных. В Java определен целый ряд типов данных, в том числе целочисленный, символьный и числовой с плавающей точкой. Ключевое слово int обозначает целочисленный тип. В приведенной ниже строке кода из рассматриваемого здесь примера программы переменной num присваивается значение 100. В Java операция присваивания обозначается одиночным знаком равенства.

num = 100; //переменной num присваивается значение 100

В следующей строке кода выводится на экран значение переменной num, которому предшествует текстовая строка "Это переменная num:":

System.out.println("Этo переменная num:" + num);

6

Вэтом операторе знак + присоединяет значения переменной num в конце предшествующей ему текстовой строки, а затем выводится результирующая строка. На самом деле значение переменной num сначала преобразуется из целочисленного в строковый эквивалент, а затем объединяется с предшествующей строкой. С помощью операции + в одном вызове метода println() можно объединить нужное количество символьных строк.

Вследующей строке кода из рассматриваемого здесь примера программы переменной num присваивается хранящееся в ней значение, умноженное на 2. Как и в большинстве других языков программирования, в Java знак * обозначает арифметическую операцию умножения. После выполнения этой строки кода переменная num будет содержать значение 200.

System.out.print("Знaчeниe переменной num * 2 равно "); System.out.println(num);

В этих строках метод print() вызывается для вывода текстовой строки "Значение переменной num * 2 равно". После этой строки не следует символ новой строки. Таким образом, следующий результат будет выводиться в той же самой строке. Метод print() действует аналогично методу println(), за исключением того, что после каждого вызова он не выводит символ новой строки. Методы print() и println() могут служить для вывода значений любых встроенных в Java типов данных.

УСЛОВНЫЙ ОПЕРАТОР IF

Оператор if действует подобно условному оператору в любом другом языке программирования. Более того, его синтаксис такой же, как и условных операторов if в языках С, С++ и С#. Простейшая форма этого оператора выглядит следующим образом:

if(условие) оператор;

где условие обозначает логическое выражение. Если условие истинно, то оператор выполняется. А если условие ложно, то оператор пропускается. Рассмотрим следующую строку кода:

if(num <100) System.out.println("num меньше 100");

Если в данной строке кода переменная num содержит значение меньше 100, то условное выражение истинно и вызывается метод println(). А если переменная num содержит значение, большее или равное 100, то вызов метода println() пропускается.

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

7

проверка на равенство обозначается двойным знаком равенства(==). Ниже приведен пример программы, демонстрирующий применение условного оператора if.

//Пример №3. Использование операторов сравнения class IfSample {

public static void main(String args[]) { int x, y;

x = 10; y = 20;

if(x < y) {System.out.println("x меньше у");} x = x * 2;

if(x == y) {System.out.println("x теперь равно у");} x = x * 2;

if(x > y) {System.out.println("x теперь больше у");} //этот оператор не будет ничего выводить

if(x == y) {System.out.println("вы не увидите этого");}

}}

Эта программа выводит следующий результат:

Обратите внимание на еще одну особенность данного примера программы. В строке кода

int х, у;

объявляются две переменные: х и у. Для этого используется список, разделяемый запятыми.

ОПЕРАТОР ЦИКЛА FOR

В Java поддерживаются разнообразные операторы цикла. Ниже приведена простейшая форма оператора for.

for(инициализация; условие; итерация) оператор;

В форме инициализация обозначает начальное значение переменной управления циклом, а условие – логическое выражение для проверки значения переменной управления циклом. Если результат проверки условия истинен, то выполнение цикла for продолжается. А если результат этой проверки ложен, то выполнение цикла прекращается. Выражение итерация определяет порядок изменения переменной управления циклом на каждом его шаге. В приведенном ниже примере программы демонстрируется применение оператора цикла for.

8

/*Пример №4. Демонстрация применения цикла for. Присвоить исходному файлу имя ForTest.java*/

class ForTest {

public static void main(String args[]) { int x;

for(x = 0; x < 10; x = x + 1) { System.out.println("Знaчeниe х:" + x);

}

}}

Эта программа выводит следующий результат:

В данном примере х служит переменной управления циклом. В инициализирующей части цикла for ей присваивается начальное нулевое значение. В начале каждого шага цикла, включая и первый, выполняется проверка условия х <10. Если результат этой проверки истинен, то в программе вызывается метод println(), а затем выполняется итерационная часть цикла for. Процесс продолжается до тех пор, пока результат проверки условия не окажется ложным.

Следует заметить, что в программах, профессионально написанных на Java, итерационная часть цикла почти никогда не встречается в том виде, в каком она представлена в данном примере. Иными словами, операция вроде следующей в таких программах встречаются крайне редко:

х = х + 1;

Дело в том, что в Java предоставляется специальная, более эффективная операция инкремента ++ (два знака "плюс" подряд). Операция инкремента увеличивает значение операнда на единицу. Используя эту операцию, предшествующее выражение можно переписать так:

х++;

ВJava предоставляется также операция декремента --, которая уменьшает значение операнда на единицу.

ИСПОЛЬЗОВАНИЕ БЛОКОВ КОДА

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

9

местах, где и отдельные операторы. Рассмотрим следующий условный оператор if:

if(x<у) { //начало блока х = у; у = 0;

}//конец блока

Если значение переменной х в данном примере меньше у, то выполняются оба оператора, находящиеся в блоке кода. Оба эти оператора образуют логическую единицу, и поэтому выполнение одного из них невозможно без выполнения другого в блоке кода. Таким образом, всякий раз, когда требуется логически связать два или более оператора, создается блок кода.

В следующей программе блок кода служит в качестве адресата для оператора цикла for:

/*Пример №5. Применение блока кода. Присвоить исходному файлу имя "BlockTest.java"*/

public class BlockTest {

public static void main(String args []) { int x, у;

у = 20; //адресатом этого оператора цикла служит блок кода

for( x = 0; x<10; x++) { System.out.println("Знaчeниe х: " + x); System.out.println("Знaчeниe у: " + у); у = у - 2;

}}}

Эта программа выводит следующий результат:

10

Соседние файлы в папке методички для лаб