Скачать презентацию Введение в Java Sun Microsystems Джеймс Гослинг Скачать презентацию Введение в Java Sun Microsystems Джеймс Гослинг

Java-1.ppt

  • Количество слайдов: 46

Введение в Java Введение в Java

Sun Microsystems Джеймс Гослинг 1995 г. “Oak” → “Java” Java 1. 0 (1, 2, Sun Microsystems Джеймс Гослинг 1995 г. “Oak” → “Java” Java 1. 0 (1, 2, 3, 4) → Java 5 → Java 6 → Java 7 1996 2004 2006 2011 2010 г. – Sun Microsystems→ 7. 4 млрд. $→ Oracle

Семейства технологий (платформы) Java. SE – Java Standard Edition, для создания пользовательских приложений, в Семейства технологий (платформы) Java. SE – Java Standard Edition, для создания пользовательских приложений, в первую очередь – для настольных систем. Java. EE – Java Enterprise Edition, для создания программного обеспечения уровня предприятия. Java. ME – Java Micro Edition, для использования в устройствах, ограниченных по вычислительной мощности, в том числе мобильных телефонах, КПК, встроенных системах. Java Card – для использования в устройствах без собственного человекомашинного интерфейса, например в смарт-картах. Java. FX – для создания приложений, работающих с мультимедийным контентом, графических интерфейсов пользователя для бизнес-приложений, мультимедиа веб-сайтов и др.

Среды разработки Java • стандартные Java Development Kit Software Development Kit • визуальные Net. Среды разработки Java • стандартные Java Development Kit Software Development Kit • визуальные Net. Beans Intelli. J IDEA Eclipce JBuilder Visual J# Java. SE – http: //www. oracle. com/technetwork/javase/downloads/index. html Net. Beans IDE – http: //netbeans. org/

Особенности Java • кроссплатформенность (“Write once, run everywhere”); • полностью объектно-ориентированный язык; • динамичность Особенности Java • кроссплатформенность (“Write once, run everywhere”); • полностью объектно-ориентированный язык; • динамичность развития и добавления новых возможностей; • ориентация на Internet-задачи, распределенные приложения; • простота усвоения (C/C++ подобный язык) сетевые

Жизненный цикл программы для большинства языков Жизненный цикл программы для большинства языков

Жизненный цикл программы для Java Байт-код (P-код) – оптимизированный набор инструкций, предназначенных для исполнения Жизненный цикл программы для Java Байт-код (P-код) – оптимизированный набор инструкций, предназначенных для исполнения виртуальной машиной Java (JVM). Байт-код решает проблемы обеспечения безопасности и переносимости Java-программ, так как не является исполняемым кодом.

Лексика и синтаксис языка Ключевые слова Java abstract continue for new switch assert default Лексика и синтаксис языка Ключевые слова Java abstract continue for new switch assert default goto package synchronized boolean do if private this break double implements protected throw byte else import public throws case enum instanceof return transient catch extends int short try char final interface static void class finally long strictfp volatile const float native super while Зарезервированы также слова true, false и null.

Идентификаторы • любая последовательность строчных и прописных букв, цифр или символов подчеркивания и символов Идентификаторы • любая последовательность строчных и прописных букв, цифр или символов подчеркивания и символов доллара; • не должны начинаться с цифры, count (корректно), 2 count (не корректно); • чувствительность к регистру символов, Value≠VALUE. Константы • целочисленная – 100; • вещественная – 98, 6; • символьная – ‘Y’; • строковая – “This is a text”. Комментарии • // – однострочные; • /* … */ – многострочные; • /** … */ – документации.

Разделители • () – для передачи списков параметров в определениях и вызовах методов, определения Разделители • () – для передачи списков параметров в определениях и вызовах методов, определения приоритетов в выражениях, указания выражений в управляющих операторах и указания преобразования типов; • {} – для определения блоков кода, классов, методов и локальных областей определения, а также для указания значений автоматически инициализируемых массивов; • [] – для объявления типов массивов, при разыменовании значений массивов; • ; – завершение оператора; • , – для разделения последовательных идентификаторов в объявлениях переменных, создания цепочек операторов внутри оператора for; • . – для разделения имен пакетов от подпакетов и классов, а также для отделения переменной или метода от ссылочной переменной.

Базовые типы данных Тип Размер, Значение по Минимальное значение бит умолчанию Максимальное значение byte Базовые типы данных Тип Размер, Значение по Минимальное значение бит умолчанию Максимальное значение byte 8 0 -128 127 char 16 'x 0' 0 65535 short 16 0 -32768 32767 int 32 0 -2147483648 2147483647 long 64 0 -9223372036854775808 9223372036854775807 float 32 0. 0 F -224*10104 double 64 0. 0 D -253*10970 Все целые типы в Java знаковые, эквивалентов, как в C++, в Java нет. соответствующих беззнаковых

boolean • размер в спецификации языка не указан; • может иметь значения true и boolean • размер в спецификации языка не указан; • может иметь значения true и false; • для представления переменной или поля используется тип int; • для представления массива используется массив byte. void • фактически типом не является; • используется при описании метода для указания того, что данный метод ничего не возвращает.

Класс – ключевое понятие в Java. Класс – способ описания типа. Класс определяет структуру Класс – ключевое понятие в Java. Класс – способ описания типа. Класс определяет структуру и поведение (данные и код), которые будут совместно использоваться набором объектов (экземпляров класса). Описание класса class My. Class { … // тело класса } • class – ключевое слово; • My. Class – имя класса; • внутри фигурных скобок находится тело класса; • внутри тела класса в произвольном порядке описываются поля и методы класса.

Класс – приватные методы – приватные переменные экземпляра – общедоступные методы – общедоступные переменные Класс – приватные методы – приватные переменные экземпляра – общедоступные методы – общедоступные переменные экземпляра (не рекомендуется)

Переменные Переменная – основной компонент хранения данных. Переменная определяется комбинацией идентификатора, необязательного начального значения. Переменные Переменная – основной компонент хранения данных. Переменная определяется комбинацией идентификатора, необязательного начального значения. типа и тип идентификатор [= значение][, идентификатор[= значение] …]; тип – один из базовых типов либо имя класса или интерфейса. идентификатор – имя переменной. Объект (экземпляр класса, class instance) Объект – переменная класса. Каждый объект определенного класса содержит структуру и поведение, которые определены классом.

Ссылки на объекты В Java для манипулирования объектами используются ссылки на объекты (handles). • Ссылки на объекты В Java для манипулирования объектами используются ссылки на объекты (handles). • ссылка хранит в себе некоторый адрес объекта в оперативной памяти; • на один объект может быть несколько ссылок; • на объект может не быть ссылок (он безвозвратно потерян); • ссылка может не ссылаться ни на какой объект (пустая ссылка, null); • не может быть ссылки в никуда; • не может быть ссылки на произвольную область памяти; • все ссылки имеют имя; • все ссылки строго типизированы.

Пример описания ссылки My. Type ref; My. Type – имя типа, ref – имя Пример описания ссылки My. Type ref; My. Type – имя типа, ref – имя ссылки. После описания ссылке ref можно присвоить значение – адрес объекта типа My. Type. Создание объектов Все объекты в Java создаются только явно, для чего используется операция new. ref = new My. Type(); Создается объект типа My. Type и его адрес заносится в ref. Описание ссылки можно совместить с инициализацией. My. Type ref = new My. Type();

Ссылка хранит адрес объекта, а объект уже хранит содержательную информацию. В отличие от ссылок, Ссылка хранит адрес объекта, а объект уже хранит содержательную информацию. В отличие от ссылок, данные базовых типов являются самосодержащими, они сами хранят содержательную информацию. Ссылка на объект My. Type ref = new My. Type(); ref Объект класса My. Type адрес Данное базового типа int var = 3; 3

Описание полей класса Поля класса (fields or instance variable) • определяют, из каких данных Описание полей класса Поля класса (fields or instance variable) • определяют, из каких данных будут состоять объекты этого класса. • могут быть ссылками на другие объекты или элементарными данными (данными базовых типов). • описываются непосредственно в теле класса, на том же уровне вложенности, что и методы класса. class Some. Class { int i = 0; My. Type ref; … // методы класса … }

Описание методов класса <тип> <имя_метода> ([<аргументы>]) { <тело_метода> } <тип> – один из базовых Описание методов класса <тип> <имя_метода> ([<аргументы>]) { <тело_метода> } <тип> – один из базовых типов или имя класса <аргументы> – список (возможно пустой) параметров <тело_метода> – собственно программный код Каждый аргумент метода – пара “<тип> <имя_аргумента>” Аргументы отделяются друг от друга запятыми. Описание методов (class methods) расположены внутри класса, на том же уровне вложенности, что и описание полей класса. Не может быть описания метода вне класса или внутри другого метода или блока. Методы, тип возвращаемого значения которых отличается от void, возвращают значение вызывающей процедуре (в место вызова) с помощью следующей формы оператора return: return <значение>

class Some. Class { int i = 0; My. Type ref; … int f(int class Some. Class { int i = 0; My. Type ref; … int f(int k) { int j = 1; My. Type lref; … } void g() { … } … }

Вызов методов При вызове метода класса обязательно должен быть указан объект этого класса и Вызов методов При вызове метода класса обязательно должен быть указан объект этого класса и метод вызывается для этого объекта. a. f(x); b. g(); v = b. f(3); a и b – ссылки с типом Some. Class, x и v – целочисленные переменные При вызове метода класса из метода того же класса объект указывать не обязательно.

Доступ к полям класса При обращении к полю класса извне класса объект должен быть Доступ к полям класса При обращении к полю класса извне класса объект должен быть указан явно (при помощи ссылки на объект) перед именем поля через точку. obj. i = 100; x = obj. ref; obj – ссылка с типом Some. Class, i и ref – поля класса Изнутри класса (из методов класса) можно обращаться к полям класса напрямую.

Конструктор класса My. Type ref = new My. Type(); В данном примере имя класса, Конструктор класса My. Type ref = new My. Type(); В данном примере имя класса, за которым следуют круглые скобки, указывает конструктор данного класса. Конструктор инициализирует объект непосредственно во время создания. Его имя совпадает с именем класса, в котором он находится, а синтаксис аналогичен синтаксису метода. Как только он определен, конструктор автоматически вызывается непосредственно после создания объекта, перед завершением выполнения операции new. Однако если никакой явный конструктор не указан, Java автоматически предоставит конструктор, используемый по умолчанию. Описание конструктора класса <имя_конструктора> ([<аргументы>]) { <тело_конструктора> }

class Some. Class { int i; My. Type ref; Some. Class(int kvar, My. Type class Some. Class { int i; My. Type ref; Some. Class(int kvar, My. Type kref) { i = kvar; ref = kref; } … } Some. Class obj = new Some. Class(100, my. Type. Ref);

Область видимости и время жизни переменных В Java только один тип переменных – локальные Область видимости и время жизни переменных В Java только один тип переменных – локальные переменные. Время жизни переменной в Java определяется правилом – переменная создается в точке ее описания и существует до момента окончания того блока, в котором находится данное описание. В Java блок – это то, что начинается открывающей фигурной скобкой ‘{’ и заканчивается закрывающей фигурной скобкой ‘}’. Областью видимости переменной является фрагмент программы от точки ее описания до конца текущего блока. Если в блоке, где описана данная переменная, вложены другие блоки, то переменная доступна в этих блоках. Но, в отличие от многих других языков, в Java запрещено переопределять переменную во вложенных блоках.

Область видимости и время жизни объектов Область видимости объекта определяется областью видимости ссылок на Область видимости и время жизни объектов Область видимости объекта определяется областью видимости ссылок на этот объект, так как объекты доступны в программе только через ссылки на них. Время жизни объекта в Java определяется правилом – объект существует, пока существует хотя бы одна ссылка на этот объект. Как только прекращает существование последняя ссылка на объект, он становится недоступным и может быть уничтожен. В Java нет явного уничтожения объектов. Объекты уничтожаются (утилизируются) сборщиком мусора (garbage collector), который работает в фоновом режиме параллельно с самой программой на Java. { Some. Type local. Reference = new Some. Type(); global. Reference = local. Reference; }

Описатели ограничения доступа Такие элементы языка Java как класс, поле и метод имеют ограничения Описатели ограничения доступа Такие элементы языка Java как класс, поле и метод имеют ограничения доступа. Для описания ограничений доступа используются ключевые слова public, private, protected. • public – означает, что данный элемент доступен без ограничений; • private – доступ разрешен только из данного класса; • protected – доступ разрешен из данного класса и из всех классов-потомков, а также из всех классов данного пакета; • без описателя – доступ разрешен из всех классов данного пакета. Для классов применим только описатель public. Кроме того, классы могут не иметь никакого описателя ограничения доступа. Для полей и методов применимы все 4 варианта ограничения доступа.

Преобразование и приведение типов Преобразование с расширением, производится автоматически при соблюдении следующих условий: • Преобразование и приведение типов Преобразование с расширением, производится автоматически при соблюдении следующих условий: • оба типа совместимы; • длина целевого типа больше длины исходного типа. Например, int вмещает в себя byte. Преобразование с сужением, производится с использованием приведения типов (явного преобразования). (<целевой_тип>) <значение> Наример, b = (byte) i;

Операторы Java. Операторы в языке Java - это специальные символы, которые сообщают транслятору о Операторы Java. Операторы в языке Java - это специальные символы, которые сообщают транслятору о том, что вы хотите выполнить операцию с некоторыми операндами. • унарные операторы – операторы, требующие одного операнда; • инфиксные бинарные операторы – операторы, которые ставятся между двумя операндами; • тернарные операторы – операторы, требующие наличие трех операндов; • постфиксные операторы – операторы, которые ставятся после операнда; • префиксные операторы – операторы, которые ставятся перед операндом. В Java имеется 44 встроенных оператора. Их можно разбить на 4 класса арифметические, битовые, операторы сравнения и логические.

Арифметические операторы. Оператор Результат Оператор + сложение += - вычитание (также унарный минус) -= Арифметические операторы. Оператор Результат Оператор + сложение += - вычитание (также унарный минус) -= * умножение *= / деление /= % деление по модулю %= ++ инкремент -- Результат сложение с присваиванием вычитание с присваиванием умножение с присваиванием деление по модулю с присваиванием декремент Арифметические операторы используют для работы над числовыми типами. Также допускается использовать для работы с типом char, поскольку в Java тип char - это подмножество типа int.

Оператор деления по модулю (%) возвращает остаток от деления первого операнда на второй. В Оператор деления по модулю (%) возвращает остаток от деления первого операнда на второй. В отличие от C++, данный оператор в Java работает не только с целыми, но и с вещественными типами. Операторы инкремента и декремента могут использоваться как в префиксной, так и в постфиксной форме. int a = 4, b = 2, c, d; double e = 3. 7; c = a / b; d = ++c; b *= a; a -=- d; e %= 0. 9;

a = 7; b = 8; c = 3; d = 3; e = a = 7; b = 8; c = 3; d = 3; e = 0. 1; Целочисленные битовые операторы. Оператор Результат побитовое унарное отрицание (NOT) Оператор Результат & побитовое И (AND) &= | побитовое ИЛИ (OR) |= ^ побитовое исключающее ИЛИ (XOR) ^= >> сдвиг вправо >>= >>> сдвиг вправо с заполнением нулями >>>= << сдвиг влево <<= ~ побитовое И (AND) с присваиванием побитовое ИЛИ (OR) с присваиванием побитовое исключающее ИЛИ (XOR) с присваиванием сдвиг вправо с заполнением нулями с присваиванием сдвиг влево с присваиванием

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

int a = 3, b = 6, c, d, e, f, g; c = int a = 3, b = 6, c, d, e, f, g; c = a | b; d = a & b; e = a ^ b; f = (~a & b) | (a & ~b); g = ~a & 0 x 0 f; a <<= 1; b = g >> 3;

a = 6; b = 1; c = 7; d = 2; e = a = 6; b = 1; c = 7; d = 2; e = 5; f = 5; g = 12; Операторы сравнения. Оператор Результат == равно != не равно > больше < меньше >= больше или равно <= меньше или равно

Булевы логические операторы. Оператор Результат & логическое И (AND) &= И (AND) с присваиванием Булевы логические операторы. Оператор Результат & логическое И (AND) &= И (AND) с присваиванием | логическое ИЛИ (OR) = ИЛИ (OR) с присваиванием ^= исключающее ИЛИ (XOR) с присваиванием == равно != не равно ? : тернарный оператор ifthen-else ^ || && ! логическое исключающее ИЛИ (XOR) оператор OR быстрой оценки выражений (short circuit OR) оператор AND быстрой оценки выражений (short circuit AND) логическое унарное отрицание (NOT) Булевы логические операторы используют только с операндами типа boolean.

При использовании операторов быстрой оценки выражений && и || вместо обычных форм & и При использовании операторов быстрой оценки выражений && и || вместо обычных форм & и |, то Java не производит оценку правого операнда логического выражения, если ответ ясен из значения левого операнда. Тернарный оператор if-then-else <выражение 1>? <выражение 2>: <выражение. З> В качестве первого операнда (<выражение 1>) может быть использовано любое выражение, результатом которого является значение типа boolean. Если результат равен true, то выполняется оператор, заданный вторым операндом (<выражение 2>). Если же первый операнд paвен false, то выполняется третий операнд (<выражение. З>). Второй и третий операнды должны возвращать значения одного типа и не должны иметь тип void.

Приоритет операторов Высший ( ) ~ * + >> > == & ^ | Приоритет операторов Высший ( ) ~ * + >> > == & ^ | && | | ? : = [ ] ! / >>> >= != < op= . % << < Низший <=

Управляющие операторы Оператор if (условный оператор) if(<условие>) <оператор>; else <оператор>; <оператор> – одиночный оператор Управляющие операторы Оператор if (условный оператор) if(<условие>) <оператор>; else <оператор>; <оператор> – одиночный оператор или составной оператор (блок) <условие> – любое выражение, возвращающее значение типа boolean. Выражение else не обязательно. Многозвенная структура if-else-if if(<условие>) <оператор>; else if(<условие>) <оператор>; … else <оператор>;

Оператор switch (оператор выбора) switch(<выражение>) { case <значение 1>: // последовательность операторов break; case Оператор switch (оператор выбора) switch(<выражение>) { case <значение 1>: // последовательность операторов break; case <значение 2>: // последовательность операторов break; … case <значение. N>: // последовательность операторов break; default: // последовательность операторов, выполняемая по умолчанию } <выражение> должно иметь тип byte, short, int или char. Тип каждого <значения>, указанного в операторах case должен быть совместим с типом <выражения>. Дублирование значений case не допускается.

Оператор while (оператор цикла с предусловием) while(<условие>) { // тело цикла } <условием> может Оператор while (оператор цикла с предусловием) while(<условие>) { // тело цикла } <условием> может быть любое булевское выражение. Тело цикла будет выполняться до тех пор, пока условное выражение истинно. Когда <условие> становится ложным, управление передается строке кода, непосредственно следующей за циклом. Фигурные скобки могут быть опущены, только если в цикле повторяется только один оператор. Оператор do-while (оператор цикла с постусловием) do { // тело цикла } while(<условие>); При каждом повторении такого цикла программа вначале выполняет тело цикла, а затем вычисляет условное выражение. Если это выражение истинно, цикл повторяется, иначе выполнение цикла прерывается.

Оператор for (оператор цикла по счетчику) for(<инициализация>; <условие>; <повторение>) { // тело цикла } Оператор for (оператор цикла по счетчику) for(<инициализация>; <условие>; <повторение>) { // тело цикла } При первом запуске цикла программа выполняет инициализационную часть цикла. В общем случае это выражение, устанавливающее значение управляющей переменной цикла, которая действует в качестве счетчика, управляющего циклом. Затем программа вычисляет условие, которое должно быть булевским выражением. Если это выражение истинно, программа выполняет тело цикла. Затем программа выполняет часть <повторение> цикла. Оператор continue (оператор продолжения цикла). Позволяет начать новую итерацию цикла, не доводя до конца текущую итерацию. Оператор break (оператор выхода из блока). Позволяет выйти из текущего блока в операторе выбора или из тела цикла.

Массивы в Java Одномерные массивы <тип> <имя_переменной_массива>[]; или <тип>[] <имя_переменной_массива>; Например, int n. Numbers[]; Массивы в Java Одномерные массивы <тип> <имя_переменной_массива>[]; или <тип>[] <имя_переменной_массива>; Например, int n. Numbers[]; int[] n. Another. Numbers; Для выделения памяти под массивы используют операцию new. <имя_переменной_массива> = new <тип>[<размер>]; Например, n. Numbers = new int[10];

Для выделения памяти под массивы также можно использовать явную инициализацию элементов массива через фигурные Для выделения памяти под массивы также можно использовать явную инициализацию элементов массива через фигурные скобки. В таком случае использование операции new не требуется. Массив будет автоматически создан достаточно большим, чтобы в нем могли уместиться все элементы, указанные в инициализаторе массива. int month_days[] = {31, 28, 31, 30, 31, 30, 31}; Многомерные массивы При объявлении переменной многомерного массива для указания каждого дополнительного индекса используют отдельный набор квадратных скобок. int two. D[][] = new int[4][5];