java core. lecture# 1. intro

77
Язык программирования JAVA Лекция# 1 Введение Базовый синтаксис и типы данных Управление выполнением программы Моисеенко Антон [email protected] СПГУАП Кафедра Информационно-Сетевых Технологий

Upload: anton-moiseenko

Post on 22-Jan-2018

567 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Java Core. Lecture# 1. Intro

Язык программирования

JAVA

Лекция# 1Введение

Базовый синтаксис и типы данных

Управление выполнением программы

Моисеенко Антон[email protected]

СПГУАПКафедра Информационно-Сетевых Технологий

Page 2: Java Core. Lecture# 1. Intro

Содержание курса

■ Введение. Базовый синтаксис и типы данных. Управление выполнением программ.

■ Создание собственных классов. Работа со строками. Внутренние классы.

■ Наследование и полиморфизм. Массивы и коллекции.

■ Абстрактные классы и интерфейсы.■ Обработка исключений.■ Создание интерфейса пользователя.■ Работа с потоками ввода/вывода.■ Мультизадачность в Java.

Page 3: Java Core. Lecture# 1. Intro

Что такое JAVA?

• Язык программирования

• Платформа

• Технологии

• Сообщество разработчиков

Page 4: Java Core. Lecture# 1. Intro

Что такое JAVA?

■ Объектно-ориентированный язык программирования

■ Изначально был разработан для управления бытовой электроникой

■ Поставляется с большой библиотекой классов

■ Использует виртуальную машину (JVM) для выполнения программ

Page 5: Java Core. Lecture# 1. Intro

Популярность JAVA технологий

• 6 млн. Java разработчиков.

• 2.5 млн. серверов используют GlassFish.

• 5 млрд. устройств снабжены Java.

• 800 млн. настольных систем с установленной JVM.

• 2.1 млрд. телефонов с поддержкой Java.

• 11 млн. пользователей используют JavaTV.

• Популярность курсов по Java технологиям в ведущих университетах.

• >472,000 выданных сертификатов.

Page 6: Java Core. Lecture# 1. Intro

Платформа Java

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

• Виртуальная машина Java (Java Virtual Machine, JVM) гарантирует единообразие интерфейса с операционной системой.

• Переносимость: «Write once, run everywhere».

• Поставляется с богатой библиотекой классов JDK (Java Development Kit).

• JRE (Java Runtime Environment) – среда, позволяющая запустить программу, написанную на языке Java.

Page 7: Java Core. Lecture# 1. Intro

Общий вид платформы Java SE

Page 8: Java Core. Lecture# 1. Intro

Отличия от С++

• Перегрузка операторов

• Множественное наследование

• Автоматическое согласование типов

• Адресная арифметика

• Деструкторы

Page 9: Java Core. Lecture# 1. Intro

Инструментарий

В состав JDK входит набор утилит для создания Java приложений.

Утилита для создания дистрибутивов Java программ.jar

Дизассемблерjavap

утилита создания заголовочные файлов для интеграции.javah

Утилита формирования стандартной документации JavaDoc.javadoc

Интерпретатор байт-кода. Запускает класс на выполнение.java

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

javac

Page 10: Java Core. Lecture# 1. Intro

Среда разработки

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

• Eclipse http://www.eclipse.org/

• NetBeans http://www.netbeans.org/

• IntelliJ Idea http://www.jetbrains.com/

• JBuilder, CodeGear http://www.borland.com/

Page 11: Java Core. Lecture# 1. Intro

Ключевые особенности JAVA

• Простой

• Объектно-ориентированный

• Распределенный

• Интерпретируемый

• Надежный

• Безопасный

• Архитектурно-нейтральный

• Переносимый

• Многопоточный

Page 12: Java Core. Lecture# 1. Intro

Объектно-ориентированный подход

■ Объекты и классы○ Объект-представление «вещи» в реальном

мире○ Класс – «шаблон», определяющий «вещи»

■ Модель классов объединяет○ Существующие классы и объекты○ Поведение, цели и структуру○ Отношения между классами○ Отношения между объектами

