Facebook google+ e-mail
Учимся программировать на JAVA
Практикум по программированию на языке Java

Занятие 4. Начинаем вникать (начало)

На прошлом занятии мы создали, откомпилировали и запустили на исполнение очень простую программу на Java. Однако, рассмотрение того, как эта программа «устроена» мы оставили на потом. Сейчас мы этим и займемся.

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

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

Для начала познакомимся с тем, что такое класс и экземпляр класса. Воспользуемся аналогией и представим себе себе чертеж какого-нибудь сложного механизма, скажем, двигателя автомобиля. Еще один пример: лекало в швейном производстве, по которому изготавливается партия костюмов.

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

Очевидно, что сам по себе чертеж (лекало) – это не двигатель (и не костюм), а всего лишь его описание. А вот двигатели (костюмы), изготовленные по заданному чертежу (лекалу) – уже вполне реальные объекты и они-то и называются экземплярами класса.

Напомним исходный код нашей первой программы (для удобства ссылок строки пронумерованы):

1. public class MoneyForNothing {

2.     public static void main (String [] args) {

3.         System.out.println ("Java programming is cool!!!");

4.     }

5. }

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

Поля – это данные, описывающие состояние объекта (объекты и экземпляры класса – это практически синонимы и мы будем использовать их как равноправные понятия). В каждый отдельный момент времени (время в программировании рассматривается как дискретная величина, изменяющаяся порциями) поля имеют какие-то значения и задача программиста состоит в том, чтобы написать такую программу, которая достигает некоторого заданного состояния, путем изменения значений полей. Это изменение производится посредством вызовов методов.

В нашем первом примере мы объявляем (описываем, вводим) класс (на это указывает слово «class») с названием «MoneyForNothing». Слово «class» - пример зарезервированного или ключевого слова. Класс имеет признак «public» - тоже, кстати, ключевое слово Java; этот признак регламентирует видимость этого класса, т.е., грубо говоря, кому можно его показывать или кому этот класс доступен. Здесь мы не будем задерживаться, хотя не трудно догадаться, что этот класс является публичным, т.е. он виден всем. Кстати, имя файла с исходным кодом класса должно полностью (с точностью до регистра) совпадать с именем класса. В одном файле можно описывать сколько угодно классов (хотя лучше так не делать и каждый класс размещать в отдельном файле), но только один из них должнен быть объявлен как public. Таковы требования Java и их надо принимать такими, как они есть.

Тело класса заключается в фигурные скобки (стр. 1 и 5).

Внутри класса определен один-единственный метод с именем «main» и целой «гирляндой» признаков. Метод – это программый код, выполняющий какую-либо последовательность действий над полями; напомним, что методы необходимы для изменения состояния объектов, путем воздействия на его поля. Этот метод также является публичным (на что указывает «public»). Метод может возвращать некоторое значение, а может ничего не возвращать: именно на этот случай предусмотрено ключевое слово void (которое можно перевести как «ничего» или «пустое значение»). Можно было бы подумать, что метод, ничего не возвращающий практически бесполезен, но это не так и в дальнейшем вы увидите множество примеров таких методов.

О ключевом слове «static», а также о параметрах методов мы поговорим вскоре, а пока заметим, что тело метода так же как и тело класса заключено в фигурные скобки (стр.2 и 4).

Внутри тела метода производится вывод (печать) на консоль строки «Java programming is cool!!!» (стр.3). Этот вывод не такой прямой, как во многих других языках программирования (где, например, используются конструкции print, write, put и им подобные). Возможности вывода в Java не являются частью самого языка, а «спрятаны» в одной из его библиотек. А поскольку все программы (и библиотеки, конечно же) в Java должны быть описаны в виде классов, то и вывод получается не столь прямолинейным, как можно было бы ожидать. Фактически в строке System.out.println происходит обращение к методу println, принадлежащего полю out, принадлежащего классу System (помните детское стихотворение «Дом, который построил Джек» с его многоуровневой вложенностью? Здесь мы наблюдаем нечто подобное). Все это может показаться «китайской грамотой», но не волнуйтесь – на самом деле все логично и надо только постепенно привыкнуть.

Тут, как нельзя кстати, оказывается полезной документация по Java. Фрагмент этой документации, относящийся к выводу строки о котором мы только что говорили, выглядит так:

Программируем на Java. Первые шаги. Вникаем

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

Нам осталось разобраться с ключевым словом static и параметрами метода main. Начнем с последнего.

Параметры – это список значений, разделенных запятыми, передаваемых в метод для последующей обработки. Тем, кто еще помнит математику, вызов метода с параметрами напоминает запись функции, такой, например как sin (x) или √x. Последний пример (т.е. √x) - это функция квадратного корня, а x - параметр (неотрицательное число, не обязательно целое). Для x = 4, функция вернет 2, для x = 1.44 функция вернет 1.2 и т.д. В Java метод может получать 0, 1, 2 и любое другое число параметров (скобки, окружающие список параметров, опускать нельзя даже если ни один параметр не передается). В нашей программе в качестве (единственного) параметра выступает массив строковых значений; эти значения являются ни чем иным, как дополнительными данными при запуске программы на исполнение, например, так:

java MoneyForNothing список_параметров

Здесь «список_параметров» - необязательные дополнительные данные (часто их называют параметрами командной строки).

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

Дословный перевод этого слова – «статический» - мало о чем говорит. Назначение этого ключевого слова – особенным образом выделить поля и методы: поля и методы, снабженные признаком static существуют даже тогда, когда нет ни одного экземпляра класса.

Держим пари, что прочтя эту фразу вы ничего не поняли. Но все, на самом деле, логично. Для этого давайте присмотримся, что происходит, когда мы запускаем программу на исполнение (напоминаем, что для этого надо дать команду java MoneyForNothing).

Исполняющая среда Java (т.н. Java Virtual Machine или, короче, JVM) считывает инструкции из файла MoneyForNothing.class, созданного ранее компилятором. Ну хорошо, инструкции прочитаны, а дальше-то что, как и откуда начать выполнение?

Помните аналогию между классом и чертежом? Сейчас в памяти компьютера мы имеем только чертеж и ничего более: ни одного экземпляра класса (или иначе – ни одного объекта) еще не создано. Характерной особенностью ключевого слова static является то, что поля и методы, помеченные как static существуют даже если больше ничего не было создавалось! Т.е. метод main – это реально готовый к исполнению метод, а так как ничего другого в момент запуска программы еще нет, то JVM ничего не остается, как исполнить именно его, т.е. метод main.

Не случайно, метод main программисты называют «точкой входа», т.е. точкой с которой начинается выполнение программы.

Тем, кто программировал на таких языках как C или C++ метод main хорошо знаком. Разработчики Java в далеком уже 1995 году взяли в качестве образца именно эти языки программирования (но не повторили их, а пошли своим путем).

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

 

Занятие 3. Приступаем ...

 

Занятие 5. Начинаем вникать (окончание)

 

Автор: Alex Tuesday

 

Все уроки ... 27.01.2014