ЛЕКЦИЯ №1. Введение в Java
1.1. Базовые сведения о Java
Java - кроссплатформенный, объектно-ориентированный,
бесплатный язык программирования, разработанный компанией Sun
Microsystems (в последующем приобретённой компанией Oracle).
Программы на Java транслируются в байт-код, выполняемый
виртуальной машиной Java (Java VM, JVM) - программой,
обрабатывающей байт-код и передающей инструкции оборудованию как
интерпретатор.
Основное достоинство языка Java - именно в его кроссплатформенности. Байт-код не зависит от оборудования и легко переносим.
Главным недостатком Java является то, что, в отличие от C++ или Delphi, это все же не компилятор, а интерпретатор. Программа на Java работает в среднем в 2-5 раз медленнее, чем программа на C++ и потребляет в среднем в 10 раз больше памяти.
Java является базовым языком программирования для операционной системы Android. Однако, прежде, чем приступить к изучению программирования на Java для Android, несколько лекций мы посвятим изучению основ Java без привязки к какой-либо операционной системе.
На рис. 1.1 приведена структурная схема жизненного цикла разработки и запуска программы на языке Java.
Компилятор MyProg.class Запуск Java VM MyProg.java javac (байт-код) программы Рис. 1.1. Жизненный цикл разработки и запуска программы на языке Java Исходный текст Java-программы должен быть файлом с расширением.java. Для компиляции программы в байт-код используется программа javac из JDK6, который мы научились устанавливать на компьютер в ходе лабораторной работы №1. Чтобы откомпилировать программу MyProg.java нужно в командной строке набрать javac MyProg.java. Если текст программы не содержит ошибок, компилятор создаст файл с таким же именем, но с расширением.class (байт-код программы). Теперь эту программу можно запустить с помощью Java VM (файл java.exe). Для этого нужно в командной строке набрать java MyProg (расширение файла не указывается).
Специальными компановщиками из файлов байткода и файлов ресурсов могут формироваться, например, файлы приложений для мобильных телефонов (расширение.jar) или установочные файлы приложений для операционной системы Android (с расширением.apk).
Файлы байткода исполняются виртуальной машиной Java (Java VM).
Для каждой операционной системы или устройства разрабатывается своя Java VM, в то время как байт-код программы остается неизменным (см.
рис. 1.2).
Текст программы на языке java Компилятор javac Байт-код программы) Java VM для Windows Java VM для Linux Java VM для Mac OS Запуск на ОС Windows Запуск на ОС Linux Запуск на Mac OS Рис. 1.2. Запуск приложений на различных платформах при помощи Java VM 1.2. Java и объектно-ориентированное программирование В отличии от других языков программирования, например C++, PHP, где объектно-ориентированное программирование можно использовать, если есть желание, в языке программирования Java каждая программа – объектно-ориентированная.
Основная конструкция языка программирования Java, основной объект, с которым можно что-то делать – это класс. У каждого класса есть какие-то характеристики, называемые полями (другими словами – переменные) и умения что-то делать, называемые методами (другими словами - функции). На рис. 1.3 приведен пример текста простой программы, где есть метод и переменная.
public class wasinkharkov{ public static void main(String[] args) { int n=5;
System.out.println(“I was in Kharkov! “+n+” times!”);
} } Рис. 1.3. Текст простой программы на языке Java При запуске эта программа выдает в консольном окне надпись “I was in Kharkov! 5 times!”. Если Вы запускаете программу из командной строки Total Commander, то для запуска нажимайте комбинацию клавиш Shift+Enter. Иначе консольное окно сразу же закроется.
В приведенной программе wasinkharkov – это класс, main – это метод, n – поле.
Ключевое слово public объясним чуть позже.
В каждой программе, которую мы собираемся запускать на выполнение, должен быть метод main. Этот метод будет выполнен при запуске программы.
Объявление класса { Объявление полей… Описание методов… Описание метода main Если не планируется, что программу будут запускать на выполнение, а описанный класс лишь будет использоваться в других программах, то наличие в тексте метода main не обязательно.
Покажем теперь, как класс из одной программы можно использовать в другой программе. На рис. 1.4 приведен текст программы khai.java.
public class khai { public void reklama(String NapravlenieObuchenija, int ChisloBudzhetnyhmest) { System.out.println("В ХАИ около 10 000 студентов учатся по более, чем 50 направлениям обучения.");
System.out.println("Одним из этих направлений является направление "+NapravlenieObuchenija);
System.out.println("Число бюджетных мест по этому направлению: "+ChisloBudzhetnyhmest);
В этой программе описан класс khai и метод reklama. Обратим внимание, что метода main в тексте программы нет, поэтому ее нельзя запустить на выполнение. Однако, эту программу можно откомпилировать в байт-код и в дальнейшем вызывать ее метод reklama из других программ.
Отметим, что у метода реклама два входных параметра. Во-первых, это поле NapravlenieObuchenija типа String (текстовая строка). Вовторых, это поле ChisloBudzhetnyhmest типа int (целое число).
На рис. 1.5 приведен текст программы telek.java, которая вызывает метод reklama из программы khai.java.
public class telek{ public static void main(String[] args) { khai k=new khai();
k.reklama("Телекоммуникации",30);
Обратите внимание, чтобы использовать методы класса khai, нужно создать экземпляр этого класса. Это делается в строке:
khai k=new khai();
При этом создается экземпляр k класса khai.
В общем виде создание экземпляра заданного класса выглядит так:
имя_класса имя_переменной=new имя_класса() Нужно просто запомнить эту конструкцию и использовать ее всякий раз, когда нужно создать новый экземпляр какого-то класса. И ключевое слово new как раз и говорит виртуальной машине Java о том, что в памяти выделяется место под новый экземпляр класса.
Теперь с помощью k можно вызывать метод reklama: k.reklama При запуске откомпилированной программы telek она выведет на экран текст:
В ХАИ около 10 000 студентов учатся по более, чем направлениям обучения.
Одним из этих направлений является направление Телекоммуникации Число бюджетных мест по этому направлению: 1.2.1. Наследование и изменение класса. Полиморфизм Создадим файл khaibest.java со следующим текстом (см. рис. 1.6):
public class khaibest extends khai { public void reklama(String NapravlenieObuchenija, int ChisloBudzhetnyhmest) { super.reklama(NapravlenieObuchenija, ChisloBudzhetnyhmest);
System.out.println(NapravlenieObuchenija+" - это лучшее направление обучения в ХАИ!");
Ключевое слово extends означает, что класс khaibest наследует (копирует) класс khai:
class khaibest extends khai Класс, который наследует еще называется классом-потомком, а класс, которого наследуют - классом-родителем.
Наследовав от класса khai его поля и методы, в классе khaibest мы имеем право оставить любой из них без изменения, либо дополнить, либо полностью изменить, переписав заново. В этом состоит полиморфизм объектного программирования на Java.
Если мы хотим дополнить какой-то метод, для запуска его старой версии предусмотрено ключевое слово super. Формат его использования:
super.имя_родительского_метода В данном примере метод super позволяет вызвать неизмененный метод родительского класса reklama. Таким образом, super.reklama означает вызов метода reklama наследуемого класса khai из файла khai.java.
На рис. 1.7 приведен текст программы, использующий класс khaibest.
public class telek2{ public static void main(String[] args) { khaibest k=new khaibest();
k.reklama("Телекоммуникации",30);
После компилирования и запуска этой программы на экран будет выведена надпись:
В ХАИ около 10 000 студентов учатся по более, чем направлениям обучения.
Одним из этих направлений является направление Телекоммуникации Число бюджетных мест по этому направлению: Телекоммуникации - это лучшее направление обучения в ХАИ!
Приведем более сложный пример, однако, позволящий нам до конца разобраться с полиморфизмом. На рис. 1.8 приведе текст класса puktir.java.
public class punktir { public void line1() { System.out.print("---");
public void line2() { System.out.print("=");
public void PunktirLine(int dlina) {