Програмни езици - java

65
1 Програмни езици Програмни езици - - Java Java Лектор: Лектор: Гл.ас. д-р Даниела Гоцева Гл.ас. д-р Даниела Гоцева [email protected] [email protected]

Upload: abel

Post on 12-Jan-2016

38 views

Category:

Documents


0 download

DESCRIPTION

Програмни езици - Java. Лектор: Гл.ас. д-р Даниела Гоцева [email protected]. Лексическа структура на Java. Структура на Java програма. Програмите на Java се пишат в Unicode. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Програмни езици  - Java

1

Програмни Програмни езициезици - - JavaJava

Лектор:Лектор:

Гл.ас. д-р Даниела ГоцеваГл.ас. д-р Даниела Гоцева

[email protected]@tu-sofia.bg

Page 2: Програмни езици  - Java

2

Лексическа структура Лексическа структура на на JavaJava

Page 3: Програмни езици  - Java

3

Структура на Структура на JavaJava програмапрограма

Програмите на Java се пишат в Unicode. Прави се лексическа транслация, с която Unicode

escapes (\uXXXX) могат да се ползват за да вкл. Произволни Unicode символи, използващи само ASCII символи.

Дефинирани са символи за край на ред (LF, CR) за работа под различни ОС.

Символите Unicode, получени вследствие лексическата транслация се редуцират до набор white space (HT, space, FF, LF, CR) символи, коментари и tokens.

Tokens са: Идентификатори; Ключови думи Литерали Разделители Операции.

Page 4: Програмни езици  - Java

4

ЛитералиЛитерали ЦелочислениЦелочислени Плаваща запетаяПлаваща запетая БулевиБулеви

truetrue falsefalse

null null СимволниСимволни

