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

Post on 12-Jan-2016

39 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Програмни езици - Java. Лектор: Гл.ас. д-р Даниела Гоцева dgoceva@tu-sofia.bg. Лексическа структура на Java. Структура на Java програма. Програмите на Java се пишат в Unicode. - PowerPoint PPT Presentation

TRANSCRIPT

1

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

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

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

dgoceva@tu-sofia.bgdgoceva@tu-sofia.bg

2

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

3

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

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

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

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

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

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

4

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

truetrue falsefalse

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

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

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

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"; }

6

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

7

Типове в Java

Примитиви

Рефериращи

boolean

Числови

Интегрални

float double

byte

short

int long

char

class

interface

масив

null

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

9

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

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

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

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

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 с цел диагностика. с цел диагностика.

11

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

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

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

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

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

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

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

12

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

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

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

13

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

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

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

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

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

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

обекта.

14

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

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

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

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

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

15

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

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

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

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

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) {…}

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 Клас и суперклас, суперинстанцияКлас и суперклас, суперинстанция

18

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

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

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

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

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

19

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

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

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

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

20

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

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

OutOfMemoryError, NullPointerException, OutOfMemoryError, NullPointerException, ClassCastExceptionClassCastException

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

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

към към String.String.

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

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

23

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

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

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

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

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

24

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

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

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

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

25

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

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

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

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

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

26

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

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

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

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

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

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

27

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

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

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

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

28

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

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

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

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

29

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

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

30

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

31

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

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

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

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

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

32

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

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

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

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

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

33

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

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

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

34

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

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

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

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

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

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

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

35

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

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

36

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

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

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

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

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

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

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 се импортира автоматично. се импортира автоматично.

38

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

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

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

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

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

39

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

40

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

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

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

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

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

41

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

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

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

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

42

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

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

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

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

43

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

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

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

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

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

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

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

44

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

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

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

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

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

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

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

45

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

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

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

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

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

46

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

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

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

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

47

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

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

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

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

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

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

48

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

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

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

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

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

49

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

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

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

50

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

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

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

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

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

51

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

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

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

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

52

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

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

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

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

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

53

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

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

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

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

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

54

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

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

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

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

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.. Един метод, който не е абстрактен, Един метод, който не е абстрактен,

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

56

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

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

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

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

за за staticstatic

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.

58

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

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

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

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

59

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

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

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

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

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

60

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

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

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

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

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

61

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

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

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

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

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

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(); }(); }}}

63

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

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

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

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

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););

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);}

}

top related