Курс

"Программирование Java"

Почему Java?

Установка ПО

Загрузка, установка и настройка необходимых программ

Установка IDEA, JDK, обзор интерфейса, создание первого проекта

Установка JDK (Java Development Kit) в Windows

Для программирования под Java и, в частности, при создании приложений под Android требуется установка JDK.

Java Development Kit — бесплатно распространяемый компанией Oracle Corporation (ранее Sun Microsystems) комплект разработчика приложений на языке Java, включающий в себя компилятор Java (javac), стандартные библиотеки классов Java, примеры, документацию, различные утилиты и исполнительную систему Java (JRE). В состав JDK не входит интегрированная среда разработки на Java, поэтому разработчик, использующий только JDK, вынужден использовать внешний текстовый редактор и компилировать свои программы, используя утилиты командной строки

Далее рассматривается способ установки под Widows 10, но никакой разницы для других версий Windows не должно быть

Скачиваем и устанавливаем с официального сайта:

http://www.oracle.com/technetwork/java/javase/downloads/index.html

Основные понятия и типы данных

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

Разбор понятий: среда разработки, JVM, JDK, язык высокого уровня, компилятор, байт-код, отладчик, консоль. Типы данных:

- примитивные: числовые, символьные, логический

- ссылочные: массивы, классы и т.д

Интегрированная среда разработки, ИСP (англ. Integrated development environment — IDE), также единая среда разработки, ЕСР — комплекс программных средств, используемый программистами для разработки программного обеспечения (ПО)

Среда разработки включает в себя:

текстовый редактор,

Транслятор (компилятор и/или интерпретатор),

средства автоматизации сборки,

отладчик

Иногда содержит также средства для интеграции с системами управления версиями и разнообразные инструменты для упрощения конструирования графического интерфейса пользователя. Многие современные среды разработки также включают браузер классов, инспектор объектов и диаграмму иерархии классов — для использования при объектно-ориентированной разработке ПО. ИСР обычно предназначены для нескольких языков программирования — такие как IntelliJ IDEA, NetBeans, Eclipse, Qt Creator, Geany, Embarcadero RAD Studio, Code::Blocks, Xcode или Microsoft Visual Studio, но есть и IDE для одного определённого языка программирования — как, например, Visual Basic, Delphi, Dev-C++

Кроссплатформенность или межплатформенность — способность программного обеспечения работать с несколькими аппаратными платформами и (или) операционными системами. Обеспечивается благодаря использованию высокоуровневых языков программирования, сред разработки и выполнения, поддерживающих условную компиляцию, компоновку и выполнение кода для различных платформ. Типичным примером является программное обеспечение, предназначенное для работы в операционных системах Linux и Windows одновременно.

Java Virtual Machine (сокращенно Java VM, JVM) — виртуальная машина Java — основная часть исполняющей системы Java, так называемой Java Runtime Environment (JRE). Виртуальная машина Java исполняет байт-код Java, предварительно созданный из исходного текста Java-программы компилятором Java (javac). JVM может также использоваться для выполнения программ, написанных на других языках программирования. Например, исходный код на языке Ada может быть скомпилирован в байт-код Java, который затем может выполниться с помощью JVM.

JVM является ключевым компонентом платформы Java. Так как виртуальные машины Java доступны для многих аппаратных и программных платформ, Java может рассматриваться и как связующее программное обеспечение, и как самостоятельная платформа. Использование одного байт-кода для многих платформ позволяет описать Java как «скомпилируй единожды, запускай везде» (compile once, run anywhere)

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

Байт-код (англ. bytecode) — стандартное промежуточное представление, в которое может быть переведена компьютерная программа автоматическими средствами. По сравнению с исходным кодом, удобным для создания и чтения человеком, байт-код — это компактное представление программы, уже прошедшей синтаксический и семантический анализ. В нём в явном виде закодированы типы, области видимости и другие конструкции. С технической точки зрения байт-код представляет собой машинно-независимый код низкого уровня, генерируемый транслятором из исходного кода

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

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