UTF-16 [[ U+0000, U+10FFFF ]

НизовиНизови

Page 5: Програмни езици  - Java

5

Низови литерали - Низови литерали - примерпример

package Test;class Other { public static String hello = "Hello"; };class Test {

public static void main(String[] args) {String hello = "Hello", lo = "lo";System.out.print((hello == "Hello") + " "); //trueSystem.out.print((Other.hello == hello) + " "); //trueSystem.out.print((other.Other.hello == hello) + " "); //trueSystem.out.print((hello == ("Hel"+"lo")) + " "); //trueSystem.out.print((hello == ("Hel"+lo)) + " "); //falseSystem.out.println(("Hel"+lo).equals(hello)); //true }

}package other;public class Other { public static String hello = "Hello"; }

Page 6: Програмни езици  - Java

6

Типове, променливи и Типове, променливи и операцииоперации

Page 7: Програмни езици  - Java

7

Типове в Java

Примитиви

Рефериращи

boolean

Числови

Интегрални

float double

byte

short

int long

char

class

interface

масив

null

Page 8: Програмни езици  - Java

8

Типове в Типове в JavaJava

JavaJava е строго типизиран език, което е строго типизиран език, което означава, че всяка променлива и означава, че всяка променлива и стойност трябва да има тип по време стойност трябва да има тип по време на компилация.на компилация.

Интегрални типове:Интегрални типове: byte – byte – знаков 8 битазнаков 8 бита, , клас клас ByteByte shortshort – знаков 16 бита – знаков 16 бита, , клас клас ShortShort int – int – знаков 32 битазнаков 32 бита, , клас клас IntegerInteger long – long – знаков 64 битазнаков 64 бита, , клас клас LongLong charchar – символ, 16 бита – символ, 16 бита,, клас клас CharacterCharacter

Page 9: Програмни езици  - Java

9

Типове в Типове в JavaJava

Грешки, получавани при операциите Грешки, получавани при операциите върху интегрален тип данни:върху интегрален тип данни: NullPointerException – при пробразуване

от клас в примитивна данна ArithmeticException – при делене на нула OutOfMemoryError – при преобразуване

от примитивен тип в съответния клас

Page 10: Програмни езици  - Java

10

Типове в Типове в JavaJava Типове с ПЗ:Типове с ПЗ:

float – 32 float – 32 бита, бита, IEEE 754IEEE 754, клас , клас FloatFloat double – 64 double – 64 бита, бита, IEEE 754, IEEE 754, клас клас DoubleDouble

IEEE 754-1985 IEEE 754-1985 включва включва :: (+) и (-) числа, представени с експонента и (+) и (-) числа, представени с експонента и

нормализирана мантиса;нормализирана мантиса; (+) и (-) нула:(+) и (-) нула:

Равни са по стойност, ползват се при безкрайностРавни са по стойност, ползват се при безкрайност (+) и (-) безкрайност ((+) и (-) безкрайност (infinite)infinite)::

1.0/0.0 = +∞1.0/0.0 = +∞ 1.0/-0.0 = -∞1.0/-0.0 = -∞

NaNNaN – получава се при неправилна операция, напр. – получава се при неправилна операция, напр. делене на нула. делене на нула.

JavaJava 1.3+ дава възможност да се получат различни видове 1.3+ дава възможност да се получат различни видове NaNNaN с цел диагностика. с цел диагностика.

Page 11: Програмни езици  - Java

11

Типове в Типове в JavaJava Грешки, получавани при операциите върху Грешки, получавани при операциите върху

данни ПЗ:данни ПЗ: NullPointerException – при пробразуване от

клас в примитивна данна OutOfMemoryError – при преобразуване от

примитивен тип в съответния клас Препълване отгоре при операции дава

безкрайност. Препълване отдолу дава ненормализирана

мантиса или знакова нула. Неправилна операция дава NaN. Ако в операция участва един NaN

резултатът е NaN.

Page 12: Програмни езици  - Java

12

Типове в Типове в JavaJava

Булев тип:Булев тип: booleanboolean, клас , клас BooleanBoolean Участва само в логически операции и Участва само в логически операции и

конкатенация (+).конкатенация (+).

Page 13: Програмни езици  - Java

13

Типове в Типове в JavaJava

Рефериращи типове:Рефериращи типове: Клас Клас Object. Object. По-важни методи:По-важни методи:

getClass връща обект от тип Class, който представя класа на обекта. Такъв опбект съществува за всички рефериращи типове.

toString преобразува обекта към String. equals и hashCode се използват в хештаблици

като equals връща true когато 2 обекта са еднакви.

clone прави копие на обект. finalize се извиква преди унищожаване на

обекта.

Page 14: Програмни езици  - Java

14

Типове в Типове в JavaJava Клас Клас StringString::

Работи само с константни стойности.Работи само с константни стойности. Поддържа операция конкатенация (+)Поддържа операция конкатенация (+)

2 рефериращи типа са еднакви по време 2 рефериращи типа са еднакви по време на компилация, ако имат едно и също на компилация, ако имат едно и също име и еднакви типови параметри.име и еднакви типови параметри.

2 класа или 2 интерфейса са еднакви по 2 класа или 2 интерфейса са еднакви по време на работа на програмата, ако време на работа на програмата, ако имат едно и също име и еднакъв имат едно и също име и еднакъв class class loader.loader.

2 масива са еднакви, ако имат еднакви 2 масива са еднакви, ако имат еднакви типове на елементите.типове на елементите.

Page 15: Програмни езици  - Java

15

Типове в Типове в JavaJava

Типова променлива:Типова променлива: Променлива, дефинираща родов клас Променлива, дефинираща родов клас

(шаблонен), родов интерфейс, родов (шаблонен), родов интерфейс, родов метод или родов конструктор.метод или родов конструктор.

Пример: Пример: <T extends C&I><T extends C&I>, Т , Т наследява членове на С и наследява членове на С и II, където , където C C ee клас, а клас, а I I - интерфейс, които са в - интерфейс, които са в същата област на действие.същата област на действие.

Page 16: Програмни езици  - Java

16

Типове в Типове в JavaJava

Параметризиран тип – състои се от Параметризиран тип – състои се от клас или интерфейс и списък от клас или интерфейс и списък от параметри.параметри.

Пример:Пример: Vector<String>Vector<String> Vector<int>Vector<int> Pair<String,Integer>Pair<String,Integer>

Pair<String>Pair<String>public Method getMethod(Class<?>[]

parameterTypes) { ... }boolean addAll(Collection<? Extends C> c) {…}

Page 17: Програмни езици  - Java

17

Типове в Типове в JavaJava

Супертип и подтип Супертип и подтип (S (S >1T):T): double double >1 float float

float float >1 long long

long long >1 int int

int int >1 char char

int int >1 short short

short short >1 byte byte Клас и суперклас, суперинстанцияКлас и суперклас, суперинстанция

Page 18: Програмни езици  - Java

18

Променливи и Променливи и константи в константи в JavaJava

Видове променливи:Видове променливи: Клас-променливи – както Клас-променливи – както static static в Св С Променливи на обектПроменливи на обект Компоненти на масивиКомпоненти на масиви

Неименовани променливи, които се създават и Неименовани променливи, които се създават и инициализират при създаване на масивинициализират при създаване на масив

Формални параметриФормални параметри Параметри на конструкторитеПараметри на конструкторите Параметри за обработка на изключителни Параметри за обработка на изключителни

ситуацииситуации Локални – в пределите на Локални – в пределите на

Page 19: Програмни езици  - Java

19

Променливи и Променливи и константи в константи в JavaJava

Дефиниране на константи:Дефиниране на константи: final static double PI=3.14;final static double PI=3.14;

Инициализация на променливи, Инициализация на променливи, членове на клас:членове на клас: boolean – false;boolean – false; класове – класове – null;null; char – ‘\u0000’;char – ‘\u0000’; Всички останали примитиви – нула.Всички останали примитиви – нула.

Локалните променливи нямат Локалните променливи нямат инициализация.инициализация.

Page 20: Програмни езици  - Java

20

Преобразуване на Преобразуване на типоветипове

Преобразуване при присвояванеПреобразуване при присвояване Няма към булев типНяма към булев тип Генерират се следните грешки: Генерират се следните грешки:

OutOfMemoryError, NullPointerException, OutOfMemoryError, NullPointerException, ClassCastExceptionClassCastException

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

Смяна на типа: (нов_тип) пром.Смяна на типа: (нов_тип) пром. Всички типове могат да се преобразуват Всички типове могат да се преобразуват

към към String.String.

Page 21: Програмни езици  - Java

21

Преобразуване на Преобразуване на типоветипове

Преобразуване между примитиви:Преобразуване между примитиви: Към по-голям тип:Към по-голям тип:

byte към short, int, long, float или double short към int, long, float или double char към int, long, float или double int към long, float или double long към float или double float към double

Page 22: Програмни езици  - Java

22

Преобразуване на Преобразуване на типоветипове

Към по-малък тип:Към по-малък тип: short към byte или char char към byte или short int към byte, short или char long към byte, short, char или int float към byte, short, char, int или long double към byte, short, char, int, long или

float byte към char – става през int

Page 23: Програмни езици  - Java

23

Преобразуване на Преобразуване на типоветипове

Между класове:Между класове: Тип към супертипТип към супертип Клас към интерфейс без параметри – Клас към интерфейс без параметри –

ако класа не е ако класа не е final final и не реализира и не реализира интерфейсаинтерфейса

Интерфейс към клас без параметри – Интерфейс към клас без параметри – ако класа не е ако класа не е finalfinal

Интерфейс Интерфейс Clonable java.io.SerializableClonable java.io.Serializable към масив от обектикъм масив от обекти

Page 24: Програмни езици  - Java

24

Преобразуване на Преобразуване на типоветипове

Интерфейс към непараметризиран Интерфейс към непараметризиран интерфейс – ако първия не е подтип интерфейс – ако първия не е подтип на вторияна втория

Един тип масив към друг тип масив – Един тип масив към друг тип масив – ако са съвместими рефериращи ако са съвместими рефериращи типоветипове

Всеки примитив може да се Всеки примитив може да се преобразува до съответния си клас и преобразува до съответния си клас и обратно.обратно.

Page 25: Програмни езици  - Java

25

Достъп до именатаДостъп до имената Пакетът винаги е достъпен.Пакетът винаги е достъпен. Когато един клас или интерфейс има Когато един клас или интерфейс има

модификатор за достъп модификатор за достъп public, public, той е той е достъпен за всички пакети. достъпен за всички пакети.

Когато клас или интерфейс няма Когато клас или интерфейс няма модификатор за достъп не може да се модификатор за достъп не може да се ползва извън пакета, в който е ползва извън пакета, в който е дефиниран.дефиниран.

Един масив е достъпен само ако типа на Един масив е достъпен само ако типа на неговите елементи е достъпен.неговите елементи е достъпен.

Данните и методите Данните и методите protectedprotected са са достъпни е рамките на пакета и извън достъпни е рамките на пакета и извън него само в наследниците на класа. него само в наследниците на класа.

Page 26: Програмни езици  - Java

26

Пълно квалифицирано Пълно квалифицирано имеиме

Примитивните типове не се квалифицират.Примитивните типове не се квалифицират. Името на пакет, който е на най-високо ниво Името на пакет, който е на най-високо ниво

не се квалифицира.не се квалифицира. Името на подпакет се квалифицира Името на подпакет се квалифицира

пакет.подпакетпакет.подпакет Името на клас или интерфейс на най-високо Името на клас или интерфейс на най-високо

ниво в безименен пакет не се квалифицира.ниво в безименен пакет не се квалифицира. Името на клас или интерфейс, декларирано Името на клас или интерфейс, декларирано

в пакет се квалифицира пакет.клас и в пакет се квалифицира пакет.клас и пакет.интерфейс съответно.пакет.интерфейс съответно.

Page 27: Програмни езици  - Java

27

Правила за именованеПравила за именоване

Името на пакет започва с малка Името на пакет започва с малка буква и не трябва да започва с буква и не трябва да започва с javajava..

Името на клас трябва да е Името на клас трябва да е съществително или съществителна съществително или съществителна фраза, като всяка дума да започва с фраза, като всяка дума да започва с главна буква.главна буква.

Името на интерфейс трябва да е Името на интерфейс трябва да е съществително, съществителна съществително, съществителна фраза или допълнение като всяка фраза или допълнение като всяка дума да започва с главна буква.дума да започва с главна буква.

Page 28: Програмни езици  - Java

28

Правила за именованеПравила за именоване Типовите имена започват с главна буква.Типовите имена започват с главна буква. Името на метод трябва да е глагол или Името на метод трябва да е глагол или

глаголна фраза, като всяка дума, без глаголна фраза, като всяка дума, без първата, да започва с главна буква.първата, да започва с главна буква.

Името на данна поле на клас, което не е Името на данна поле на клас, което не е константа, трябва да е съществително или константа, трябва да е съществително или съществителна фраза, като всяка дума, съществителна фраза, като всяка дума, без първата, да започва с главна буква.без първата, да започва с главна буква.

Константата се записва само с главни Константата се записва само с главни букви като отделните думи се свързват с букви като отделните думи се свързват с подчертавка.подчертавка.

Page 29: Програмни езици  - Java

29

Правила за именованеПравила за именоване

Имената на локални променливи и Имената на локални променливи и формални параметри трябва да са формални параметри трябва да са кратки, да не са само от един кратки, да не са само от един символ. Изключения се допускат символ. Изключения се допускат (за едносимволни имена) само за (за едносимволни имена) само за temptemp променливи и управляващи променливи и управляващи цикъл.цикъл.

Page 30: Програмни езици  - Java

30

ПакетиПакети

Page 31: Програмни езици  - Java

31

ПакетиПакети

Програмите на Програмите на javajava са организирани в са организирани в пакети.пакети.

В една програма може да има само един В една програма може да има само един пакет без име. Всички останали имат име и пакет без име. Всички останали имат име и могат да бъдат съхранени във файл или БД. могат да бъдат съхранени във файл или БД.

Пакетът съдържа произволен брой Пакетът съдържа произволен брой компилируеми файлове. Всеки файл има компилируеми файлове. Всеки файл има достъп до данните, методите и типовете на достъп до данните, методите и типовете на своя пакет и тези от своя пакет и тези от java.lang.java.lang.

Имената на пакетите трябва да са Имената на пакетите трябва да са уникални.уникални.

Page 32: Програмни езици  - Java

32

Членове на пакетиЧленове на пакети

Всички подпакети, класове и Всички подпакети, класове и интерфейси, декларирани на външно интерфейси, декларирани на външно ниво в пакета са негови членове.ниво в пакета са негови членове.

Пример - Пример - Java APIJava API има следните пакети: има следните пакети: Пакетът java има awt, applet, io, lang, net и

util подпакети и няма компилируеми файлове.

Пакетът java.awt има подпакет image и множество компилируеми файлове, съдържащи декларации на класове и интерефейси.

Page 33: Програмни езици  - Java

33

Членове на пакетиЧленове на пакети

Не се разрешава име на пакет да Не се разрешава име на пакет да съвпада с име на клас или съвпада с име на клас или интерфейс в него.интерфейс в него.

Не се разрешава име на пакет да Не се разрешава име на пакет да съвпада с име на негов подпакет.съвпада с име на негов подпакет.

Page 34: Програмни езици  - Java

34

Съхранение на пакетиСъхранение на пакети Всички пакети и прилежащите им Всички пакети и прилежащите им

сорсове се съхраняват в директория и сорсове се съхраняват в директория и поддиректории.поддиректории.

Всяка поддиректория представя пакет.Всяка поддиректория представя пакет. В директориите се намират сорс В директориите се намират сорс

кода кода .java.java и двоичния код и двоичния код .class..class. За да се намали обема памет За да се намали обема памет

директориите се архивират в директориите се архивират в jarjar архиви. архиви. За достъп до класовете в пакет се За достъп до класовете в пакет се

посочва относителния път спрямо посочва относителния път спрямо пакета на топ ниво като пакета на топ ниво като \\ се замества с . се замества с .

Пример: Пример: java.awt.imagejava.awt.image

Page 35: Програмни езици  - Java

35

Компилируеми файлови Компилируеми файлови единициединици

Компилируема единица е файл, Компилируема единица е файл, съдържащ:съдържащ: Декларация на пакетДекларация на пакет Импортиране на пакетИмпортиране на пакет Декларация на типовеДекларация на типове

Page 36: Програмни езици  - Java

36

Декларация на пакетДекларация на пакет

package package име;име; Безименният пакет няма подпакети. Той Безименният пакет няма подпакети. Той

не се декларира.не се декларира. Всеки пакет и неговите подпакети са Всеки пакет и неговите подпакети са

видими навсякъде, където са видими навсякъде, където са импортирани.импортирани.

java.langjava.lang се импортира автоматично. се импортира автоматично. Всеки файл съдържа само един Всеки файл съдържа само един public public

клас, чието име съвпада с името на клас, чието име съвпада с името на файла.файла.

Page 37: Програмни езици  - Java

37

Импортиране на пакетИмпортиране на пакет

Може да се импортира цял пакет или само Може да се импортира цял пакет или само конкретен файл.конкретен файл. import java.util.*;import java.util.*; import java.util.Vector;import java.util.Vector;

Импортират се само Импортират се само publicpublic типовете на типовете на файла.файла.

Съществува и импортиране на статични Съществува и импортиране на статични типове:типове: import static import static тип.идентификатор;тип.идентификатор; import static import static тип.*;тип.*;

java.langjava.lang се импортира автоматично. се импортира автоматично.

Page 38: Програмни езици  - Java

38

Декларации на топ ниво Декларации на топ ниво на пакетна пакет

Тук се включват:Тук се включват: Декларация на класДекларация на клас Декларация на интерфейсДекларация на интерфейс

Не се допуска съвпадение между Не се допуска съвпадение между имената на клас и интерефейс.имената на клас и интерефейс.

Декларациите на топ ниво са само Декларациите на топ ниво са само public.public.

Не се допуска импортиране на Не се допуска импортиране на конкретен клас и деклариране на клас конкретен клас и деклариране на клас със същото име.със същото име.

Page 39: Програмни езици  - Java

39

Класове в Класове в JavaJava

Page 40: Програмни езици  - Java

40

ВъведениеВъведение Класификация според нивото на Класификация според нивото на

декларация:декларация: Декларирани на външно нивоДекларирани на външно ниво Вложени в друг класВложени в друг клас

Локални класовеЛокални класове Анонимни класовеАнонимни класове

Видове класове: Видове класове: АбстрактниАбстрактни finalfinal – не могат да се наследяват – не могат да се наследяват publicpublic РодовиРодови

Няма множествено наследяване!Няма множествено наследяване!

Page 41: Програмни езици  - Java

41

ВъведениеВъведение

Членовете на клас и интерфейс Членовете на клас и интерфейс могат да имат модифкатори за могат да имат модифкатори за достъп: достъп: public, private, protected.public, private, protected.

Членовете на един клас скриват Членовете на един клас скриват наследените със същото име.наследените със същото име.

Полетата могат да бъдат:Полетата могат да бъдат: finalfinal staticstatic Друг класДруг клас

Page 42: Програмни езици  - Java

42

ВъведениеВъведение

Методите могат да бъдат:Методите могат да бъдат: finalfinal – не могат да се припокриват – не могат да се припокриват abstractabstract – нямат реализация – нямат реализация synchronizedsynchronized – за работа с нишки; – за работа с нишки;

заключва обектазаключва обекта nativenative – код, зависим от реализацията си – код, зависим от реализацията си

Методите могат да се припокриват.Методите могат да се припокриват. Няма деструктори.Няма деструктори.

Page 43: Програмни езици  - Java

43

Деклариране на класДеклариране на клас

[[МодификаторМодификатор]] class class идент. идент. [[т.имет.име]] [[родителродител] ] [[интерфейсиинтерфейси]]

тялотяло Модификатори:Модификатори:

public, protected, private, static, final, strictfppublic, protected, private, static, final, strictfp

Един клас има абстрактни методи, ако: Съдържа декларация на абстрактен метод.Съдържа декларация на абстрактен метод. Ако някой от родителските класове има Ако някой от родителските класове има

абстрактен метод, който не е дефиниран в абстрактен метод, който не е дефиниран в текущия.текущия.

Класът наследява интерфейси, които имат Класът наследява интерфейси, които имат абстрактни методи, без да ги реализира.абстрактни методи, без да ги реализира.

Page 44: Програмни езици  - Java

44

Деклариране на класДеклариране на клас Един клас се декларира Един клас се декларира finalfinal, ако не , ако не

трябва да се наследява.трябва да се наследява. Един клас се декларира с Един клас се декларира с strictfpstrictfp, когато , когато

изразите с ПЗ са изразите с ПЗ са FP-strictFP-strict.. Класът е родов, ако има типови Класът е родов, ако има типови

параметри.параметри. Вътрешен клас е вложен клас, който не е Вътрешен клас е вложен клас, който не е

явно или неявно деклариран явно или неявно деклариран static.static. Явна декларация – класът има статични Явна декларация – класът има статични

членове.членове. Неявна декларация – класът наследява клас Неявна декларация – класът наследява клас

със статични членове.със статични членове.

Page 45: Програмни езици  - Java

45

Деклариране на класДеклариране на клас

Вътрешният клас:Вътрешният клас: Няма право да има статични Няма право да има статични

инициализатори.инициализатори. Няма членове интерфейси и членове Няма членове интерфейси и членове static.static. Може да наследява статични членове.Може да наследява статични членове. Не може да се позовава към неконстантни Не може да се позовава към неконстантни

членове на обхващащия клас.членове на обхващащия клас. Може да съдържа локални класове, Може да съдържа локални класове,

анонимни класове и нестатични членове.анонимни класове и нестатични членове.

Page 46: Програмни езици  - Java

46

Деклариране на класДеклариране на клас

Локален клас е клас в пределите на Локален клас е клас в пределите на функция.функция.

Не се допуска инициализация на Не се допуска инициализация на членовете на локален клас, дефиниран членовете на локален клас, дефиниран в пределите на статичен метод, с в пределите на статичен метод, с неконстанти. Това е възможно само за неконстанти. Това е възможно само за локален клас, дефиниран в нестатичен локален клас, дефиниран в нестатичен метод.метод.

Локален клас не може да бъде Локален клас не може да бъде статичен.статичен.

Page 47: Програмни езици  - Java

47

Деклариране на класДеклариране на клас Суперклас е родителят на даден клас.Суперклас е родителят на даден клас.

Директен суперклас – пряк родител на класа.Директен суперклас – пряк родител на класа. Наследеният клас е подклас на своя Наследеният клас е подклас на своя

родител.родител. Връзката подклас е транзитивна.Връзката подклас е транзитивна. Клас С е директно зависим от тип Т, ако Т Клас С е директно зависим от тип Т, ако Т

присъства в присъства в extend.extend. Клас С е зависим от Т, ако е:Клас С е зависим от Т, ако е:

директно зависим.директно зависим. директно зависим от интерфейс, който зависи директно зависим от интерфейс, който зависи

от Т.от Т. Директно зависим от клас, който зависи от Т.Директно зависим от клас, който зависи от Т.

Page 48: Програмни езици  - Java

48

Деклариране на класДеклариране на клас Директен суперинтерфейс – Директен суперинтерфейс –

интерфейс, реализиран от класа.интерфейс, реализиран от класа. Интерфейс Интерфейс II е суперинтерфейс на е суперинтерфейс на

класа С, ако:класа С, ако: I I е директен суперинтерфейс.е директен суперинтерфейс. С има директен суперинтерфейс С има директен суперинтерфейс JJ, на , на

койтокойто I I е суперинтерфейс. е суперинтерфейс. II е суперинтерфейс на директен подклас е суперинтерфейс на директен подклас

на С.на С. Интерфейсите могат да се наследяват.Интерфейсите могат да се наследяват.

Page 49: Програмни езици  - Java

49

Деклариране на класДеклариране на клас

Допуска се създаване реализация Допуска се създаване реализация на интерфейси, притежаващи на интерфейси, притежаващи методи с еднаква сигнатура в един методи с еднаква сигнатура в един клас. Задължително е типът на клас. Задължително е типът на връщаната стойност да съвпада!връщаната стойност да съвпада!

Класът не може да бъде подтип на Класът не може да бъде подтип на два интерфейса, които са различно два интерфейса, които са различно уточнение на общ родов уточнение на общ родов интерфейс.интерфейс.

Page 50: Програмни езици  - Java

50

Членове на класЧленове на клас

Членовете на клас са:Членовете на клас са: Наследени от директния суперклас.Наследени от директния суперклас. Наследени от директните Наследени от директните

суперинтерфейси.суперинтерфейси. Собствени членове.Собствени членове.

Членовете Членовете private private не са достъпни в не са достъпни в подкласовете на класа.подкласовете на класа.

Конструктори, статични Конструктори, статични инициализатори и инициализатори на инициализатори и инициализатори на обекти не се наследяват.обекти не се наследяват.

Page 51: Програмни езици  - Java

51

Членове на класЧленове на клас

Клас, който няма конструктори Клас, който няма конструктори получава такъв по подразбиране (без получава такъв по подразбиране (без параметри):параметри): клас() клас() { super(); }{ super(); }

Обръщението към родителския обект Обръщението към родителския обект става чрез става чрез super.super. Пример: Пример: super.move();super.move();

Наследяване чрез достъп по Наследяване чрез достъп по подразбиране изисква дефиниране на подразбиране изисква дефиниране на метод в суперкласа за работа с метод в суперкласа за работа с недостъпните данни.недостъпните данни.

Page 52: Програмни езици  - Java

52

Членове на класЧленове на клас Един клас може да бъде експортиран Един клас може да бъде експортиран

дори да не е дори да не е publicpublic, ако има метод , ако има метод publicpublic, който връща обект., който връща обект.

Декларацията на членове на клас Декларацията на членове на клас включва следните модификатори: включва следните модификатори: public, protected, private, static, final, public, protected, private, static, final, transient, volatile.transient, volatile. transienttransient – отбелязва, че полето не е част – отбелязва, че полето не е част

от от persistentpersistent състояние на обекта. състояние на обекта. volatile volatile – синхронизира данните при – синхронизира данните при

паралелно програмиране.паралелно програмиране.

Page 53: Програмни езици  - Java

53

Членове на класЧленове на клас

Инициализация на полетата на Инициализация на полетата на клас:клас: Статични полета се инициализират Статични полета се инициализират

само веднъж.само веднъж. static finalstatic final се инициализират първи. се инициализират първи. Полетата на обект се инициализират Полетата на обект се инициализират

всеки път при създаване на обект.всеки път при създаване на обект. В инициализацията могат да се ползват В инициализацията могат да се ползват

други полета на класа с уточнено име.други полета на класа с уточнено име.

Page 54: Програмни езици  - Java

54

Членове на класЧленове на клас

Членовете на клас могат да се Членовете на клас могат да се припокриват в подклас.припокриват в подклас. Ако в един клас са наследени > 1 полета с Ако в един клас са наследени > 1 полета с

еднакви имена и различна декларация (от еднакви имена и различна декларация (от суперклас и интерфейс или от 2 суперклас и интерфейс или от 2 интерфейса), достъпът до тях се интерфейса), достъпът до тях се осъществява чрез уточнено име.осъществява чрез уточнено име.

Ако в един клас са наследени > 1 полета с Ако в един клас са наследени > 1 полета с еднакви имена и еднаква декларация, в еднакви имена и еднаква декларация, в наследника има само по едно копие на наследника има само по едно копие на еднаквите данни.еднаквите данни.

Page 55: Програмни езици  - Java

55

МетодиМетоди Декларация на метод:Декларация на метод:

[[модиф.модиф.][][т.парам.т.парам.]]тип идент.(тип идент.([[сп.парам.сп.парам.]]))[throws [throws сп.изкл.ситуациисп.изкл.ситуации]]

Модификатори:Модификатори: public, protected, private, abstract, final, public, protected, private, abstract, final,

static, synchronized, native, strictfpstatic, synchronized, native, strictfp private, staticprivate, static, , native native и и finalfinal не могат да не могат да

бъдатбъдат abstract abstract.. Един метод, който не е абстрактен, Един метод, който не е абстрактен,

може да бъде предефиниран от такъв.може да бъде предефиниран от такъв.

Page 56: Програмни езици  - Java

56

МетодиМетоди

Метод Метод native native е платформено зависим е платформено зависим метод и е написан на С/С++, метод и е написан на С/С++, Фортран или Асемблер.Фортран или Асемблер.

Модификатор Модификатор synchronizedsynchronized работи работи като монитор за синхронизация на като монитор за синхронизация на данни при паралелно програмиране.данни при паралелно програмиране. Възможно е да не се синхронизира Възможно е да не се синхронизира

целия метод, а само част от него чрез:целия метод, а само част от него чрез: synchronized (this) {…}synchronized (this) {…} – за обекти – за обекти synchronized (Class.ForName(“synchronized (Class.ForName(“класклас”)”))) {…} {…} – –

за за staticstatic

Page 57: Програмни езици  - Java

57

МетодиМетоди

Тип Т1, връщан от метод М1 е Тип Т1, връщан от метод М1 е съвместим с тип Т2, връщан от съвместим с тип Т2, връщан от метод М2:метод М2: Ако Т1 и Т2 са примитиви и са Ако Т1 и Т2 са примитиви и са

идентични.идентични. Ако Т1 и Т2 са рефериращи и:Ако Т1 и Т2 са рефериращи и:

Ако Т1 е подтип на Т2 или може да се Ако Т1 е подтип на Т2 или може да се преобразува до негов подтип илипреобразува до негов подтип или

Т1=Т1=|T2||T2|.. Т1 и Т2 са Т1 и Т2 са void.void.

Page 58: Програмни езици  - Java

58

МетодиМетоди В заглавието на всеки метод трябва да В заглавието на всеки метод трябва да

бъдат описани изключителните бъдат описани изключителните ситуации, които той може да генерира.ситуации, които той може да генерира.

Ако един метод предефинира друг, той Ако един метод предефинира друг, той също трябва да включва също трябва да включва изключителните ситуации на първия.изключителните ситуации на първия.

Overriding – Overriding – получава се при получава се при наследяване, при методи с еднаква наследяване, при методи с еднаква сигнатура. Типът на връщаната сигнатура. Типът на връщаната стойност трябва да съвпада, защото се стойност трябва да съвпада, защото се генерира грешка.генерира грешка.

Page 59: Програмни езици  - Java

59

МетодиМетоди

Overloading – Overloading – получава се при методи в получава се при методи в един клас с различна сигнатура.един клас с различна сигнатура.

Hiding – Hiding – когато един метод се скрие от когато един метод се скрие от метод на наследника.метод на наследника. В следващото поколение методът на В следващото поколение методът на

прародителя е недостъпен, поради което се прародителя е недостъпен, поради което се ползва ползва overload.overload.

Кой метод ще се извика зависи от Кой метод ще се извика зависи от стойността на променливата обект. Ако стойността на променливата обект. Ако методът е статичен в сила е типа на тази методът е статичен в сила е типа на тази променлива.променлива.

Page 60: Програмни езици  - Java

60

КонструкториКонструктори Не могат да се ползват модификатори: Не могат да се ползват модификатори:

final, static, synchronized, strictfp, native, final, static, synchronized, strictfp, native, abstract.abstract.

Ако няма модификатор се подразбира Ако няма модификатор се подразбира private.private.

Ако няма явно дефиниран конструктор, се Ако няма явно дефиниран конструктор, се създава автоматично такъв по създава автоматично такъв по подразбиране.подразбиране.

Ако се дефинира явно конструктор с Ако се дефинира явно конструктор с параметри, трябва да се дефинира и такъв параметри, трябва да се дефинира и такъв по подразбиране явно от програмиста.по подразбиране явно от програмиста.

Page 61: Програмни езици  - Java

61

КонструкториКонструктори

Допуска се дефиниране на родов Допуска се дефиниране на родов конструктор за родовите класове.конструктор за родовите класове.

Конструкторът може да прихваща Конструкторът може да прихваща изключителни ситуации точно както изключителни ситуации точно както методите.методите.

Родителският конструктор се извиква Родителският конструктор се извиква със със super()super() от тялото на наследника. от тялото на наследника.

Ако няма явно обръщение към Ако няма явно обръщение към super()super() се извиква неявно конструкторът по се извиква неявно конструкторът по подразбиране на суперкласа.подразбиране на суперкласа.

Page 62: Програмни езици  - Java

62

КонструкториКонструктори Обръщение от един конструктор на текущия клас към Обръщение от един конструктор на текущия клас към

друг става с друг става с this(this(парам.).парам.). Обръщение към вложен клас:Обръщение към вложен клас:classclass Outer { Outer { publicpublic classclass Inner { Inner { publicpublic Inner(){ } Inner(){ } }} publicpublic Outer(){ } Outer(){ }}}

classclass InnerChild InnerChild extendsextends Outer.Inner { Outer.Inner { publicpublic InnerChild() { ( InnerChild() { (newnew Outer()). Outer()).supersuper(); }(); }}}

Page 63: Програмни езици  - Java

63

КонструкториКонструктори

Конструкторът по подразбиране Конструкторът по подразбиране няма няма throwthrow клауза. клауза.

Видимостта на конструкторът по Видимостта на конструкторът по подразбиране се определя от подразбиране се определя от видимостта на класа.видимостта на класа.

Създаването на обект може да се Създаването на обект може да се контролира ако се модифицира контролира ако се модифицира видимостта на конструктора.видимостта на конструктора.

Page 64: Програмни езици  - Java

64

enumsenums Декларация:Декларация:[[модиф.модиф.]enum ]enum идент.идент.[[интерфейсиинтерфейси]]{[{[конст.конст.][][,конст.,конст.]] кодкод}} Пример:Пример:

enumenum Color { Color { REDRED,,BLUEBLUE,,GREENGREEN;; staticstatic finalfinal Map<String,Color> Map<String,Color> clrMapclrMap = = newnew

HashMap<String,Color>();HashMap<String,Color>(); staticstatic { { forfor (Color c:Color. (Color c:Color.valuesvalues())()) clrMapclrMap.put(c.toString(),c);.put(c.toString(),c); }}}}

Печат: System.Печат: System.outout.println(Color..println(Color.clrMapclrMap););

Page 65: Програмни езици  - Java

65

enumsenums Допуска се влагане Допуска се влагане enum:enum:public class Example1 { public enum Season { WINTER, SPRING,

SUMMER, FALL } public static void main(String[] args) {

for (Season s : EnumSet.range(Season.WINTER,Season.SUMMER))

System.out.println(s);}

}