■ Модель используется во всем проекте

Page 13: Java Core. Lecture# 1. Intro

Независимость от платформы

■ Исходные тексты хранятся в текстовом

виде в файле .java

■ Файл .java компилируется в файл .class

■ Этот файл содержит байт-код

(инструкции для выполнения

интерпретатором)

■ Байт-код интерпретируется во время

выполнения

Page 14: Java Core. Lecture# 1. Intro

Just-In-Time (JIT) компилятор

■ Компилирует байт-код в

исполняемый код для конкретной

платформы

■ Увеличивает производительность

■ Оптимизирует повторяющийся код,

например, циклы

Page 15: Java Core. Lecture# 1. Intro

Java - приложения

■ Клиентские○ JVM выполняет отдельное приложение

из командной строки

○ Классы загружаются с локального диска

■ Серверные○ Обслуживают несколько клиентов

○ Применяются для многозвенных приложений

Page 16: Java Core. Lecture# 1. Intro

Java - апплеты

■ Предназначены для встраивания в

HTML страницы

■ Выполняются внутри браузера и

могут взаимодействовать с

сервером

■ Могут быть преобразованы в

обычное приложение

Page 17: Java Core. Lecture# 1. Intro

Java SDK (JDK)

■ Sun Java SDK включает в себя○ Компилятор (javac)

○ Библиотеку классов

○ Отладчик (jdb)

○ Интерпретатор (java)

○ Генератор документации (javadoc)

○ Архиватор (jar)

○ Другое…

Page 18: Java Core. Lecture# 1. Intro

Варианты поставки

■ J2ME (Micro Edition) – для

мобильных устройств

■ J2SE (Standard Edition) – разработка

обычных приложений

■ J2EE (Enterprise Edition) –

разработка приложений

многозвенной архитектуры

Page 19: Java Core. Lecture# 1. Intro

Инструменты, используемые в

данном курсе

■ Java 6 SE

■ В качестве IDE будет

использоваться Eclipse

Page 20: Java Core. Lecture# 1. Intro

Основы объектно-ориентированного

программирования

■ Объектная модель

■ Объекты и классы

■ Взаимодействие классов

Page 21: Java Core. Lecture# 1. Intro

Зачем нужна объектная модель?

■ Единое представление об

окружающем мире в одном проекте

■ Простота модификации

■ Расширяемость

Page 22: Java Core. Lecture# 1. Intro

Объекты и классы

■ Объект – некоторая КОНКРЕТНАЯ сущность моделируемой предметной области

■ Класс – шаблон или АБСТРАКЦИЯ сущности предметной области

Квадрат

Page 23: Java Core. Lecture# 1. Intro

Свойства классов и объектов

■ Уникальные характеристики, которые необходимы при моделировании предметной области

■ ОБЪЕКТЫ различаются значениями свойств

■ Свойства отражают состояние объекта

Page 24: Java Core. Lecture# 1. Intro

Методы классов и объектов

■ Метод отражает ПОВЕДЕНИЕ

объектов

■ Выполнение методов, как правило,

меняет значение свойств

■ Поведение объекта может меняться

в зависимости от состояния

Page 25: Java Core. Lecture# 1. Intro

Инкапсуляция

■ Значение свойств

можно менять

ТОЛЬКО

ПОСРЕДСТВОМ

ВЫЗОВА МЕТОДОВ

Page 26: Java Core. Lecture# 1. Intro

Наследование

■ Класс может иметь

одного или нескольких

потомков. Потомки

(подклассы) содержат

в себе тот же набор

свойств и методов,

что и класс-родитель

(суперкласс).

Page 27: Java Core. Lecture# 1. Intro

Наследование

■ В Java нет множественного

наследования

■ Все методы в Java – виртуальные

(могут быть перекрыты), если явно

не указано обратное

Page 28: Java Core. Lecture# 1. Intro

Полиморфизм

■ Технология, позволяющая задать для одного и того же (по смыслу) метода различные способы выполнения, в зависимости от класса, в котором этот метод реализован