Компилятор – это программа, которая переводит текст, написанный на языке программирования, в набор машинных кодов

Интерпретатор (англ. interpreter от лат. interpretator - толкователь) — программа (разновидность транслятора), выполняющая интерпретацию.

Интерпретация — построчный анализ, обработка и выполнение исходного кода программы или запроса (в отличие от компиляции, где весь текст программы, перед запуском, анализируется и транслируется в машинный или байт-код, без её выполнения).

 

Консоль — интерфейс пользователя, окно для вывода системных сообщений и приёма команд; программное обеспечение для управления компьютером; программное обеспечение, реализующее текстовый интерфейс пользователя

Отладка — этап разработки компьютерной программы, на котором обнаруживают, локализуют и устраняют ошибки

 

Чтобы понять, где возникла ошибка, приходится:

узнавать текущие значения переменных

выяснять, по какому пути выполнялась программа

Существуют две взаимодополняющие технологии отладки

Использование отладчиков — программ, которые включают в себя пользовательский интерфейс для пошагового выполнения программы: оператор за оператором, функция за функцией, с остановками на некоторых строках исходного кода или при достижении определённого условия

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

 

Переменные и константы

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

Переменные объявляются следующим образом:

тип_данных имя_переменной;

Например, определим переменную, которая будет называться x и будет иметь тип int:

int x;

В этом выражении мы объявляем переменную x типа int. То есть x будет хранить некоторое число не больше 4 байт.

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

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

в имени не должно быть знаков пунктуации и пробелов

имя не может быть ключевым словом языка Java

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

Объявив переменную, мы можем присвоить ей значение:

int x;      // объявление переменной

x = 10;     // присвоение значения

System.out.println(x);  // 10

Также можно присвоить значение переменной при ее объявлении. Этот процесс называется инициализацией:

int x = 10;     // объявление и инициализация переменной

System.out.println(x);  // 10

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

int x;

System.out.println(x);

Через запятую можно объявить сразу несколько переменных одного типа:

int x, y;

x = 10;

y = 25;

System.out.println(x);  // 10

System.out.println(y);  // 25

Также можно их сразу инициализировать:

int x = 8, y = 15;

System.out.println(x);  // 8

System.out.println(y);  // 15

Отличительной особенностью переменных является то, что мы можем в процессе работы программы изменять их значение:

int x = 10;

System.out.println(x);  // 10

x = 25;

System.out.println(x);  // 25

Константы

Кроме переменных, в Java для хранения данных можно использовать константы. В отличие от переменных константам можно присвоить значение только один раз. Константа объявляется также, как и переменная, только вначале идет ключевое слово final:

final int LIMIT = 5;

System.out.println(LIMIT);  // 5

// LIMIT=57; // так мы уже не можем написать, так как LIMIT - константа

Как правило, константы имеют имена в верхнем регистре.

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

Типы данных

Одной из основных особенностей Java является то, что данный язык является строго типизированным. А это значит, что каждая переменная и константа представляет определенный тип и данный тип строго определен. Тип данных определяет диапазон значений, которые может хранить переменная или константа.

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

boolean: хранит значение true или false

boolean isActive = false;

boolean isAlive = true;

byte: хранит целое число от -128 до 127 и занимает 1 байт

byte a = 3;

byte b = 8;

short: хранит целое число от -32768 до 32767 и занимает 2 байта

 

short a = 3;

short b = 8;

int: хранит целое число от -2147483648 до 2147483647 и занимает 4 байта

 

int a = 4;

int b = 9;

long: хранит целое число от –9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 и занимает 8 байт

long a = 5;

long b = 10;

double: хранит число с плавающей точкой от ±4.9*10-324 до ±1.8*10308 и занимает 8 байт

 

double x = 8.5;

double y = 2.7;

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

float: хранит число с плавающей точкой от -3.4*1038 до 3.4*1038 и занимает 4 байта

float x = 8.5F;

float y = 2.7F;

char: хранит одиночный символ в кодировке UTF-16 и занимает 2 байта, поэтому диапазон хранимых значений от 0 до 65535

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

