Энциклопедия мобильной связи

Основы и синтаксис языка Java.

Java - ЯП от компании Sun microsystems. Изначально разрабатывался как язык для программирования электронных устройств, но позже стал использоваться для написания приложений серверного ПО. Программы на Java - кроссплатформенные, то есть способны работать на любых операционных системах.

Основы программирования на языке Java

Java как язык с поддержкой объектного ориентирования отвечает основным принципам ООП:

  • наследование;
  • полиморфизм;
  • инкапсуляция.

В центре «Джава», как и в других ООЯ, - объект и класс с конструкторами и свойствами. Начинать обучение языку программирования Java лучше не с официальных ресурсов, а с пособий для новичков. В таких манулах подробно описываются возможности, предоставляются примеры кода. В книгах наподобие "Язык программирования Java для начинающих” подробно разъясняются основные принципы и особенности названного языка.

Особенности

Код на языке программирования Java транслируется в байт-код, затем выполняется на виртуальной машине JVM. Преобразование в байт-код осуществляется на Javac, Jikes, Espresso, GCJ. Существуют такие компиляторы, которые транслируют язык «Си» в Java байт-код. Таким образом, приложение на «Си» может работать на любых платформах.

Синтаксис «Джава» характеризуется следующим:

  1. Имена классов должны начинаться с большой буквы. Если название состоит из нескольких слов, то второе должно начинаться с верхнего регистра.
  2. Если для формирования метода используется несколько слов, то второе из них должно начинаться с большой буквы.
  3. Обработка начинается с метода main() - он является частью каждой программы.

Типы

Язык программирования Java имеет 8 примитивных типов. Они представлены ниже.

  • Boolean - логический тип, принимает всего два значения true и false.
  • Byte - наименьший целочисленный тип размером 1 байт. Он используются при работе с или файлов, необработанными двоичными данными. Имеет диапазон от -128 до 127.
  • Short имеет диапазон от -32768 до 32767, используется для представления чисел. Размер переменных этого типа - 2 байта.
  • Int тоже обозначает числа, но его размер - 4 байта. Он чаще остальных используется для работы с целочисленными данными, а byte и short иногда повышаются до int.
  • Long используются для больших целых чисел. Возможные значения находятся в диапазоне от -9223372036854775808 до 9223372036854775807.
  • Float и double применяются для обозначения дробных. Их разница в том, что float удобен, когда не требуется высокая точность в дробной части числа.
  • Double выводит на экран все знаки после разделителя «.», а float - только первые.
  • String наиболее используемый примитивный тип, с помощью которого задаются строки.

Классы и объекты

Важную роль в книге «Изучение языка программирования Java для начинающих» занимают классы и объекты.

Класс определяет шаблон для объекта, у него обязательно есть атрибуты и методы. Для его создания применяют ключевое слово Class. Если он создается в отдельном файле, то имя класса и файла должны быть одинаковыми. Само же название состоит из двух частей: имени и расширения.Java.

В «Джава» можно создавать подкласс, который будет наследовать методы родительского. Для этого используется слово extends:

  • class имя_класса extends имя_суперкласса {};

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

  • public class Class{ public Class(){ } public Class(String name){ }}

Имя конструктора совпадает с именем класса, по умолчанию у него есть всего один параметр:

  • public Puppy(String name)