■ Основан на наследовании

■ Методы ОБЯЗАНЫ иметь одно и то же имя и набор параметров (сигнатуру)

Page 29: Java Core. Lecture# 1. Intro

Взаимодействие классов

■ Зависимость (uses-a) – класс

использует другой класс

■ Агрегирование (has-a) – класс

содержит объекты другого класса

■ Наследование (is-a) – класс

является наследником (родителем)

другого класса

Page 30: Java Core. Lecture# 1. Intro

Итоги

■ Java – объектно-ориентированный, платформонезависимый язык программирования

■ Выполняется в виртуальной Java машине (JVM)

■ Программы, написанные на Java, могут выполняться внутри HTML страниц (апплеты)

Page 31: Java Core. Lecture# 1. Intro

Базовый синтаксис языка

■ Ключевые компоненты SDK

■ Структура файла

■ Определение классов

■ Базовые типы данных и операторы

■ Использование переменной

CLASSPATH

■ Компиляция и запуск приложения

Page 32: Java Core. Lecture# 1. Intro

Ключевые компоненты SDK

■ Компилятор (javac) – создает из

исходного кода байт-код

■ Интерпретатор (java) – выполняет

байт-код

Page 33: Java Core. Lecture# 1. Intro

Пакеты

■ Классы объединяются в специальные

структуры, называемые пакетами

■ Стандартные пакеты для

○ Поддержки базовых конструкций языка

(java.lang)

○ Создания оконного интерфейса (javax.swing)

○ Управления вводом/выводом (java.io)

Page 34: Java Core. Lecture# 1. Intro

Структура исходного файла класса Java

■ Исходный файл состоит из следующих частей○ Необязательное слово package, за которым следует

наименование пакета, в котором содержится класс○ Необязательный оператор import (может быть

несколько), который указывает, какие классы из сторонних пакетов используются создаваемым классом

○ Одно или более определение class или interface, за которым следует программный блок

○ Файл должен иметь ТО ЖЕ имя, что и создаваемый класс

■ Ключевые слова языка Java ЧУВСТВИТЕЛЬНЫ К РЕГИСТРУ

■ В файле может быть ТОЛЬКО ОДИН public класс

Page 35: Java Core. Lecture# 1. Intro

Пример класса Javapackage ru.vsu.test;

import java.util.Date;

public class FirstProgram {

private Date today;

public Date getToday(){

return today;

}

public void setToday(Date aToday){

today = aToday;

}

public static void main (String[] args){

FirstProgram fp = new FirstProgram();

fp.setToday(new Date());

System.out.println (fp.getToday());

}

}

Page 36: Java Core. Lecture# 1. Intro

Соглашения об именовании

■ Имена файлов○ Customer.java○ Person.class

■ Имена пакетов○ java.util○ javax.swing

■ Имена классов○ Customer○ Person

■ Имена свойств класса○ firstName○ id

■ Имена методов○ getName○ isAlive

■ Имена констант○ SQUARE_SIZE

Также могут использоваться цифры 1..9, _, $

Page 37: Java Core. Lecture# 1. Intro

Определение класса

■ Определение класса включает:○ Модификатор доступа

○ Ключевое слово class

○ Свойства класса

○ Конструкторы

○ Методы

○ Статические свойства

○ Статические методы

Page 38: Java Core. Lecture# 1. Intro

Пример

public class FirstProgram {

private Date today;

public Date getToday(){

return today;

}

public static final PROGRAM_SIZE=560;

public static void main (String[] args){

...

}

}

Page 39: Java Core. Lecture# 1. Intro

Блоки кода

■ Блоки кода обрамляются в

фигурные скобки “{“ “}”

■ Охватывают определение класса

■ Определения методов

■ Логически связанные разделы кода

import java.util.Date;

public class FirstProgram {

public static void main (String[] args){

System.out.println (new Date());

}

}

Page 40: Java Core. Lecture# 1. Intro

Объявление методов

■ Методы определяются только

внутри класса

■ Указывается