Целые числа

Все целочисленные литералы, например, числа 10, 4, -5, воспринимаются как значения типа int, однако мы можем присваивать целочисленные литералы другим целочисленным типам: byte, long, short. В этом случае Java автоматически осуществляет соответствующие преобразования:

byte a = 1;

short b = 2;

long c = 2121;

Однако если мы захотим присвоить переменной типа long очень большое число, которое выходит за пределы допустимых значений для типа int, то мы столкнемся с ошибкой во время компиляции:

long num = 2147483649;

Здесь число 2147483649 является допустимым для типа long, но выходит за предельные значения для типа int. И так как все целочисленные значения по умолчанию расцениваются как значения типа int, то компилятор укажет нам на ошибку. Чтобы решить проблему, надо добавить к числу суффикс l или L, который указывает, что число представляет тип long:

long num = 2147483649L;

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

int num111 = 0x6F; // 16-тиричная система, число 111

int num8 = 010; // 8-ричная система, число 8

int num13 = 0b1101; // 2-ичная система, число 13

Для задания шестнадцатеричного значения после символов 0x указывается число в шестнадцатеричном формате. Таким же образом восьмеричное значение указывается после символа 0, а двоичное значение - после символов 0b.

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

int x = 123_456;

int y = 234_567__789;

System.out.println(x);  // 123456

System.out.println(y);  // 234567789

Числа с плавающей точкой

При присвоении переменной типа float дробного литерала с плавающей точкой, например, 3.1, 4.5 и т.д., Java автоматически рассматривает этот литерал как значение типа double. И чтобы указать, что данное значение должно рассматриваться как float, нам надо использовать суффикс f:

float fl = 30.6f;

double db = 30.6;

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

Символы и строки

В качестве значения переменная символьного типа получает одиночный символ, заключенный в одинарные кавычки: char ch='e';. Кроме того, переменной символьного типа также можно присвоить целочисленное значение от 0 до 65535. В этом случае переменная опять же будет хранить символ, а целочисленное значение будет указывать на номер символа в таблице символов Unicode (UTF-16). Например:

char ch=102; // символ 'f'

System.out.println(ch);

Еще одной формой задания символьных переменных является шестнадцатеричная форма: переменная получает значение в шестнадцатеричной форме, которое следует после символов "\u". Например, char ch='\u0066'; опять же будет хранить символ 'f'

Символьные переменные не стоит путать со строковыми, 'a' не идентично "a". Строковые переменные представляют объект String, который в отличие от char или int не является примитивным типом в Java:

String hello = "Hello...";

System.out.println(hello);

Приложение

package com.company;

 

import java.util.Locale;

import java.util.Scanner;

 

public class Main {

 

    public static void main(String[] args) {

 

        //определение сканера ( необходим для считывания данных )

        Scanner in = new Scanner(System.in);

        //задаем формат ввода данных ( "." - для ввода дробных значений )

        in.useLocale(Locale.US);

 

        //Числа с плавающей запятой

        double a, b;

 

        //System.out.println("Введите значение а : ");

        //a = in.nextDouble();

        //System.out.println("Введите значение b : ");

        //b = in.nextDouble();

 

        //System.out.println("a / b = " + (a / b) );

 

        float a1, b1;

        a1 = 4.3F;

 

        //целочисленные типы

        //значения от -128 до 127

        byte aByte;

        //хранит целое число от -32768 до 32767 и занимает 2 байта

        short aShort;

        //целочисленные больше чем int ( более 2 000 000 000)

        long along;

        //целочисленные до 2 000 000 000

        int aInt;

 

 

        //логический тип данных

        boolean aBoolean;

        aBoolean = true; //aBoolean = false;

        System.out.println( !aBoolean );

 

        //символьные типы данных

        char aChar = '!';

        System.out.println( aChar );

        String str = "fghjkllkjhgfdfghjkhgfghjklkjhgf dfghjkhgv drfghjkjhn";

        System.out.println( str.length() );

 

    }

 

 

}

Эта тема не содержит тестов или других форм контроля знаний