1 / 65

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

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

abel
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Програмни езици -Java Лектор: Гл.ас. д-р Даниела Гоцева dgoceva@tu-sofia.bg

  2. Лексическа структура на Java

  3. Структура на Java програма • Програмите на Java се пишат в Unicode. • Прави се лексическа транслация, с която Unicode escapes (\uXXXX) могат да се ползват за да вкл. Произволни Unicode символи, използващи само ASCII символи. • Дефинирани са символи за край на ред (LF, CR) за работа под различни ОС. • Символите Unicode, получени вследствие лексическата транслация се редуцират до набор white space (HT, space, FF, LF, CR) символи, коментари и tokens. • Tokens са: • Идентификатори; • Ключови думи • Литерали • Разделители • Операции.

  4. Литерали • Целочислени • Плаваща запетая • Булеви • true • false • 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") + " ");//true System.out.print((Other.hello == hello) + " ");//true System.out.print((other.Other.hello == hello) + " ");//true System.out.print((hello == ("Hel"+"lo")) + " ");//true System.out.print((hello == ("Hel"+lo)) + " ");//false System.out.println(("Hel"+lo).equals(hello));//true } } package other; public class Other { public static String hello = "Hello"; }

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

  7. Типове в Java Примитиви null Рефериращи boolean Числови class interface масив Интегрални float double byte short int long char

  8. Типове в Java • Java е строго типизиран език, което означава, че всяка променлива и стойност трябва да има тип по време на компилация. • Интегрални типове: • byte – знаков 8 бита, клас Byte • short – знаков 16 бита, клас Short • int – знаков 32 бита, клас Integer • long – знаков 64 бита, клас Long • char – символ, 16 бита, клас Character

  9. Типове в Java • Грешки, получавани при операциите върху интегрален тип данни: • NullPointerException – при пробразуване от клас в примитивна данна • ArithmeticException – при делене на нула • OutOfMemoryError – при преобразуване от примитивен тип в съответния клас

  10. Типове в Java • Типове с ПЗ: • float – 32 бита, IEEE 754, клас Float • double – 64 бита, IEEE 754, клас Double • IEEE 754-1985 включва : • (+) и (-) числа, представени с експонента и нормализирана мантиса; • (+) и (-) нула: • Равни са по стойност, ползват се при безкрайност • (+) и (-) безкрайност (infinite): • 1.0/0.0 = +∞ • 1.0/-0.0 = -∞ • NaN – получава се при неправилна операция, напр. делене на нула. • Java 1.3+ дава възможност да се получат различни видове NaN с цел диагностика.

  11. Типове в Java • Грешки, получавани при операциите върху данни ПЗ: • NullPointerException – при пробразуване от клас в примитивна данна • OutOfMemoryError – при преобразуване от примитивен тип в съответния клас • Препълване отгоре при операции дава безкрайност. • Препълване отдолу дава ненормализирана мантиса или знакова нула. • Неправилна операция дава NaN. • Ако в операция участва един NaN резултатът е NaN.

  12. Типове в Java • Булев тип: • boolean, клас Boolean • Участва само в логически операции и конкатенация (+).

  13. Типове в Java • Рефериращи типове: • Клас Object. По-важни методи: • getClass връща обект от тип Class, който представя класа на обекта. Такъв опбект съществува за всички рефериращи типове. • toString преобразува обекта към String. • equals и hashCode се използват в хештаблици като equals връща true когато 2 обекта са еднакви. • clone прави копие на обект. • finalize се извиква преди унищожаване на обекта.

  14. Типове в Java • Клас String: • Работи само с константни стойности. • Поддържа операция конкатенация (+) • 2 рефериращи типа са еднакви по време на компилация, ако имат едно и също име и еднакви типови параметри. • 2 класа или 2 интерфейса са еднакви по време на работа на програмата, ако имат едно и също име и еднакъв class loader. • 2 масива са еднакви, ако имат еднакви типове на елементите.

  15. Типове в Java • Типова променлива: • Променлива, дефинираща родов клас (шаблонен), родов интерфейс, родов метод или родов конструктор. • Пример: <T extends C&I>, Т наследява членове на С и I, където C e клас, а I - интерфейс, които са в същата област на действие.

  16. Типове в Java • Параметризиран тип – състои се от клас или интерфейс и списък от параметри. • Пример: • Vector<String> Vector<int> • Pair<String,Integer> Pair<String> public Method getMethod(Class<?>[] parameterTypes) { ... } boolean addAll(Collection<? Extends C> c) {…}

  17. Типове в Java • Супертип и подтип (S >1T): • double >1 float • float >1 long • long >1 int • int >1 char • int >1 short • short >1 byte • Клас и суперклас, суперинстанция

  18. Променливи и константи в Java • Видове променливи: • Клас-променливи – както static в С • Променливи на обект • Компоненти на масиви • Неименовани променливи, които се създават и инициализират при създаване на масив • Формални параметри • Параметри на конструкторите • Параметри за обработка на изключителни ситуации • Локални – в пределите на

  19. Променливи и константи в Java • Дефиниране на константи: • final static double PI=3.14; • Инициализация на променливи, членове на клас: • boolean – false; • класове – null; • char – ‘\u0000’; • Всички останали примитиви – нула. • Локалните променливи нямат инициализация.

  20. Преобразуване на типове • Преобразуване при присвояване • Няма към булев тип • Генерират се следните грешки: OutOfMemoryError, NullPointerException, ClassCastException • Преобразуване при извикване на методи – изпълнява се за всеки аргумент на метод, както при присвояване. • Смяна на типа: (нов_тип) пром. • Всички типове могат да се преобразуват към 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 • Интерфейс Clonable java.io.Serializable към масив от обекти

  24. Преобразуване на типове • Интерфейс към непараметризиран интерфейс – ако първия не е подтип на втория • Един тип масив към друг тип масив – ако са съвместими рефериращи типове • Всеки примитив може да се преобразува до съответния си клас и обратно.

  25. Достъп до имената • Пакетът винаги е достъпен. • Когато един клас или интерфейс има модификатор за достъп public, той е достъпен за всички пакети. • Когато клас или интерфейс няма модификатор за достъп не може да се ползва извън пакета, в който е дефиниран. • Един масив е достъпен само ако типа на неговите елементи е достъпен. • Данните и методите protected са достъпни е рамките на пакета и извън него само в наследниците на класа.

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

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

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

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

  30. Пакети

  31. Пакети • Програмите на java са организирани в пакети. • В една програма може да има само един пакет без име. Всички останали имат име и могат да бъдат съхранени във файл или БД. • Пакетът съдържа произволен брой компилируеми файлове. Всеки файл има достъп до данните, методите и типовете на своя пакет и тези от java.lang. • Имената на пакетите трябва да са уникални.

  32. Членове на пакети • Всички подпакети, класове и интерфейси, декларирани на външно ниво в пакета са негови членове. • Пример - Java API има следните пакети: • Пакетът java има awt, applet, io, lang, net и util подпакети и няма компилируеми файлове. • Пакетът java.awt има подпакет image и множество компилируеми файлове, съдържащи декларации на класове и интерефейси.

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

  34. Съхранение на пакети • Всички пакети и прилежащите им сорсове се съхраняват в директория и поддиректории. • Всяка поддиректория представя пакет. • В директориите се намират сорс кода .java и двоичния код .class. • За да се намали обема памет директориите се архивират в jar архиви. • За достъп до класовете в пакет се посочва относителния път спрямо пакета на топ ниво като \ се замества с . • Пример: java.awt.image

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

  36. Декларация на пакет • package име; • Безименният пакет няма подпакети. Той не се декларира. • Всеки пакет и неговите подпакети са видими навсякъде, където са импортирани. • java.lang се импортира автоматично. • Всеки файл съдържа само един public клас, чието име съвпада с името на файла.

  37. Импортиране на пакет • Може да се импортира цял пакет или само конкретен файл. • import java.util.*; • import java.util.Vector; • Импортират се само public типовете на файла. • Съществува и импортиране на статични типове: • import static тип.идентификатор; • import static тип.*; • java.lang се импортира автоматично.

  38. Декларации на топ ниво на пакет • Тук се включват: • Декларация на клас • Декларация на интерфейс • Не се допуска съвпадение между имената на клас и интерефейс. • Декларациите на топ ниво са само public. • Не се допуска импортиране на конкретен клас и деклариране на клас със същото име.

  39. Класове в Java

  40. Въведение • Класификация според нивото на декларация: • Декларирани на външно ниво • Вложени в друг клас • Локални класове • Анонимни класове • Видове класове: • Абстрактни • final – не могат да се наследяват • public • Родови • Няма множествено наследяване!

  41. Въведение • Членовете на клас и интерфейс могат да имат модифкатори за достъп: public, private, protected. • Членовете на един клас скриват наследените със същото име. • Полетата могат да бъдат: • final • static • Друг клас

  42. Въведение • Методите могат да бъдат: • final – не могат да се припокриват • abstract – нямат реализация • synchronized – за работа с нишки; заключва обекта • native – код, зависим от реализацията си • Методите могат да се припокриват. • Няма деструктори.

  43. Деклариране на клас [Модификатор]class идент. [т.име][родител] [интерфейси] тяло • Модификатори: • public, protected, private, static, final, strictfp • Един клас има абстрактни методи, ако: • Съдържа декларация на абстрактен метод. • Ако някой от родителските класове има абстрактен метод, който не е дефиниран в текущия. • Класът наследява интерфейси, които имат абстрактни методи, без да ги реализира.

  44. Деклариране на клас • Един клас се декларира final, ако не трябва да се наследява. • Един клас се декларира с strictfp, когато изразите с ПЗ са FP-strict. • Класът е родов, ако има типови параметри. • Вътрешен клас е вложен клас, който не е явно или неявно деклариран static. • Явна декларация – класът има статични членове. • Неявна декларация – класът наследява клас със статични членове.

  45. Деклариране на клас • Вътрешният клас: • Няма право да има статични инициализатори. • Няма членове интерфейси и членове static. • Може да наследява статични членове. • Не може да се позовава към неконстантни членове на обхващащия клас. • Може да съдържа локални класове, анонимни класове и нестатични членове.

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

  47. Деклариране на клас • Суперклас е родителят на даден клас. • Директен суперклас – пряк родител на класа. • Наследеният клас е подклас на своя родител. • Връзката подклас е транзитивна. • Клас С е директно зависим от тип Т, ако Т присъства в extend. • Клас С е зависим от Т, ако е: • директно зависим. • директно зависим от интерфейс, който зависи от Т. • Директно зависим от клас, който зависи от Т.

  48. Деклариране на клас • Директен суперинтерфейс – интерфейс, реализиран от класа. • Интерфейс I е суперинтерфейс на класа С, ако: • I е директен суперинтерфейс. • С има директен суперинтерфейс J, на който I е суперинтерфейс. • I е суперинтерфейс на директен подклас на С. • Интерфейсите могат да се наследяват.

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

  50. Членове на клас • Членовете на клас са: • Наследени от директния суперклас. • Наследени от директните суперинтерфейси. • Собствени членове. • Членовете private не са достъпни в подкласовете на класа. • Конструктори, статични инициализатори и инициализатори на обекти не се наследяват.

More Related