○ Модификатор доступа

○ Слово static

○ Тип возвращаемого значения

○ Аргументы

Page 41: Java Core. Lecture# 1. Intro

Пример

import java.util.Date;

public class FirstProgram {

private Date today;

public Date getToday(){

return today;

}

public void setToday(Date aToday){

int i = 0;

i++

today = aToday;

}

}

Page 42: Java Core. Lecture# 1. Intro

Переменные

■ Основное место для хранения данных

■ Должны быть явно объявлены

■ Каждая переменная имеет тип, идентификатор и область видимости

■ Определяются для класса, для экземпляра и внутри метода

Page 43: Java Core. Lecture# 1. Intro

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

■ Может быть объявлена в любом месте блока кода

■ Должна быть объявлена перед использованием

■ Обычно переменные объявляются в начале блока

■ Область видимости определяется блоком

■ Необходимо инициализировать переменные перед использованием

■ Переменные простых типов инициализируются автоматически

Page 44: Java Core. Lecture# 1. Intro

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

■ Основная форма объявления

○ тип идентификатор [ = значение];

■ При объявлении переменные могут

быть проинициализированы

public class FirstProgram {

public static void main (String[] args){

int itemsSold = 10;

float itemCost = 11.0f;

int i, j, k;

double interestRate;

}

}

Page 45: Java Core. Lecture# 1. Intro

Именование переменных

■ Имя переменной должно начинаться

с буквы, знака подчеркивания или со

знака “$”

■ Имя переменной может включать

цифры

■ Давайте переменным осмысленные

имена

Page 46: Java Core. Lecture# 1. Intro

Простые типы данных

■ Восемь простых типов данных○ Шесть числовых

○ Символьный

○ Логический

■ Определяемые пользователем типы○ Классы

○ Интерфейсы

○ Массивы

Page 47: Java Core. Lecture# 1. Intro

Простые типы данных

Целые С плавающей

точкой

Символьный Логический

byte

short

int

long

float

double

char boolean

1, 2, 3, -2

012

0x23f

2553L

3.0F

.9937F

3.455E8

1.0D

‘s’

‘\141’

‘\u0061’

‘\n’

true

false

Page 48: Java Core. Lecture# 1. Intro

Строки

■ Класс java.lang.String представляет собой хранилище символов и функциональность для работы с ними.

■ Строка имеет фиксированную длину и не завершается специальным символом.

■ Объект класса String – неизменяем.

■ Возможности:

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

Page 49: Java Core. Lecture# 1. Intro

Размещение сущностей

• Переменная может быть размещена в одном из двух хранилищ:

• Стек – расположен в памяти VM и имеет поддержку в виде указателя стека.

• Куча (heap) – область памяти VM, в которой хранятся все ссылочные типы.

• Переменной простого типа выделяется память в стеке.

• Ссылки располагаются в куче.

Page 50: Java Core. Lecture# 1. Intro

Операторы

■ Пять типов операторов

○ Присваивание

○ Арифметические

○ Побитовый сдвиг

○ Равенство

○ Логические

Page 51: Java Core. Lecture# 1. Intro

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

■ Оператор присваивания – выражение и может использоваться там, где допустимы выражения

■ Сначала вычисляется правая часть, а затем полученное значение присваивается левой части

int itemsSold = 10;

double itemCost = 11.0F+12.0D;

int i = i+7;

i = j = k = 100;

Page 52: Java Core. Lecture# 1. Intro

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

■ Сложение (+)■ Умножение (*)■ Вычитание (-)■ Деление (/)■ Остаток от деления (%)

Все арифметические операции производятся над int или long

ВНИМАНИЕ:

byte a = 100;

byte b = 100;

byte c = a+b;

c = -56!!!

Page 53: Java Core. Lecture# 1. Intro

Операции инкремента и декремента

■ Увеличение на 1 (++)

■ Уменьшение на 1 (--)

int var1 = 3;

int var2 = 0;

var2 = ++var1; //сначала увеличивается var1, а затем

//присваивается var2