Object создается из класса с помощью оператора new():

  • Point р = new Point()

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

    Point р = new Point()

    class TwoPoints {

    public static void main(String args) {

    Point p1 = new Point();

    Point p2 = new Point();

    Объектные переменные и объекты - совершенно разные сущности. Object variables являются ссылками. Они могут указывать на любые переменные непримитивного типа. В отличие от C++ их типовое преобразование жестко регламентировано.

    Поля и методы

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

    • classname.variable

    Можно задать статические поля с помощью ключевого слова static. Такие поля являются единственным способом хранить глобальные переменные. Это связано с тем, что в «Джава» попросту нет global variables.

    Реализована возможность импорта переменных для получения доступа из других пакетов:

    • import static classname;

    Метод - подпрограмма для тех классов, в которых объявлена. Описывается на том же уровне, что и переменные. Задается в виде функции и может иметь любой тип, в том числе void:

    • class Point { int х, у;

      void init(int a, int b) {

    В примере выше класс Point имеет integer x и y, метод init(). Доступ к методам, как и к переменным, осуществляется путем использования оператора «.»:

    • Point.init();

    Свойство init ничего не возвращает, поэтому имеет тип void.

    Переменные

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

    Одновременно может быть объявлено несколько переменных. Для их перечисления используется запятая:

    • int a, b, c;

    Инициализации осуществляется после или во время объявления:

    int a = 10, b = 10;

    Существует несколько типов:

    • local variables (локальные);
    • instance variables (переменные экземпляра);
    • static variables (статические).

    Local variables объявляют в методах и конструкторах, они создаются во время запуска последних и уничтожаются после завершения. Для них запрещено указывать access modifiers и управлять уровнем доступности. Они не видимы за пределами объявленного блока. В Java переменные не имеют начального значения, поэтому оно в обязательном порядке присваивается перед первым использованием.

    Instance variables должны быть объявлены внутри класса. Они используются как методы, но получить к ним доступ можно только после создания объекта. Переменная разрушается, когда уничтожается объект. У экземплярных переменных, в отличе от локальных, существуют значения по умолчанию:

    • числа - 0;
    • логика - false;
    • ссылки - null.

    Static variables называются переменными класса. Их имена начинаются с символа в верхнем регистре, конкретизируются модификатором static. Они используются как константы, соответственно, к ним прибавляется один спецификатор из списка:

    • final;
    • private;
    • public.

    Запускаются в начале программы, уничтожаются после остановки выполнения. Так же, как переменные экземпляра, имеют стандартные значения, которые присваиваются пустым переменным. У чисел - значение 0, булевые переменные имеют значение false, ссылки на объект изначально имеют null. Статические переменные вызываются в следующем виде:

    • ClassName.VariableName.

    Сборщик мусора

    В самоучителе "Язык программирования Java для новичков" раздел автоматического сборщика мусора является наиболее интересным.

    В Java, в отличие от языка "Си", невозможно ручное удаление объекта из памяти. Для этого реализован метод автоматического удаления - сборщик мусора. При традиционном удалении через null происходит лишь устранение ссылки на объект, а сам объект удаляется. Существуют методы принудительной сборки мусора, хотя они не рекомендованы для использования в обычной работе.

    Модуль автоматического удаления неиспользуемых объектов работает в фоновом режиме, запускается при неактивности программы. Для очистки объектов из памяти программа останавливается, после освобождения памяти прерваная операция возобновляется.

    Модификаторы

    Различают разные типы модификаторов. Кроме тех, которые определяют способ доступа, существует модификаторы методов, переменных, класса. Методы, объявленные как private, доступны только в объявленном классе. Такие переменные не могут использоваться в других классах и функциях. Public открывает доступ для любого класса. Если нужно получить Public class из другого пакета, то его следует предварительно импортировать.

    Модификатор protected похож по действую на public - открывает доступ к полям класса. В обоих случаях переменные могут использоваться в других классах. Но паблик-модификатор доступен абсолютно для всех, а протектед-модификатор - только для наследуемых классов.

    Модификатор, который применяется при создании методов, - static. Это означает, что созданный метод существует независимо от экземпляров класса. Модификатор Final не управляет доступом, а указывает на невозможность дальнейшего манипулирования значениями объекта. Он запрещает изменение того элемента, для которого указан.

    Final для полей делает невозможным изменение первого значения переменной:

      public static void mthod(String args) {

      final int Name = 1;

      int Name = 2;// выдаст ошибку

    Переменные с модификатором final являются константами. Их принято писать только заглавными буквами. CamelStyle и другие способы не работают.

    Final для методов указывает запрет на изменение метода в наследуемом классе:

      final void myMethod() {

      System.out.printIn(“Hello world”);

    Final для классов означает, что нельзя создать наследников класса:

      final public class Class {

    Abstract - модификатор создания абстрактных классов. Любой абстрактный класс и абстрактные методы предназначены для дальнейшего расширения в других классах и блоках. Модификатор transient указывает виртуальной машине не обрабатывать заданную переменную. В этом случае та просто не сохранится. Например, transient int Name = 100 не сохранится, а int b сохранится.

    Платформы и версии

    Существующие семейства языка программирования Java:

    1. SE - является основным, широко используется для создания пользовательских приложений для индивидуального использования.
    2. EE - набор спецификаций для разработки ПО уровня предприятия. Содержит больше возможностей, чем SE, поэтому используется в коммерческих масштабах на крупных и средних предприятиях.
    3. ME - предназначены для устройств с ограниченной мощностью и памятью, у них, как правило, малый размер дисплея. Такими устройствами являются смартфоны и КПК, ресиверы цифрового телевидения.
    4. Card - предназначена для устройств с крайне ограниченными вычислительными ресурсами, например таких, как смарт-карты, sim-карты, банкоматы. Для этих целей был изменен байт-код, требования к платформе, составляющее библиотек.

    Применение

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

    Активно используется для приложений под Android. Программа компилируется в нестандартный байт-код, выполняется на виртуальной машине ART. Для компиляции применяется Android Studio. Это IDE от компании «Гугл» является официальной для разработки под ОС Android.

    Microsoft разработала собственную реализацию виртуальной машины Java MSJVM. Она имела такие отличия, которые ломали основополагающую концепцию кроссплатформенности - отсутствовала поддержка некоторых технологий и методов, имелись нестандартные расширения, работающие только на платформе Windows. Microsoft выпустил язык J#, синтаксис и работа в целом которого очень напоминает Java. Он не соответствовал официальной спецификации и в итоге был исключен из стандартного инструментария разработчика Microsoft Visual Studio.

    Язык программирования Java и среда

    Разработка программного обеспечения осуществляется в таких IDE:

    1. NetBeans IDE.
    2. Eclipse IDE.
    3. IntelliJ IDEA.
    4. JDeveloper.
    5. Java для iOS.
    6. Geany.

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

    Удобно писать код на языке программирования Java в среде Netbeans и Eclipse IDE. Это свободные интегрированные среды для разработки, они подходят под все платформы «Джава». Также используются для программирования на Python, PHP, JavaScript, C++.

    IntelliJ IDE от компании Jetbrains распространяется в двух вариантах: бесплатном и коммерческом. Поддерживает написание кода на многих языках программирования, существуют сторонние плагины от разработчиков, в которых реализовано еще большее количество ЯП.

    JDeveloper - еще одна разработка от компании Oracle. Полностью написана на Java, поэтому работает на всех операционных системах.

Назначение, особенности и преимущества Eclipse

Eclipse - это расширяемая IDE (интегрированная среда разработки). IDE - удобно организованный набор инструментов, необходимых для работы над программным проектом.

Eclipse - универсальная платформа, которая может использоваться для разработки приложений на любом языке программирования (например, можно использовать язык Python после установки подключения Pydev (), но изначально «родным» для Eclipse является Java (на которой, кстати, сам Eclipse и написан).

Наиболее важными особенностями Eclipse являются:

  1. Кроссплатформенность. Eclipse выполняется на всех распространенных платформах: Windows, Linux и MacOS X. Еще важнее то, что его функции одинаковы на каждой из этих платформ.
  2. Универсальность и расширяемость. В Eclipse реализована возможность использова­ния различных инструментов, разработанных сторонними программистами.
  3. Открытость и бесплатность. Eclipse является OpenSource-проектом (т.е. его исходные коды доступны любому желающему и кто угодно может присоединиться к разработке этого инструмента). Eclipse имеет активное сообщество, постоянно работающее над улучшением программы и расширением ее возможностей.

Рабочая среда Eclipse

Первое, что вы видите при запуске Eclipse – диалоговое окно, позволяющее выбрать место, где будет располагаться рабочее пространство. Рабочее пространство – каталог, в ко­тором будет сохраняться ваша работа.

После выбора рабочего пространства, на экране появится начальная страница, с предложениями посмотреть учебники, примеры и т.д. Выберите Workbench и вы перейдете в окно рабочей среды (Workbench), в котором и будет проходить ваша дальнейшая работа.

Основными составляющими рабочей среды являются представления (views), редакто­ры (editors) и проекции или перспективы (perspectives).

Представление – это небольшой раздел внутри рабочей среды, который служит для навигации по неко­торой категории объектов (такой, как ресурсы или пакеты), открытия редакторов, отображения свойств активных редакторов. Например, представ­ление Navigator показывает проекты и дру­гие ресурсы, а представление Bookmarks отображает все закладки в Workbench вме­сте с именами файлов, с которыми эти за­кладки связаны. На рисунке изображен пра­вый верхний угол ра­бочей среды с ак­тивным представление Outline.

Все измене­ния, сде­ланные в представлениях, немедлен­но сохраняют­ся.

Другой тип визуальных компонентов Workbench – редакторы , которые используются для просмотра и редактирования некоторого ре­сурса (например, программного кода). При выборе ресурса появляется подходящий редактор. Например, откройте любой текстовый до­кумент (с расширением.txt) командой File --> Open File... и вы увидите встроенный редактор простого неформатируемого текста. Если что-либо набрать в этом редакторе, на его вкладке, где написано название файла, появится звездочка. Она означает, что редактор содержит не сохраненные изменения. Они сохранятся, если нажать Ctrl + S или выбрать команду File --> Save .

Существует множество полезных представлений, которые добавляются в окно рабочей среды командой Window --> Show View . Однако вместо того, чтобы добавлять их по одному, удобнее бывает переключать проекцию (perspective). Проекция (или перспектива ) – это набор представлений и редакторов, специально подобранный для выполнения некоторой задачи. После запуска в Eclipse открывается перспектива Java, настроенная собственно на написание программы. Для отладки программы часто используется проекция Debug. Переключить проекцию можно командой Window --> Open Perspective . На­звание текущей проекции отображается в правом верхнем углу рабочей среды (см. рисунок).

Первая программа на Java

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

Для создания проекта выполните команду File --> New --> Project . В появившемся окне выберите Java Project и нажмите «Далее». Укажите имя своего проекта. Обратите внимание, что в директории, указанной вами как рабочее пространство, будет создана папка с именем вашего проекта (если, конечно, не изменить настройки в этом окне, чего для первого раза мы делать не будем). Нажмите кнопку «Готово».

Теперь в представлении PackageExplorer в левой части рабочей среды присутствует ваш проект. В любой момент его можно удалить, щелкнув по его названию правой кнопкой мыши и выбрав Delete . После этого Eclipse спросит, уничтожить ли заодно папку с файлами проекта (при необходимости можно и уничтожить).

Если вы не удалили проект, к нему можно добавить файлы и папки с помощью команд контекстного меню New --> File и New --> Folder соответственно. Если проект большой, то ему необходима структура вложенных папок. Но в случае Java-проекта все несколько иначе. Дело в том, что фрагменты Java-программы сгруппированы в пакеты , а для каждого пакета создается отдельная папка. Пакет создается командой New --> Package . Для пакета тоже надо придумать имя. В результате в папке проекта будет создана новая папка с этим именем. Можете проверить.

Просматривать ресурсы проекта может быть удобнее с помощью представления Navigator. Откройте его командой Window --> Show View . Вы увидите, что кроме директо­рий проекта и пакета Eclipse создал два вспомогательных файла.classpath и.project. Они лег­ко откроются в редакторе, но особого интереса для нас они сейчас не представляют.

Программа на Java всегда состоит из одного или нескольких классов . Создать класс можно командой New --> Class в контекстном меню представления Navigator (или Package Explorer, не имеет значения). При создании класса необходимо выбрать пакет, к которому он будет относиться (выберите только что созданный вами пакет) и придумать ему имя. Имена классов принято начинать с прописной буквы. Если не соблюсти это правило хорошего тона, Eclipse выдаст предупреждение, но ничего страшного не произойдет.

Для наших целей полезно поставить галочку в разделе «Какие методы вы хотите со­здать в своем классе?» напротив опции public static void main(String args) . В результате в теле класса будет сгенерирован метод (функция) main() . Java требует, чтобы хотя бы в одном из классов программы существовал метод с таким заголовком. Именно он и будет выполнен при старте программы.

В результате наших действий в папке пакета будет создан файл с именем нашего класса и расширением.java. Eclipse откроет редактор кода, в котором отобразится содержимое этого файла. Оно будет примерно следующим (имена пакета и класса, конечно, могут отличаться):

package mainPack; public class MyClass { /** * @param args */ public static void main(String args) { } }

Команды, составляющие тело функции, можно написать вместо автоматически сгене­рированного комментария // TODO Auto-generated method stub . Мы напишем только одну команду, которая будет выводить на экран классическую строку «Hello, world!»:

System.out.println("Hello, world!" );

Осталось программу запустить. Для этого выполним команду Run --> Run и получим диалоговое окно с нетривиальными настройками запуска. В левой части этого окна надо вы­брать Java Application (приложение Java). Немного подумав, Eclipse найдет наш класс, содер­жащий метод main() и предложит начать запуск программы именно с него (в правой части окна на вкладке Main должны появиться названия нашего проекта и нашего класса). Помимо этого вниманию программиста предлагается еще несколько закладок. Например, на второй из них – Arguments – предлагается ввести параметры командной строки (если программа рас­считана на вызов из командной строки с параметрами). Для нашей простой программы ниче­го дополнительно указывать не нужно. Просто нажмите кнопку Run .

В результате работы программы осуществляется вывод данных в так называемую консоль. В операционной системе MS DOS консолью служил весь экран монитора. Eclipse же открывает нам представление Console, в котором (если все сделано правильно) и отобразится строка "Hello, world!" - результат вывода нашей программы.

Теперь для повторного запуска программы (например, если мы решили внести в нее ка­кие-то изменения или надо показать преподавателю), можно пойти более легким путем - выполнить команду Run --> Run Last Launched (еще раз запустить предыдущее приложение) или просто нажать Ctrl + F11 .

Основы синтаксиса языка Java

Определения

Операнд - величина, участвующая в операции.

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

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

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

Понятия программы и алгоритма (повторение)

Назначение любой компьютерной программы - преобразование входных данных в вы­ходные данные. Алгоритм программы определяет способ преобразования входных данных в выходные.

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

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

Приступая к написанию программы НЕОБХОДИМО СРАЗУ ПОНЯТЬ:

  1. Для чего вообще нужна эта программа (что она делает, в общих чертах)?
  2. Какие у этой программы входные данные (и откуда они берутся)?
  3. Какие у этой программы выходные данные (и куда их отправить)?
  4. Каким образом входные данные должны быть преобразованы в выходные (алгоритм)? Это самая сложная часть раздумий программиста, но пока нет ответа на три предыдущих вопроса, приступать к ней не имеет смысла.

При написании простой программы необходимо:

  1. Получить входные данные.
  2. Реализовать алгоритм превращения входных данных в выходные.
  3. Выдать результат работы программы (выходные данные): вывести на экран, передать по сети и т.п.

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

Поэтому всегда начинайте выполнение упражнений с определения входных и выход­ных данных. Если в этом вопросе есть затруднения - обратитесь к преподавателю.

Литература по теме:

Основные конструкции алгоритма (повторение)

Внимание! На данном этапе обучения вы уже должны владеть знаниями по этой теме. Если их нет, а материалы для повторения непонятны или недостаточны, вы с заданиями не справитесь! Необходимо срочно обратиться к литературе по данной теме.

Итак, алгоритм - это последовательность действий по преобразованию входных дан­ных в выходные.

Алгоритм может быть записан тремя основными способами:

Отдельные шаги алгоритма (независимо от того, каким образом он записан) связывают­ся друг с другом с помощью трех стандартных конструкций, которые реализованы абсолют­но во всех языках программирования:

    Последовательное выполнение. Шаги выполняются друг за другом.

    Ветвление. В зависимости от выполнения некоторого условия (в рассмотренном при­мере это x > y ?) выполняется та или иная ветвь программы.

    Циклы. Последовательность шагов программы выполняется несколько раз. По сути цикл основан на ветвлении (проверяется условие выхода из цикла), но при невыполнении этого условия управление передается в начало цикла (назад, к уже выполненному шагу).

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

Первая диаграмма выглядит понятнее, но в случае, когда вывести надо не 5 чисел, а 100, диаграмма (и программа, соответствующая этому алгоритму) увеличится в 20 раз, а в программе, соответствующей второму алгоритму, изменится только одно место: 10 поменяется на 100. Именно поэтому повторяющиеся действия оформляют в виде циклов, хотя во многих случаях без них можно и обойтись.

Запомните: алгоритм должен строиться только из трех названных конструкций!

Литература по теме:

1. Школьный учебник информатики.

Основы основ синтаксиса Java

  1. Язык Java различает прописные и строчные буквы. Это означает, что имена всех функций и ключевые слова следует записывать в точности так, как они значатся в примерах и справочниках.
  2. Каждая команда (оператор) в языке Java должна заканчиваться точкой с запятой.
  3. Программа на Java состоит из одного или нескольких классов . Абсолютно вся функциональная часть программы (т.е. то, что она делает) должна быть помещена в методы тех или иных классов. (Класс и метод, как понятия объектно-ориентированного программирования, будут рассматриваться в третьем занятии. Там же будет рассмотрен синтаксис классов. В первых упражнениях используйте классы, которые по умолчанию генерирует Eclipse.)
  4. Классы группируются в пакеты.
  5. Хотя бы в одном из классов должен существовать метод main() , в точности такой, как в рассмотренном нами примере. (На первых порах разбираться или пытаться запомнить правильное написание этого метода необязательно – Eclipse все сгенерирует сам, если поста­вить нужную галочку.) Именно этот метод и будет выполняться первым.

В простейшем случае про­грамма может состоять из одного (или даже ни одного) пакета, одного класса внутри пакета и единственного мето­да main() внутри класса. Команды программы будут записываться между строчкой

public static void main(String args) {

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

Комментарии

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

  1. Ставятся две косые черты // . С этого момента и до конца строки можно писать все, что угодно - Java будет считать это комментарием.
  2. В начале комментария ставятся символы /* , а в конце - */ . В этом случае комментарий может занимать какое угодно количество строк.
  3. Особо выделяются комментарии для документирования , которые помещаются меж­ду маркерами /** и */ . Об их использовании будет рассказано позже.

Правила записи литералов

о разных формах записи литералов

Целые числа (целочисленные литералы) в Java можно записывать обычным образом в де­сятичной форме: 12345, +4, -11.

Кроме этого, можно записывать целые числа в восьмеричной форме, на­чиная с нуля (0777, -056) и в шестнадцатеричной форме, начиная с нуля и латинской буквы x (0xFFFF, 0x14, 0xA1BC).

Действительные литералы записываются в десятичной системе счисления, целая часть отделяется от дробной точкой.

Действительное число можно записать в форме с плавающей точкой , например: 5.4e19, 17E-11, -123e+4. Та часть числа, которая стоит до буквы e называется мантиссой, а часть, ко­торая стоит после буквы e – порядком. Запись означает следующее: надо возвести 10 в сте­пень порядка и умножить на мантиссу. Иногда действительно удобнее записать 1e-9, чем 0.000000001.

Одиночные символы записываются в апострофах, например, "a" , "D" , "@" .

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

Управляющая последовательность также заключается в апострофы.

В первой строке таблицы говорится, что любой символ можно задать с помощью его кода (с десятичной кодировкой от 0 до 255), записав этот код в восьмеричной системе счисления. Например, буква "ж" в кодировке CP1251 запишется управляющей последовательностью "\346"

При необходимости можно указать код любого символа в кодировке Unicode – после обратной черты и латинской буквы u – четырьмя шестнадцатеричными символами. Например, "\u0055" – это буква U.

Строки символов записываются в кавычках. Открывающая и закрывающая ка­вычка должны находиться в одной строке программного кода.

Для строк определена операция сцепления +, которая позволяет собрать несколько строк в одну ("приписывая" их друг к другу).

Если строковая константа слишком длинная и плохо воспринимается в программном коде при записи ее в одну строчку, можно записать ее в несколько строчек, соединяя их с помощью операции сцепления строк. Например:

"Это очень длинная строковая константа, записанная" + "на двух строках исходного текста"

Управляющие символы и коды записыва­ются внутри строки точно также с обратной чертой (но без апострофов).

Логические литералы - это true (истина) и false (ложь).

Идентификаторы

о правилах хорошего стиля

При программировании постоянно возникает необходимость придумывать идентификаторы для именования объектов.

Идентификатор может состоять из букв, цифр, знака подчеркивания _ и знака доллара $ (последний использовать не рекомендуется, Java пользуется им для своих нужд). Идентификатор не может начинаться с цифры. В качестве идентификаторов не могут использоваться ключе­вые слова Java (а также литералы true, false и null ).

Как было отмечено выше, язык Java различает простые и строчные буквы . Это значит, что myAge , myage и MyAge – имена совершенно разных объектов. Будьте внимательны: ошибка в регистре - весьма распространенный случай!

Имена классов начинаются с прописной буквы, если имя состоит из нескольких слов, то каждое слово начинается с прописной буквы. Например: MyClass , Book .

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

Имена констант записываются полностью прописными буквами; если имя содержит несколь­ко слов, между ними ставится знак подчеркивания. Например, PI , COUNT_OF_MONTHS.

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

Типы данных

о типах данных Java

Для хранения целых чисел в Java чаще всего используется тип int .

Вообще в языке Java существует четыре целочисленных типа: byte , short , int , long . Они различаются объемом памяти, которая будет выделена под переменную и, соответственно, диапазоном значений, которые можно в этой переменной хранить. Чаще всего используемый тип int занимает в памяти 4 байта и пригоден для хранения чисел от -2147483648 до 2147483647. Тип byte расходует меньше всего памяти и подходит для работы с небольшими числами (от -128 до 127). Типы short и long занимают 2 и 8 байт соответственно.

Для действительных чисел подходит тип double .

Действительные (вещественные) числа (или числа с плавающей точкой) представлены двумя типами: float и double . Тип float занимает 4 байта памяти и не дает большой степени точности при работе с очень большими или очень маленькими числами. Его рекомендуют использовать в случае, когда дробная часть нужна, но высокая точность не требуется (например, для измерения расстояний в метрах, но с учетом сантиметров и миллиметров или измерения цен в рублях с учетом копеек). При необходимости более точных вычислений рекомендуется оперировать с величинами типа double (например, такая переменная может хранить величину синуса угла).

Действительные литералы, такие как 5.3 , 8.0 , 2e-3 , Java считает относящимися к типу double . Если они должны использоваться в программе как величины типа float , необходимо заканчивать их на букву f: 5.3f , 8.0f , 2e-3f .

Для хранения одиночных символов используется тип char . Java считает его разновидностью целочисленных типов (поскольку каждый символ задается своим кодом в кодировке Unicode), так что к char применимы все операции с целыми числами.

Логические величины (принимающие истинное либо ложное значение) представлены типом boolean .

Таким образом, в Java определено восемь простых типов, особенности которых представлены в таблице:

Объявление переменных

В языке Java (как и во многих других языках) требуется описать перед ее использованием. Описать переменную – значит дать ей имя и определить ее тип.

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

Примеры объявления переменных:

int x; // Объявление целочисленной переменной x double a, b; // Объявление двух вещественных переменных a и b char letter = "Z "; // Объявление символьной переменной letter, инициализация начальным значением "Z" boolean b1 = true , b2, b3 = false ; // Объявление трех логических переменных, первая из них будет иметь значение true, последняя - false

Ocновные операции языка

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

Математические операции

Операции сравнения, результатом является значение логического типа: true (истина) или false (ложь)

Логические операции

об операциях Java

Операции && и || отличаются тем, что не обязательно вычисляют значение второго . Например, && вычисляет значение первого операнда и, если оно ложно, сразу возвращает false , а || возвращает true сразу, если видит, что первый операнд – истина. В Java есть аналогичные по действию операции & и | , они вычисляют значения обоих операндов, прежде чем произвести над ними операцию.

Операции сдвига

(работают с битовым представлением первого операнда)

Битовые операции

(работают с битовым представлением операндов)

Операция?:

Операция?: тернарная, то есть имеет три операнда. Первый операнд - условие, выражение логического типа. Второй и третий операнды - выражения любого другого типа. Операция работает следующим образом: если условие равно true , она возвращает в качестве результата свой второй операнд, а если false , то третий.

Например, выражение (5 > 3)? 7+1: 2*2 будет иметь значение 8, а выражение (5 == 3)? 7+1: 2*2 - значение 4. Эта запись выглядит не очень наглядно, но программисты часто используют ее для сокращения своего кода. Так, вместо последовательности команд:

if (x > 0) y = 45 + a*2; // оператор if рассматривается ниже else y = 45 - b*3;

можно написать:

Y = 45 + ((x > 0)? a*2: -b*3);

Оператор присваивания

После того, как переменная описана, с ней можно работать в программе. В частности, ей можно присвоить значение соответствующего типа. Тогда в дальнейшем при использова­нии этой переменной в каком-либо выражении вместо нее будет автоматически подставлять­ся это текущее значение.

Значение связывается с переменной с помощью присваивания. В языке Java он записывается простым знаком равенства:

Переменная = выражение;

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

X = 7; // переменной x присваивается значение 7 letter = "Q" ; // переменной letter присваивается значение "Q"

В общем случае выражение - это то, что может быть вычислено (например, результат математической операции или результат, возвращаемый некоторым методом):

A = 7.5 + 2.4; // переменной a присваивается 9.9 как результат вычислений

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

B = a + 1;

переменная b примет значение 10.9.

Итак, оператор присваивания действует следующим образом. Сначала вычисляется зна­чение выражения в правой части, а затем полученный результат присваивается переменной, указанной в левой части. Возможна даже следующая ситуация:

X = x + 4;

Эта команда увеличивает текущее значение целочисленной переменной x на 4.

А следующие команды записаны неправильно и работать не будут:

5 = x + 7; // слева должна стоять переменная x + 3 = 14; // слева должна стоять просто одна переменная x = 4.5; // переменная x может принимать только целочисленные значения

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

о приведении типов

Когда переменной одного типа присваивается величина другого типа, происходит используется приведение (преобразование) типов . Для числовых типов (byte , short , int , long , float , double , char ) оно происходит автоматически, если тип изменяемой переменной может "вместить" значение другого типа.

Например, если переменной типа int присвоить значение типа byte , автоматически произойдет преобразование типа byte в тип int . Аналогично тип float может быть приведен к типу double и т.п.

При попытке присвоить переменной менее точного типа (например, byte ) значение более точного типа (например, int ) компилятор выдаст сообщение об ошибке.

Для приведения типа можно использовать оператор приведения типа – перед выражением, для которого мы хотим выполнить приведение типа, ставятся круглые скобки с типом, к которому выполняется приведение, внутри скобок. При приведении целого типа большей точности к целому типу меньшей точности может быть выполнено деление по модулю на допустимый диапазон типа, к которому осуществляется приведение, а при приведении выражения типа double к выражению типа float будет уменьшена точность представления выражения.

long j = (long )1.0; //используем оператор приведения типа к long, j = 1 char ch = (char )1001; //используем оператор приведения типа к char, ch = "d" byte b2 = (byte )(100); //используем оператор приведения типа от int к byte, b2 = 100 byte b3 = (byte )(100 * 2); //внимание! происходит деление по модулю, b3 = -56

Ошибка несовпадения типов часто возникает применительно к действительным литералам. Например, нельзя выполнить присваивание a = 7.5 + 2.4; , если переменная a имеет тип float , поскольку литералы 7.5 и 2.4 считаются относящимся к типу double . Чтобы не было ошибки, необходимо использовать приведение типов:

A = (float)(7.5 + 2.4);

или указать, что литералы также относятся к типу float:

A = 7.5f + 2.4f; // это тоже правильная команда

Практически для каждой бинарной операции существует своя разновид­ность оператора присваивания. Например, для операции сложения + существует унарный оператор присваивания += , который увеличивает значение операнда на заданную величину:

X += 8; // то же самое, что x = x + 8 (x увеличивается на 8)

Аналогично для других операций: операторы *= , -= , /= , %= , &= ^= и т.д:

X *= 3; // то же самое, что x = x * 3 (x увеличивается в 3 раза) b1 ^= b2; // то же самое, что b1 = b1 ^ b2

Упражнение 1

Объявите две целочисленных переменных, присвойте им любые значения. Выведите их сумму и произведение.

Подсказка: вы можете воспользоваться уже созданным в Eclipse проектом, вставив нужные команды после команды вывода строки "Hello, world!" либо вместо нее.

Операторы инкремента и декремента

об операторах инкремента и декремента

Операторы инкремента и декремента ++ и –– увеличивают и уменьшают на единицу значение операнда. Гораздо удобнее использовать команду x++; вместо команды x = x+1;

Операторы инкремента и декремента тоже возвращают значение. Это значит, что пра­вомерно выполнить команду

Y = 7 * x++;

В результате переменная x увеличится на 1, а переменная y примет значение, в семь раз большее старого значения x. Можно также выполнить и такую команду:

Y = 7 * ++x;

В результате переменная x увеличится на 1, а переменная y примет значение, в семь раз большее нового значения x.

Условный оператор if

Простейшая форма записи условного оператора имеет вид:

if (условие) команда

Условие в скобках представляет собой логическое выражение, т.е. может быть истин­ным или ложным. Если условие окажется истинным, команда будет выполнена, в противном случае ничего не произойдет. Например:

if (x // если значение переменной x меньше 17, x присвоить 17

Если же необходимо, чтобы в случае, когда условие ложно, была выполнена какая-то другая команда, используют расширенную форму оператора if:

if (условие) команда1 else команда2

о конструкции else if

В примере, рассмотренном выше, мы можем захотеть присвоить переменной x значе­ние 5, если условие x не выполняется (зачем оно нам, другой вопрос).

if (x else x = 5;

Если необходимо использовать несколько взаимоисключающих условий, их можно за­писать следующим образом:

if (условие1) команда1 else if (условие2) команда2 else if (условие3) команда3 ... else командаN

Упражнение 2

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

Подсказка: алгоритм нахождения максимума рассматривался при повторении основных конструкций алгоритма.

Составные команды

Несколько команд языка Java можно объединить в одну составную команду, используя фигурные скобки {}. Например, можно записать:

{ a = 12; letter = "D" ; }

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

if (x "S"; } else { x = 5; }

Конструкция из фигурных скобок называется также блоком команд , а фигурные скобки - границами блока .

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

об операторе выбора switch

Оператор выбора switch

Часто выбор команды, которую необходимо выполнить, зависит от значения некоторой переменной (или выражения). Например, пользователю предлагается ввести знак операции и в зависимости от введенного символа требуется вывести на экран результат сложения, вычи­тания и т.п. или, если введен неправильные знак, сообщение об ошибке. В этом случае удоб­но использовать оператор выбора switch , имеющий следующую форму записи:

switch (выражение) { case значение1: последовательность команд 1 break; case значение2: последовательность команд 2 break; ... default: последовательность команд по умолчанию }

Значение1, значение2 и т.д. - это константы или выражения, в которых участвуют только константы. Выражение в скобках после ключевого слова switch может содержать переменные. Это выражение вычисляется, а затем ищется соответствие результата с одним из значений после ключевого слова case . Если такое соответствие найдено, то выполняется вся последовательность команд, расположенная между двоеточием и ближайшей командой break . Если не найдено ни одного соответствия, выполнится последовательность команд по умолчанию, стоящая после ключевого слова default . Например:

char oper; // Знак операции, его выберет пользователь ... // Будем считать, что к этому моменту пользователь выбрал знак switch (oper) { case "+" : System.out.println(a + b); break; case "-" : System.out.println(a - b); break; case "*" : System.out.println(a * b); break; default: System.out.println("Неверный знак операции" ); }

Можно опустить раздел default . В этом случае если совпадение не будет найдено, не выполнится ни одна команда.

Оператор цикла while

Цикл while имеет следующую форму:

while (условие) команда

Если условие в скобках (представляющее собой логическое выражение типа boolean ) истинно, будет выполнена команда - тело цикла (это может быть простая команда или по­следовательность команд в фигурных скобках), после чего программа снова вернется к вы­полнению этого оператора и будет повторять это до тех пор, пока условие не окажется ложным.

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

К примеру, следующий фрагмент программы выводит четные числа от 2 до 10:

int x = 2; while (x <= 10){ System.out.println(x); x += 2; }

о цикле while с постусловием

Существует другой вариант записи цикла while :

do команда while (условие)

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

Упражнение 3

С помощью цикла while выведите все нечетные числа от 1 до 10.

Подсказка: немного измените алгоритм вывода четных чисел.

Оператор цикла for

Цикл for обычно используется, когда известно заранее сколько раз должно повториться выполнение команды (или последовательности команд). Он имеет следующую форму:

for (команда инициализации; условие; команда перехода) тело_цикла

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

Обычно цикл for используется в следующем виде:

for (int i = 1; i <= 10; i++) тело_цикла;

В этом примере тело_цикла выполнится ровно 10 раз. При этом на каждой итерации будет доступна переменная i (она называется переменной цикла), последовательно пробегаю­щая значения от 1 до 10. Следующий фрагмент программы выводит четные числа от 2 до 10 (аналогично примеру цикла while):

for (int i = 1; i <= 5; i++) System.out.println(i*2);

Упражнение 4

С помощью цикла for выведите все нечетные числа от 1 до 10.

Операторы break и continue

Когда тело цикла (for или while ) состоит из нескольких команд, может возникнуть ситуация, что на очередной итерации выполнять их все нет необходимости. В этом случае полезными оказываются операторы break и continue .

Оператор break прекращает выполнение текущего цикла, независиом от того, выполняется ли условие его окончания.

Оператор continue прекращает выполнение текущей итерации цикла. То есть, если в теле цикла встречается этот оператор, то остальные, следующие за ним команды пропускаются и начинается новая итерация (повторение) цикла.

Заключение

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

Дополнительная литература

1. Вязовик Н.А. Программирование на Java. (главы 1 - 4, 7, 10)

2. Хабибуллин И.Ш. Самоучитель Java 2. (глава 1)

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

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

Давайте создадим некий класс отвечающий, например, за телефон, который будет иметь всего два метода: включающий и выключающий этот самый телефон. Поскольку мы сейчас не знаем синтаксис языка Java, то напишем класс Телефон на абстрактном языке.

Класс Телефон { Метод Включить() { // операции по включению телефона } Метод Выключить() { // операции по выключению телефона } }

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

А теперь давайте запишем тот же самый класс только уже на языке Java.

Class Telefon { void on() { // тело метода on() } void off() { // тело метода off() } }

Ключевое слово class в языке Java объявляет класс, далее идет название самого класса. В нашем случае это Telefon. Сразу пару слов касательно регистра записи. Почти во всех языках программирования важно сохранять запись названий в том регистре, в котором она была сделана. Если вы написали Telefon, то уже такое написание как telefon или TELefoN выдаст ошибку при компиляции. Как написали первоначально, так и надо писать дальше.

Зарезервированные или ключевые слова записываются в своем определенном регистре, и вы не можете их использовать, давая их названия методам, классам, объектам и так далее. Пробелы между словами не имеют значения, поскольку компилятор их просто игнорирует, но для читабельности кода они важны.

В теле класса Telefon имеются два метода: on() – включающий телефон и метод off() – выключающий телефон. Оба метода имеют свои тела и в них по идее должен быть какой-то исходный код, описывающий необходимые действия обоих методов. Для нас сейчас неважно, как происходит реализация этих методов, главное – это синтаксис языка Java.

Оба метода имеют круглые скобки on(), внутри которых могут быть записаны параметры, например on(int time) или on(int time, int time1). С помощью параметров происходит своего рода связь методов с внешним миром. Говорят, что метод on(int time) принимает параметр time. Для чего это нужно? Например, вы хотите, чтобы телефон включился в определенное время. Тогда целочисленное значение в параметре time будет передано в тело метода и на основе полученных данных произойдет включение телефона. Если скобки пусты, то метод не принимает никаких параметров.

Комментарии

В классе Telefon в телах обоих методов имеется запись после двух слэшей: //. Такая запись обозначает комментарии, которые будут игнорироваться компилятором, но нужны для читабельности кода. Чем больше информации вы закомментируете по ходу написания программы, тем больше у вас будет шансов вспомнить через год, над чем же все это время трудились.

Комментарии в Java могут быть трех видов, это: //, /*…*/ и /**…*/. Комментарии, записанные с помощь оператора // должны располагаться в одной строке:

// Одна строка!!! Ошибка! На вторую строку переносить нельзя! // Первая строка // Вторая строка // … // Последняя строка

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

Типы данных Java

Чтобы задать произвольное значение, в Java существуют типы данных. В классе Telefon мы создали два метода. Оба метода не имели параметров, но когда приводился пример метода on(int time) с параметром time, говорилось о передаче значения в метод. Данное значение указывало на время, с помощью которого якобы должен включиться телефон. Спецификатор int как раз и определяет тип значения time. В Java 2 МЕ шесть типов данных.

Byte – маленькое целочисленное значение от –128 до 128;
short – короткое целое значение в диапазоне от –32768 до 32767;
int – содержит любое целочисленное значение от –2147483648 до 2147483647;
long – очень большое целочисленное значение, от –922337203685475808 до 9223372036854775807;
char – это символьная константа в формате Unicode. Диапазон данного формата от 0 до 65536, что равно 256 символам. Любой символ этого типа должен записываться в одинарных кавычках, например: ‘G’;
boolean – логический тип, имеет всего два значения: false – ложь и true – истина. Этот тип часто используется в циклах о которых чуть позже. Смысл очень прост – если у вас в кармане есть деньги, предположительно это true, а если нет то false. Таким образом, если деньги имеются – идем в магазин за хлебом или пивом (нужное подчеркнуть), если нет денег – остаемся дома. То есть это такая логическая величина, которая способствует выбору дальнейших действий вашей программы.

Чтобы объявить какое-то необходимое значение используется запись:

Int time; long BigTime; char word;

Оператор точка с запятой необходим после записей и ставится в конце строки. Можно совместить несколько одинаковых по типу объявлений через запятую:

Mt time, time1, time2;

Теперь давайте, усовершенствуем наш класс Telefon, добавив в него несколько значений. Методы on() и off() нам больше не нужны, добавим новые методы, которые действительно могут решать определенные задачи.

Class Telefon { //S – площадь дисплея //w – ширина дисплея //h – высота дисплея int w, h, S; //метод, вычисляющий площадь дисплея void Area() { S = w*h; } }

Итак, мы имеем три переменные S, w и h, отвечающие, соответственно, за площадь, ширину и высоту дисплея в пикселях. Метод Area() вычисляет площадь экрана телефона в пикселях. Операция бесполезная, но очень показательная и простая в понимании. Тело метода Area() обрело себя и имеет вид S = w*h. В этом методе мы просто перемножаем ширину на высоту и присваиваем или как еще говорят, сохраняем результат в переменной S. Эта переменная будет содержать значения площади дисплея данного телефона. Сейчас мы подошли вплотную к операторам языка Java, с помощью которых можно совершать всевозможные операции и о которых мы поговорим уже в следующей части данной серии статей.

Когда мы рассматриваем java-программу, она может быть определена как совокупность объектов, которые взаимодействуют с помощью вызова методов друг друга. Теперь позвольте нам кратко разобраться в синтаксисе языка Java , что же класс, объект, методы и переменные экземпляра означают.

Объект - объекты имеют состояние и поведение. Например: собака может иметь состояние - цвет, имя, а также и поведение - кивать, бежать, лаить, кушать. Объект является экземпляром класса.

Класс - может быть определен как шаблон, который описывает поведение объекта.

Метод - является в основном поведением. Класс может содержать несколько методов. Именно в методах логически записанные данные манипулируют и выполняют все действия.

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

Первая программа и знакомство с синтаксисом языка

Давайте рассмотрим простой код, в результате которого будут выведены на экран слова «Привет мир!», а за одно и синтаксис Java.

Public class MyFirstJavaProgram { public static void main(String args) { /* Это первая моя java-программа. В результате выполнения на экран будет выведено "Привет мир!" */ System.out.println("Привет мир!"); // Вывод сообщения на экран } }

  • Откройте блокнот и добавьте код, указанный выше.
  • Сохраните файл как «MyFirstJavaProgram.java». Ниже мы рассмотрим синтаксис Java и узнаем почему именно под таким именем.
  • Откройте окно командной строки и перейдите в каталог, где был сохранен файл. Предположим, что это «C:\».
  • Введите «Javac MyFirstJavaProgram.java» и нажмите ввод, чтобы скомпилировать код. Если нет ошибки в коде, командная строка приведет Вас к следующей строке: (Assumption: The path variable is set).
  • Теперь введите «java MyFirstJavaProgram» для запуска программы.
  • Теперь Вы увидите «Привет Мир!», напечатанный в окне.
C:> javac MyFirstJavaProgram.java C:> java MyFirstJavaProgram Привет мир!

Основы синтаксиса языка Java

Очень важно знать и помнить следующие моменты в синтаксисе:

  • Чувствительность к регистру - Java чувствителен к регистру, то есть идентификатор Hello и hello имеют разный смысл.
  • Название классов - для всех первая буква должна быть в верхнем регистре.
  • Если несколько слов используются, чтобы сформировать название класса, первая буква каждого внутреннего слова должна быть в верхнем регистре, например, «MyJavaClass».
  • Название методов - в синтаксисе Java все имена методов должны начинаться с буквы нижнего регистра.
  • Если несколько слов используются, чтобы сформировать имя метода, то первая буква каждого внутреннего слова должна быть в верхнем регистре, например, «public void myMethodName()».
  • Название файла программы - наименование файла программы должно точно совпадать с именем класса.
  • При сохранении файла, Вы должны сохранить его, используя имя класса (помните о чувствительности к регистру) и добавить «.java» в конце имени (если имена не совпадают, Ваша программа не будет компилироваться), например, «MyJavaProgram» - это название класса, тогда файл должен быть сохранен как «MyJavaProgram.java».
  • public static void main(String args) - обработка программы начинается с метода main(), который является обязательной частью каждой программы.

Идентификаторы в Java

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

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

  • Каждый идентификатор должен начинаться с «A» до «Z» или «a» до «z», «$» или «_».
  • После первого символа может иметь любую комбинацию символов.
  • Ключевое слово не может быть использовано в качестве идентификатора.
  • Самое главное - идентификатор в Java чувствителен к регистру.
  • Пример правильного написания: age, $salary, _value, __1_value.
  • Пример неправильного написания: 123abc, -salary.

Перечисления

Перечисления были введены в Java 5.0. Они ограничивают переменную, чтобы выбрать только одно из нескольких предопределенных значений. Значения в этом перечисляемом списке называются перечисления .

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

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

Пример кода перечисления в Java

class FreshJuice { enum FreshJuiceSize{ SMALL, MEDIUM, LARGE } FreshJuiceSize size; } public class FreshJuiceTest { public static void main(String args){ FreshJuice juice = new FreshJuice(); juice.size = FreshJuice.FreshJuiceSize.MEDIUM; System.out.println("Размер: " + juice.size); } }

Полученный результат выше приведенного примера:

Размер: MEDIUM

Примечание: в Java перечисления могут быть объявлены как самостоятельно, так и внутри класса. Методы, переменные, конструкторы могут быть определены также внутри перечисления.

Типы переменных

  • Локальные переменные.
  • Переменные класса (статические).
  • Переменные экземпляра (динамические).

Модификаторы

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

  • С доступом: default, public, protected, private.
  • Без доступа: final, abstract, strictfp.

Более подробно рассмотрим модификаторы класса, модификаторы методов и другие в следующем разделе.

Массив

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

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

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

Вы, наверное, не раз слышали термин «программа написана под Windows или под Linux, Unix». Дело в том, что среды программирования при переводе языка программирования в машинный код могут быть двух видов – это компиляторы и интерпретаторы. Компиляция или интерпретация программы задает способ дальнейшего выполнения программы на устройстве. Программы написанные на языке Java всегда работают на основе интерпретации, тогда как программы написанные на С/С++ – компиляции. В чем разница этих двух способов?

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

Объектно-ориентированное программирование

Объектно-ориентированное программирование строится на базе объектов, что в кой-то мере аналогично с нашим миром. Если оглянуться вокруг себя, то обязательно можно найти то, что поможет более ярко разобраться в модели такого программирования. Например, я сейчас сижу за столом и печатаю эту главу на компьютере, который состоит из монитора, системного блока, клавиатуры, мыши, колонок и так далее. Все эти части являются объектами, из которых состоит компьютер. Зная это, очень легко сформулировать какую-то обобщенную модель работы всего компьютера. Если не разбираться в тонкостях программных и аппаратных свойств компьютера, то можно сказать, что объект Системный блок производит определенные действия, которые показывает объект Монитор. В свою очередь объект Клавиатура может корректировать или вовсе задавать действия для объекта Системный блок, которые влияют на работу объекта Монитор. Представленный процесс очень хорошо характеризует всю систему объектно-ориентированного программирования.

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

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

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

Классы

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

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

Методы

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

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

Например, вы нажимаете клавишу Esc для отмены каких-либо действий и тем самым даете команду методу, закрепленному за этой клавишей который на программном уровне решает эту задачу. Сразу же возникает вопрос о количестве методов объекта Клавиатура, но здесь может быть различная реализация – как от определения методов для каждой из клавиш (что, вообще-то, неразумно), так и до создания одного метода, который будет следить за общим состоянием клавиатуры. То есть, этот метод следит за тем, была ли нажата клавиша, а потом в зависимости от того какая из клавиш задействована, решает, что ему делать.

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

Синтаксис и семантика языка Java

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

Давайте создадим некий класс отвечающий, например, за телефон, который будет иметь всего два метода: включающий и выключающий этот самый телефон. Поскольку мы сейчас не знаем синтаксис языка Java, то напишем класс Телефон на абстрактном языке.

Класс Телефон
{
Метод Включить()
{
// операции по включению телефона
}
Метод Выключить()
{
// операции по выключению телефона
}
}

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

А теперь давайте запишем тот же самый класс только уже на языке Java.

Class Telefon
{
void on()
{
// тело метода on()
}
void off()
{
// тело метода off()
}
}

Ключевое слово class в языке Java объявляет класс, далее идет название самого класса. В нашем случае это Telefon. Сразу пару слов касательно регистра записи. Почти во всех языках программирования важно сохранять запись названий в том регистре, в котором она была сделана. Если вы написали Telefon, то уже такое написание как telefon или TELefoN выдаст ошибку при компиляции. Как написали первоначально, так и надо писать дальше.

Зарезервированные или ключевые слова записываются в своем определенном регистре, и вы не можете их использовать, давая их названия методам, классам, объектам и так далее. Пробелы между словами не имеют значения, поскольку компилятор их просто игнорирует, но для читабельности кода они важны.

В теле класса Telefon имеются два метода: on() – включающий телефон и метод off() – выключающий телефон. Оба метода имеют свои тела и в них по идее должен быть какой-то исходный код, описывающий необходимые действия обоих методов. Для нас сейчас неважно, как происходит реализация этих методов, главное – это синтаксис языка Java.

Оба метода имеют круглые скобки on(), внутри которых могут быть записаны параметры, например on(int time) или on(int time, int time1). С помощью параметров происходит своего рода связь методов с внешним миром. Говорят, что метод on(int time) принимает параметр time. Для чего это нужно? Например, вы хотите, чтобы телефон включился в определенное время. Тогда целочисленное значение в параметре time будет передано в тело метода и на основе полученных данных произойдет включение телефона. Если скобки пусты, то метод не принимает никаких параметров.

Комментарии

В классе Telefon в телах обоих методов имеется запись после двух слэшей: //. Такая запись обозначает комментарии, которые будут игнорироваться компилятором, но нужны для читабельности кода. Чем больше информации вы закомментируете по ходу написания программы, тем больше у вас будет шансов вспомнить через год, над чем же все это время трудились.

Комментарии в Java могут быть трех видов, это:

//, /*…*/ и /**…*/

Комментарии, записанные с помощь оператора // должны располагаться в одной строке:

// Одна строка
!!! Ошибка! На вторую строку переносить нельзя!
// Первая строка
// Вторая строка
// …
// Последняя строка

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

Типы данных Java

Чтобы задать произвольное значение, в Java существуют типы данных. В классе Telefon мы создали два метода. Оба метода не имели параметров, но когда приводился пример метода on(int time) с параметром time, говорилось о передаче значения в метод. Данное значение указывало на время, с помощью которого якобы должен включиться телефон. Спецификатор int как раз и определяет тип значения time. В Java 2 МЕ шесть типов данных.

Byte – маленькое целочисленное значение от –128 до 128;
short – короткое целое значение в диапазоне от –32768 до 32767;
int – содержит любое целочисленное значение от –2147483648 до 2147483647;
long – очень большое целочисленное значение, от –922337203685475808 до 9223372036854775807;
char – это символьная константа в формате Unicode. Диапазон данного формата от 0 до 65536, что равно 256 символам. Любой символ этого типа должен записываться в одинарных кавычках, например: ‘G’;
boolean – логический тип, имеет всего два значения: false – ложь и true – истина. Этот тип часто используется в циклах о которых чуть позже. Смысл очень прост – если у вас в кармане есть деньги, предположительно это true, а если нет то false. Таким образом, если деньги имеются – идем в магазин за хлебом или пивом (нужное подчеркнуть), если нет денег – остаемся дома. То есть это такая логическая величина, которая способствует выбору дальнейших действий вашей программы.

Чтобы объявить какое-то необходимое значение используется запись:

Int time;
long BigTime;
char word;

Оператор точка с запятой необходим после записей и ставится в конце строки. Можно совместить несколько одинаковых по типу объявлений через запятую:

Mt time, time1, time2;

Теперь давайте, усовершенствуем наш класс Telefon, добавив в него несколько значений. Методы on() и off() нам больше не нужны, добавим новые методы, которые действительно могут решать определенные задачи.

Class Telefon
{
//S – площадь дисплея
//w – ширина дисплея
//h – высота дисплея
int w, h, S;
//метод, вычисляющий площадь дисплея
vord Area()
{
S = w*h;
}
}

Итак, мы имеем три переменные S, w и h, отвечающие, соответственно, за площадь, ширину и высоту дисплея в пикселях. Метод Area() вычисляет площадь экрана телефона в пикселях. Операция бесполезная, но очень показательная и простая в понимании. Тело метода Area() обрело себя и имеет вид S = w*h. В этом методе мы просто перемножаем ширину на высоту и присваиваем или как еще говорят, сохраняем результат в переменной S. Эта переменная будет содержать значения площади дисплея данного телефона.

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

Арифметические операторы

Все арифметические операторы очень просты и аналогичны операторам умножения «*», деления «/», сложения «+» и вычитания «–» используемые в математике. Существует оператор деления по модулю «%» и слегка запутанная на первый взгляд ситуация с оператором равно «=». Оператор равно в языках программирования называется оператором присваивания:

Здесь вы переменной х присваиваете значение 3. А оператор «равно» в языках программирования соответствует записи двух подряд операторов «равно»: «==». Рассмотрим на примере, что могут делать различные арифметические операторы.

Int x, y, z;
x = 5;
y = 3;
z = 0;
z = x + y;

В данном случае z будет иметь значение уже суммы x и y, то есть 8.

Переменная х имела значение 5, но после такой записи предыдущее значение теряется и записывается произведение z*x (8*5), что равно 40. Теперь, если мы продолжим дальше наш код, то переменные будут иметь такой вид:

// x = 40;
// y = 3;
// z = 8;

Операторы сложения и вычитания имеют те же назначения что и в математике. Отрицательные числа так же родственны.

Операторы декремента «––» и инкремента «++» весьма специфичны, но очень просты. В программировании часто встречаются моменты, когда требуется увеличить или уменьшить значение на единицу. Часто это встречается в циклах. Операция инкремента увеличивает переменную на единицу.

Int x = 5;
x++;
// Здесь х уже равен 6

Операция декремента уменьшает переменную на единицу.

Int x = 5;
x--;
// х равен 4

Операции инкремента и декремента могут быть пост и префиксными:

Int x = 5;
int y = 0;
y = x++;

В последней строке кода сначала значение x присваивается y, это значение 5, и только потом переменная х увеличивается на единицу. Получается что:

Префиксный инкремент имеет вид:

Int x = 3;
int y = 0;
y = ++x;

И в этом случае, сначала переменная х увеличивается на один, а потом присваивает уже увеличенное значение y.

Операторы отношения

Операторы отношения позволяют проверить равенство обеих частей выражения. Имеется оператор равенства «==», операторы меньше «<» и больше «>», меньше или равно «<=» и больше или равно «>=», а так же оператор отрицания «!=».
9 == 10;

Это выражение не верно, девять не равно десяти, поэтому его значение этого выражения равно false.

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

Логические операторы

Существует два логических оператора. Оператор «И», обозначающийся значками «&&» и оператор «ИЛИ», обозначенный в виде двух прямых слэшей «||». Например, имеется выражение:

А*В && В*С;

В том случае, если только обе части выражения истинны, значение выражения считается истинным. Если одна из частей неверна, то значение всего выражения будет ложным.
В противовес оператору «&&» имеется оператор «||», не напрасно имеющий название «ИЛИ».

А*В || В*С;

Если любая из частей выражения истинна, то и все выражение считается истинным. Оба оператора можно комбинировать в одном выражении, например:

A*B || B*C && C*D || B*A;

С помощью этого выражения я вас ввел, как мне кажется, в затруднение, неправда ли? Дело в том, что в Java, как и в математике существует приоритет или так называемая иерархия операторов, с помощью которой определяется какой из операторов главнее, а, следовательно, и проверяется первым. Рассмотрим с помощью списка приоритет всех имеющихся операторов языка Java:

, ., (),
!, ~, ++, – –, + (унарный), – (унарный), new,
*, /, %,
+, –,
<<, >>, >>>,
<, <=, >, >=,
= =, !=,
&, ^, |,
&&,
||,
?:,
=, +=, –=, *=, /=, %=, |=, ^=, <<=, >>=, >>>=.

Ассоциативность операторов в списке следует слева направо и сверху вниз. То есть все, что находится левее и выше – старше по званию и главнее.



Понравилась статья? Поделитесь с друзьями!
Была ли эта статья полезной?
Да
Нет
Спасибо, за Ваш отзыв!
Что-то пошло не так и Ваш голос не был учтен.
Спасибо. Ваше сообщение отправлено
Нашли в тексте ошибку?
Выделите её, нажмите Ctrl + Enter и мы всё исправим!