Програмиране на Java

Subdecks (1)

Cards (273)

  • Какво е JDK?

    Java Development Kit
  • Какво означава JVM?
    Java Virtual Machine (или JVM) е абстрактна изчислителна машина, която е основният компонент, осигуряващ независимостта от хардуер и операционна система. Тя конвертира байт кода до машинен код.
  • Компоненти на Java програма
    1. package/namespace: логическата организация на файловете
    2. клас = базов компонент: данни + поведение
    3. обект - променлива от тип клас
    4. променлива = контейнер за стойност; има тип,име, стойност
    5. методи: return || void; решават конкретен проблем
    6. изрази - могат да съдържат литерали, променливи, символни константи и операции; могат да извикват методи
  • Какво е конструктор?
    специален вид return метод, който се извиква при създаване на обект; конструкторите са полиморфни и overload-нати
  • Какво е композиция?
    Ползване на обекти от един клас като атрибути в друг клас
  • Модификатори в Java
    a) access modifiers: public, private, protected, default (кодът е достъпен само в съответния пакет)
    b) non-access: final (cannot be overridden), static(принадлежи на конкретен клас, а не обект), abstract
  • Как трябва да се казва класът с модификатор на достъп public?

    Както се казва файлът
  • Възможно ли е в един java файл да опишем повече от един клас?

    Да, но само един от тях е с модификатор за достъп public и носи името на файла.
  • Възможно ли е в един клас да опишем друг клас?
    Да
  • Къде е видима една променлива?
    В секцията където е декларирана
  • Кой от двата файла се създава първи - .java или .class?

    .java където е кодът, след това се създава .class където е байт кодът
  • Какъв ще е резултатът от следния код?
    int a = 5,b = 10, c = 15, d = 20;
    if (a++ > 3 || b++ > 5){
    c++;
    }else {
    c--;
    }System.out.println(a);
    System.out.println(b);
    System.out.println(c);
    System.out.println(d++);
    System.out.println(+(++d));
    6, 10, 16, 20, 22
  • Предназначение на условните оператори
    В зависимост от зададеното условие се извършва действие, т.е. те придават динамика на програмата чрез логически разклонения
    - оператори с предусловие: if-else (позволява един оператор без тяло), switch-case(м-во алтернативи; default = else; в case влиза само един аргумент! Използва се при String и int),while, for, foreach = for(Type t : list) [работи с референции]
    - оператори със следусловие: do-while
    - краен и безкраен цикъл
  • Continue vs. break
    - break: напускане на цикъла без изпълнение на останалите конструкции
    - Continue: спира изпълнението на текущата итерация; връща се в началото; изпълнява нова итерация
  • Кога се използва оператор for?

    Когато знаем необходимия брой итерации.
  • Кога се използва оператор while?
    Когато не знаем необходимия брой итерации.
  • Кога е удачно да използваме цикъл със следусловие?
    Когато искаме да гарантираме, че поредицата от операции ще бъде изпълнена най-малко веднъж.
  • Оператори
    аритметични оператори, релационни (==,!=,<=, >=, <,>), логически (&&,||), побитови, за присвояване, тернарен оператор, new, instanceof, cast (produces a value of the given type by converting the value of the original expression to the new type)
  • Масиви
    съвкупност от стойности от един и същ тип
    - представители на класовете: работят по референции
    - имат фиксирана дължина след инициализация
    - елементите са индексирани /[0;n-1]/
    - линейна последователност!
    - поддържат сортировка
    - НЕ МОЖЕМ да вмъкваме и изтриваме елементи
  • Какво е сортировка?
    Процесът на подреждане на елементите на дадена колекция в определен ред (напр. възходящ или низходящ). Такива алгоритми са Selection Sort (търсим най-малкия елемент и го разменяме с първия и така докато не го подредим) и
    Bubble Sort (претърсваме масива и разменяме съседните елементи, които не са в правилната последователност).
  • Как се сортират колекции в Java?

    В Java има няколко начина за сортиране на колекции. Един от най-честите начини е използването на методаCollections.sort()за списъци или методаArrays.sort()за масиви. Друг вариант е чрез използване на методи от интерфейситеComparable- int compare(obj) /ако имаме достъп до сорс кода/ иComparator- int compareTo(obj1,obj2) /подходящ за м-во критерии/. Съществуват иалгоритми за сортиране(Selection sort, Bubble sort).
  • Selection Sort
    Търсим най-малкия елемент и го разменяме с първия елемент...
    int helper;
    for (int i = 0; i < arr.length; i++) {
    for (int j = i; j < arr.length; j++){
    if (arr[i] < arr[j]){
    helper = arr[i];
    arr[i] = arr[j];
    arr[j] = helper;
    }
    }
    System.out.print(arr[i] + " ");
    }
  • Bubble Sort
    Претърсваме масива и разменяме съседните елементи, които не са в правилната последователност.
    - Резултат: най-големият елемент e вдясно.
    boolean flag = true;
    while (flag){
    flag = false;
    for (int i = 0; i < arr.length - 1; i++) {
    if (arr[i] > arr[i+1]){
    helper = arr[i];
    arr[i] = arr[i + 1];
    arr[i + 1] = helper;
    flag = true;
    }
    }
    }
    for (int i = 0; i < arr.length; i++) {
    System.out.print(arr[i] + " ");
    }
  • Динамични масиви
    нямат фиксирана дължина; garbage collector (Автоматично освобождаване на вече ненужната памет посредством Java-run-time-system)
    - ArrayList<>() list = new ArrayList<>(); //заделената памет зависи от версията на езика
    - HashMap //удобни за построяване на двоични дървета
  • Възможно ли е императивно програмиране на езика Java?
    Да
  • Рекурсия
    Когато в тялото на метод се извършва обръщение към същия метод, казваме, че методът е пряко рекурсивен.
    Ако метод A се обръща към метод B, B към C, а С отново към А, казваме, че методът А, както и методите В и C са непряко (косвено) рекурсивни или взаимно-рекурсивни.
    Веригата от извиквания при косвената рекурсия може да съдържа множество методи, както и разклонения, т.е. при наличие на едно условие се извиква един метод, а при различно условие се извиква друг.
  • Определение за клас
    множество от обекти със сходни характеристики на поведение и състояние. Съдържа атрибути и методи. Асоциираме го с потребителски тип данни.
  • Какво наричаме конструктор по подразбиране?

    такъв без параметри. Няма параметри защото не знаем какви ще ни потрябват
  • Можем ли да имаме повече от един конструктор в класа?

    да, но трябва да се различават по брой и/или вид параметри
  • Ключова дума this
    неявно се подава като параметър на всеки конструктор и нестатичен метод на класа; достъпване на член-променливи; извикване от конструктор на друг overloaded конструктор в същия клас; извикване на произволен метод на класа
  • Къде е грешката в кода?
    public Person(String name, int age) { name = name; age = age; }
    Все едно присвояваме променливата в скобите на конструктора на самата себе си. Трябва да ги достъпим с ключова дума this.
    Output: null 0
  • instanceof
    Използва се за type checking на референтните типове - дали даден обект е инстанция на даден клас
  • Какво е статично поле?
    - еднакво е за всички представители на класа. За него последната промяна се зачита.
    - Можем да го достъпим директно с името на класа, а не чрез негова инстанция.
  • Каква е разликата между статични и нестатични методи?

    статичните методи имат достъп само до статични член-променливи и други статични методи, но нестатичните имат достъп до всички полета и методи
  • Къде е грешката в кода, ако приемем, че викаме метод със същото име, но от родителския клас?
    public void printInfo() { printInfo(); System.out.println(spec + " " + aver); }
    Така написано изглежда, че извикваме същия метод рекурсивно. Ще ни изкара StackOverflowError. Правилно е да се обърнем към метода като укажем класа, напр. student.printInfo();.
  • Можем ли на родителски клас да присвоим неговия подклас?
    Да
  • Имаме класовете А,Б,Ц, които се наследяват /A <- B <- C/. Решаваме, че ще създадем нов обект D = new C(); В какъв ред ще се изпълнят конструкторите?

    Изпълнението на констукторите започва от най-старшия родителски клас, т.е от А.
  • Какво е характерно за Object в JAVA?
    Той е родителският клас на всички класове, могат да му се присвояват всякакви данни.
  • Пакети в Java

    именувани групи от семантично свързани класове -> йерархична организация на кода; вграждат се с ключова дума import
  • Сравнение по критерии чрез функционални интерфейси

    - Comparable: int compareTo(obj);
    използва се ако имаме достъп до сорс кода
    - Comparator: int compare(obj1, obj2);
    подходящ при множество критерии за сравнение