var2 = var1++; //сначала присваивается var2, а затем

// увеличивается var1

Page 54: Java Core. Lecture# 1. Intro

Побитовый сдвиг■ << - сдвиг влево

■ >> - сдвиг вправо

■ >>> - сдвиг вправо с заполнением нулями

■ Правая часть сокращается до остатка от деления на длину числа, т.е. 1 << 35 == 1 << 3

0 0 0 0 1 0 1 0 0 01 << 3 == 8

1 1 0 0 0 1 0 0 0 1-8 >> 3 == -1

1 1 0 0 0 0 0 0 0 1-8 >>> 3 = …

Page 55: Java Core. Lecture# 1. Intro

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

■ < - меньше

■ > - больше

■ >= - больше или равно

■ <= - меньше или равно

■ == - равно

■ != - не равно

Page 56: Java Core. Lecture# 1. Intro

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

■ && - and

■ || - or

■ ^ - xor

■ ! – not

Page 57: Java Core. Lecture# 1. Intro

Приоритет операций

№ Операция Порядок выполнения

1 [ ] . () (вызов метода) Слева направо

2 ! ~ ++ -- +(унарный) -(унарный) () (приведение) new Справа налево

3 * / % Слева направо

4 + - Слева направо

5 << >> >>> Слева направо

6 < <= > >= instanceof Слева направо

7 == != Слева направо

8 & Слева направо

9 ^ Слева направо

10 | Слева направо

11 && Слева направо

12 || Слева направо

13 ?: Слева направо

14 = += -= *= /= %= |= ^= <<= >>= >>>= Справа налево

Page 58: Java Core. Lecture# 1. Intro

Управление выполнением программы

■ Типы выполнения

○ Последовательность

○ Выбор

○ Итерация

○ Переход

Page 59: Java Core. Lecture# 1. Intro

Последовательность

■ Каждый оператор завершается

точкой с запятой

■ Группы операторов обрамляются

фигурными скобками

■ Каждая группа выполняется как

единый оператор внутри

последовательности операторов

Page 60: Java Core. Lecture# 1. Intro

Оператор if

if (логическое выражение)

оператор1;

[else

оператор2];

if (i % 2 == 0)

System.out.println(“Even”);

else

System.out.println(“Odd”);

if (i % 2 == 0){

System.out.print(i);

System.out.println(“ is even”);

}

Page 61: Java Core. Lecture# 1. Intro

Оператор switch

■ Используется для

выбора из

счетного

количества

вариантов

■ Выражения const

должны быть типа

byte, int, char или

short

switch (выражение целого типа){

case const1:

statement1;

break;

case const2:

statement2;

break;

default:

statement3;

}

Page 62: Java Core. Lecture# 1. Intro

Циклы

■ Три типа

○ while

○ do..while

○ for

■ Все циклы имеют две части

○ Условие выполнения

○ Тело

Page 63: Java Core. Lecture# 1. Intro

Цикл while

while (логическое выражение)

оператор;

int i = 0;

while (i < 100){

System.out.println(“i = ”+i);

i++;

}

Page 64: Java Core. Lecture# 1. Intro

Цикл do..while

do

оператор;

while (условие выхода);

int i = 0;

do{

System.out.println(“i = ”+i);

i++;

}

while (i < 10);

Page 65: Java Core. Lecture# 1. Intro

Цикл for

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

оператор;

for (int i = 0; i < 10; i++)

{

System.out.println(“i = ”+i);

}

for (int i = 0, j = 10; i < j; i++, j--)

{

System.out.println(“i = ”+i);

System.out.println(“j = ”+j);

}

Page 66: Java Core. Lecture# 1. Intro

Массивы

■ Для хранения нескольких однотипных значений используется ссылочный тип –массив:

//примитивный тип, размер массива задан явно

int price[] = new int[10];

//неявное задание размера

int rooms[] = new int[]{1, 2, 3};

//содержит ссылочные переменные

Item [] items = new Item[10];

Item [] undefinedItems = new Item[]{

new Item(1),

new Item(2),

new Item(3)};

Page 67: Java Core. Lecture# 1. Intro

Доступ к элементам массива

Доступ осуществляется по индексу.

Размер хранится в немодифицируемом поле массива length.

for (int i = 0;i < undefinedItems.length; i++){ // должен быть представим в виде // строки (переопределен метод // toString())

System.out.println(undefinedItems[i]);}

Page 68: Java Core. Lecture# 1. Intro

Многомерный массив• Является массивом массивов.

• Многомерный массив концептуально представляет собой многомерную матрицу.

int twoDim [][] = new int[4][5];

Page 69: Java Core. Lecture# 1. Intro

Массив массивов

• Каждый из массивов может иметь отличную от других длину.

int twoDim [][] = new int[4][];twoDim[0] = new int [10];twoDim[1] = new int [20];twoDim[2] = new int [30];twoDim[3] = new int [100];

Page 70: Java Core. Lecture# 1. Intro

Ошибки времени выполнения

• Обращение к несуществующему индексу массива отслеживается виртуальной машиной во время исполнения кода:

public class Main {

public static void main(String[] args) {

int array [] = new int[]{1, 2, 3};

System.out.println(array[3]);

}

}

//попытка обратиться к несуществующему

//индексу:

Exception in thread "main"

java.lang.ArrayIndexOutOfBoundsException: 3

at Main.main(Main.java:27)

Page 71: Java Core. Lecture# 1. Intro

Ошибки времени выполнения

• Попытка поместить в массив неподходящий элемент пресекается виртуальной машиной:

Object x[] = new String[3];

//попытка поместить в массив содержимое //несоответствующего

типа

x[0] = new Integer(0);

Exception in thread "main" java.lang.ArrayStoreException:

java.lang.Integer

at Main.main(Main.java:22)

Page 72: Java Core. Lecture# 1. Intro

Переменная среды CLASSPATH

■ Определяется в операционной системе

■ Указывает JVM, где необходимо искать файлы .class

■ Может ссылаться на каталоги и файлы .jar и .zip

■ Интерпретатор загружает встроенные классы перед тем, как загрузить пользовательские

■ Используется с командами java и javac

Page 73: Java Core. Lecture# 1. Intro

Выполнение JAVA программ

■ Для того, чтобы класс можно было запустить, в нем должен быть определен метод main

public class FirstProgram {

public static void main (String[] args){

int itemsSold = 10;

float itemCost = 11.0f;

int i, j, k;

double interestRate;

}

}

Page 74: Java Core. Lecture# 1. Intro

Компиляция и запуск JAVA программ

■ Компиляция .java файла

■ Запуск .class файла

> javac [-classpath <path>] FirstProgram.java

> java [-classpath <path>] FirstProgram

Page 75: Java Core. Lecture# 1. Intro

Рекомендуемая литература

■ Java Platform SE7 Specification

■ Хорстманн, Корнелл Java2, в 2-х томах

■ Bruce Eckel Thinking in Java

■ Ильдар Хабибуллин. "Java 7. В подлиннике"

Изд. - БХВ-Петербург. 2012.

■ Герберт Шилдт. "Java. Полное руководство"

Изд. - Вильямс. 2012. "Java 7: The Complete

Reference"

Page 76: Java Core. Lecture# 1. Intro

Ссылки

■ httphttp://http://ruhttp://ru.http://ru.wikipediahttp://ru.

wikipedia.http://ru.wikipedia.orghttp://ru.wikipedia.or

g/http://ru.wikipedia.org/wikihttp://ru.wikipedia.org/wi

ki/http://ru.wikipedia.org/wiki/Java

■ http://www.oracle.com/technetwork/java/index.html

■ http://www.oracle.com/technetwork/java/javase/doc

umentation/index.html

■ http://jdk7.java.net/

■ http://www.oracle.com/technetwork/java/javase/dow

nloads/jdk-7u1-download-513651.html

■ http://java.sun.com/learning/tutorial/index.html

Page 77: Java Core. Lecture# 1. Intro

Вопросы?