Топ 367 основни въпроса за интервю за Java за 2021 г.


Тази статия ще ви насочи към подготовката за интервюта, свързани с Core Java. Той обхваща всички теми като Основи на Java, концепции за ООП, обработка на низове, многопоточност, колекции и др.

Съдържание

1. Какво е Java?

Java е най-простият и най-често използваният език за програмиране, който се основава на обектно-ориентираната концепция за програмиране. Той поддържа междуплатформена платформа, многопоточност и е независим от платформата и здрав. Sun Microsystems разработи Java през 1995 г. и по-късно придобита от Oracle Systems.

2. Какви са характеристиките на езика за програмиране Java?

Java има следните характеристики:

  • Прост: Java е лесна за учене и не изисква сложни програмни концепции като указатели или множествено наследяване.
  • Независим от платформата: Java не зависи от никоя платформа, тъй като кодът, който компилираме и изпълняваме, е еднакъв във всяка операционната система. Това означава, че можем да компилираме кода в една система и да го изпълним в друга.
  • Обектно-ориентиран: Java използва колекция от обекти от клас за извършване на всяка операция и следва обектно-ориентирана методология.
  • Secure: Той е силно защитен, тъй като не създава никакви недостатъци в сигурността като препълване на стека и т.н. Това е така, защото не използва концепцията за указатели.
  • Здрав: Java е надеждна и надеждна, тъй като идентифицира грешки на ранен етап и избягва проблеми като събиране на боклук, разпределение на паметта, обработка на изключенияТ.н.
  • Многонишков: Поддържа концепция за многопоточност, което означава, че можем да изпълним 2 или програми едновременно и по този начин да използваме CPU максимално.
  • Висока производителност: Java използва компилатор Just-in-time и по този начин осигурява висока производителност.
  • Разпределени: Java поддържа разпределено програмиране, което означава, че можем да разпространяваме java програми в повече от 1 система, свързана чрез интернет. Можем да използваме функции като EJB (Enterprise Java Bean) и RMI (Remote Method Invocation) в Java, за да поддържаме разпределени функции.
  • Динамично: Java е по-динамична, когато сравняваме с други езици за програмиране като C или C ++. Това е така, защото може да носи голямо количество информация за времето за изпълнение, която можем да използваме за проверка на достъпа до обект по време на изпълнение.

3. Каква е разликата между C ++ и Java?

Метод за сравнениеC + +Ява
Независимост на платформатаЗависи от платформата. Трябва да се компилира на всяка платформаТой е независим от платформата. Може да се компилира в една платформа и да се изпълни в друга
Съставител и преводачТова е компилиран езикТова е компилиран и интерпретиран език
ПреносимостНе е преносимТой е преносим, ​​тъй като изходът на байт кода може да се изпълни на всяка система
Управление на паметтаУправлението на паметта е ръчноУправлението на паметта се контролира от системата
Множествено наследяванеПоддържа множествено наследяванеНе поддържа множествено наследяване. Но може да се постигне чрез интерфейс
ПретоварванеПоддържа претоварване на оператораНе поддържа претоварване на оператора
Виртуална ключова думаТой използва виртуална ключова дума, за да замени функциятаТой не използва виртуална ключова дума. По подразбиране всички нестатични методи са заменени или виртуални
указателиИзползва концепцията за указателиНяма концепция за указатели
Коментари на документациятаНяма поддръжка за коментари на документацияТой има вградена поддръжка за коментари на документация (/ ** ... * /
Поддръжка на нишкиC ++ няма вграден механизъм за нишки и използва библиотеки на трети страниJava има вградена поддръжка на нишки, използвайки класа "Thread"
Обаждане по стойност и Обаждане по референцияПоддържа обаждане по стойност и обаждане по референцияПоддържа само обаждане по стойност
Структура и съюзПоддържа както структурата, така и обединениетоНе поддържа структури и обединение
Неподписан оператор за дясна смяна >>>Не поддържа неподписан оператор за дясна смянаПоддържа неподписан оператор за дясна смяна
Коренна йерархияНяма коренна йерархияТой има една коренна йерархия, която е java.lang.Object
Механизъм за въвежданеИзползва Cin и Cout за I / O операцииИзползва System.in и System.out за I / O операции.
Отидете до изявлениеПоддържа Goto изявлениеНе поддържа Goto изявление
Обхват на данни и функцииДанните и функциите могат да се намират извън класаДанните и функциите трябва да присъстват в класа
Управление на обектиИзползва new и delete за управление на обектиИзползва автоматично събиране на боклук за управление на обекти
ПриложенияИзползва се за системно програмиранеИзползва се за програмиране на приложения като базирани на Windows, уеб базирани, корпоративни и мобилни приложения.
ТипКакто процедурен, така и обектно-ориентиран език за програмиранеТова е само обектно-ориентиран език за програмиране
ПонятиеПишете веднъж, компилирайте навсякъдеПишете веднъж бягайте навсякъде и навсякъде
Оператор за разделителна способност на обхвата (: :)Поддържа оператор за резолюция на обхватаНе поддържа оператор за резолюция на обхвата
БиблиотекиПоддържа функционалност на ниско нивоПоддържа функционалност на високо ниво
разрушителПоддържа деструкториНе поддържа деструктори
Обработка на грешки по време на работаПрограмистът е отговорен за обработката на грешки по време на изпълнение и изключенияJVM е отговорен за грешки и изключения по време на изпълнение

4. Какво представлява Java Virtual Machine (JVM)?

JVM or Java виртуална машина е виртуална машина, която изпълнява java програмата. Той изпълнява байт кода, генериран от компилатора, докато компилира програмата. JVM действа като двигател за изпълнение, който изпълнява програмата чрез извикване на основния метод. Изходът, който JVM произвежда след изпълнение на байт кода, е еднакъв във всички операционни системи. Ето защо Java е независима от платформата.

5. Какво означават терминологиите JDK и JRE?

JDK средства Комплект за разработка на Java който съдържа много компоненти като JRE, компилатори, различни инструменти като JavaDoc, JavaDebugger, библиотеки и др. Задължително е да инсталирате JDK в нашите системи, за да компилирате и стартирате всякакви Java програми.

JRE средства Java Runtime Environment която е част от JDK, която се използва за изпълнение на всяка Java програма. Той също така включва приставки за браузър, поддръжка на аплети и JVM.

6. Какви са различните видове области на паметта, разпределени от JVM?

JVM съдържа 5 различни области на паметта, както е дадено по-долу:

  • Клас (метод) област: Съхранява всички данни, свързани с класа, като променливи, методи, постоянен пул по време на изпълнение.
  • купчина: Той разпределя памет за обекти по време на изпълнение.
  • Стек: Съхранява резултата от изпълнението на метода като връщане на стойността или стойността, използвана за динамично свързване. Stack също съхранява рамки и всяка нишка има частен JVM стек.
  • Регистър на програмния брояч: Съдържа адреса на инструкциите на JVM за метода.
  • Вътрешен стек от методи: Той съдържа всички естествени методи, които се използват в приложението.

7. Какво е JIT компилатор?

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

8. Какво е платформа?

Платформата е комбинация от хардуер и софтуерна среда, която помага при изпълнението на софтуера. Java има собствена среда, наречена JRE (Java Runtime Environment)

9. Каква е разликата между Java платформа и други платформи?

  • Java е софтуерна платформа, докато други може да са хардуерно-софтуерни или само хардуерно-базирани.
  • Java се изпълнява върху други хардуерни платформи, докато други могат да работят само върху хардуерни компоненти.
  • Можем да стартираме Java код на всяка операционна система, докато други платформи нямат тази възможност.
  • Java има собствена среда (JRE) и JVM, докато други платформи нямат тази функционалност.

10. Какво означава „Пиши веднъж и тичай навсякъде“?

Java е независим от платформа език за програмиране, където можем да напишем Java код и да компилираме в една платформа и да го изпълним на друга платформа. Можем да изпълним тази Java програма на всяка операционна система, тъй като изходът на компилацията, който е байт кодът, не е специфичен за платформата.

11. Какво е клас за зареждане?

Java classloader е част от JRE(Java Runtime Environment), която зарежда файловете на класа в JVM(Java Virtual Machine), когато това се изисква от приложението. Един единствен loadloader не зарежда всички класове. Въз основа на типа на класа, съответният зареждащ клас зарежда файловете на класа, когато е необходимо.

По-долу са посочени различните видове Java classloaders:

  • Bootstrap клас loader: Това е първият loadloader, който зарежда всички файлове от местоположението rt.jar. Нарича се още първичен клас loader, който е родител на всички други loadloaders.
  • Удължителен клас товарач: Това е дъщерният клас на зареждащия клас bootstrap, който зарежда разширенията на основните ява класове от директорията Extensions jre / lib / ext.
  • Товарач на системен клас: Нарича се още като Приложение class loader, който зарежда класове от типа на приложението или файлове от класа от КЛАССПАТ променлива. Това е подкласът на товарача на клас Extension.

12. Може ли име на java файл да бъде запазено като празен .java файл?

Да, можем да запазим java файл без име на файл, като използваме само .java. За да компилираме, използваме командата javac .java и за изпълнение, използваме командата java classname.

13. Изтриване, нула, следваща, основна и изходни ключови думи в Java ли са?

Да, delete, null, exit, next, main и null са ключовите думи в езика за програмиране Java.

14. Когато не предаваме никакви стойности в аргументите на масива String на основния метод, стойността има ли празна или нула стойност?

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

public static void main(String[] args)

15. Какво се случва, когато напишем статична публична празнота вместо публична статична празнота за основния метод?

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

16. Каква е стойността по подразбиране на локална променлива?

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

17. Какви са различните видове спецификатори за достъп в Java?

Java има 4 различни вида спецификатори за достъп:

  • public: Вижда се за всеки клас във всеки пакет. Можем да декларираме публичен тип достъп за клас, променлива или метод.
  • protected: Достъпен е във всеки клас от същия пакет или в подкласа на класа, където е деклариран. За достъп отвън можем да постигнем чрез наследяване.
  • по подразбиране: Обхватът е в пакета и не изисква ключова дума за посочване.
  • private: Достъпът до него може да бъде само в рамките на същия клас.

Модификатори за достъп на Java

Можете да се отнесете Модификатор за достъп на Java урок за повече подробности.

18. Каква е ползата от статичните методи и променливи?

Когато декларираме променлива или метод, използвайки static ключова дума, тя се превръща в статичен метод или статична променлива. Това означава, че принадлежи на клас, а не на обекта. С други думи, не е необходимо да създаваме обект за достъп до статичен метод или променлива. Той се споделя между всички обекти в клас. Например всички ученици в училище използват едно и също име на училище. Следователно можем да декларираме името на училището като статична променлива. Можете да се обърнете към Java статична ключова дума за повече подробности по тази тема.

19. Какви са предимствата на използването на пакети в Java?

Използването на пакети в Java предоставя следните предимства:

  • Избягва конфликти при именуване на класове. Това означава, че можем да използваме едни и същи имена на класове в 2 различни пакета.
  • Осигурява повторна употреба чрез достъп до клас от 1 пакет в друг.
  • Лесна поддръжка, тъй като часовете ще бъдат организирани
  • Осигурява защита на достъпа за защитени класове и класове по подразбиране.
  • Помага при капсулиране или скриване на данни.

20. Какъв е резултатът от следната програма Java?

public class StringExample {

  public static void main(String[] args) {
    System.out.println(90 + 10 + "Java");
    System.out.println("Java" + 15 + 15);

  }

}
100Java
Java1515

В първия случай той първо добавя 2-те цели числа и след това обединява изхода със стойността на низа. Следователно това води до „100 Ява“.

Във втория случай той обединява стойността на низа с целите числа, вместо първо да добавя целите числа. Следователно това води до „Java1515“. Това е така, тъй като, тъй като всички оператори са +, той следва предимство отляво надясно за обединяване.

21. Какъв е резултатът от долупосочения код на Java?

public class StringExample {

  public static void main(String[] args) {
          System.out.println(10 * 10 + "Java");
    System.out.println("Java" + 10 * 10);
    
  }

}
100Java
Java100

В първия случай изходът е „100 Ява“ тъй като операторът за умножение предшества оператора за събиране. Следователно първо умножава 10 и 10 и след това свързва продукта с низа.

Същата логика се отнася и за втория случай. Тъй като операторът за умножение предшества оператора за събиране, той умножава 2-те стойности и след това се свързва с низа. Оттук и резултатът „Java 100“.

22. Какъв е резултатът от долупосочения код на Java?

public class Sample {

  public static void main(String[] args) {
    for(int i=0;5;i++)
      System.out.println("Java");
  }

}
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
  Type mismatch: cannot convert from int to boolean

  at Sample.main(Sample.java:4)

Изхвърля грешка при компилацията, тъй като вторият аргумент в цикъл for трябва да бъде булево условие. В горния код това е цяло число вместо булев израз.

23. Какво е обектно-ориентирано програмиране?

Обектно-ориентираното програмиране използва обекти, които съдържат методи и променливи. Всеки клас съдържа обекти, които са екземпляри на клас, чрез които можем да имаме достъп до методи или данни. Той насърчава повторната употреба и подобрява четливостта на кода и по този начин води до по-бързо разработване на продукта. Java следва обектно-ориентираната концепция за програмиране.

По-долу са дадени характеристиките на обектно-ориентираното програмиране:

  • Съдържа методи с данни, които можем да използваме заедно с обекта.
  • Поддържа функционалността за капсулиране и абстракция, която скрива данни за потребителите.
  • Прилага наследяване и полиморфизъм и следователно увеличава повторната употреба на кода.

24. Какво е обект?

Обектът представлява обект от реалния живот, който е екземпляр на клас. Той съдържа и двете данни и методи(поведения). Обектите имат предимно 2 характеристики на са и поведение. Състоянието не е нищо друго освен идентичност на обекта (данните) и поведението описва функцията (метода) на обекта. Можем да създадем обект в Java с помощта на new ключова дума. Обектът е една от важните характеристики на ООП.

25. Каква е разликата между обектно-ориентирано програмиране и обектно-базиран език за програмиране?

Обектно-ориентирано програмиранеОбектно-базирано програмиране
Използва всички концепции за ООП.Не използва няколко концепции за ООП като наследяване, полиморфизъм
Той няма вградени обектиТой има вградени обекти като Windows обект в JavaScript
Например: Java, C, C ++ и дрНапример: JavaScript, VBScript и др

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

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

27. Какво е конструктор?

A конструктор в Java е специален метод, който се изпълнява по време на създаване на екземпляр на клас. Винаги, когато създаваме обект за класа, java компилаторът извиква по подразбиране конструктора по подразбиране за този клас. Можем да използваме конструктора за инициализиране на аргументи за обекта, който използваме в класа. Конструкторът трябва да има същото име като името на класа си.

28. Какви са различните видове конструктори в Java?

В Java има 3 различни типа конструктори:

  • Конструктор по подразбиране: Когато не създаваме никакъв конструктор, Java компилаторът създава вътрешно конструктор по подразбиране, който има празно тяло. Този конструктор няма да бъде видим за нас.
  • Няма конструктор на аргументи: Този конструктор няма никакви аргументи или параметри, но може да съдържа код в конструктора.
  • Параметризиран конструктор: Той съдържа аргументи или параметри, които се използват за инициализиране или присвояване на стойности на променливи.

29. Каква е ползата от конструктор по подразбиране?

Основната цел на конструктора по подразбиране е да присвоява стойности по подразбиране на обекти. Java компилаторът създава вътрешно конструктор по подразбиране, ако не го създадем. Този код няма да бъде видим за нас. Стойността по подразбиране за целочислена стойност е 0, а за String е нула.

Конструктор в Java

30. Връща ли конструктор някаква стойност?

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

31. Наследен ли е конструкторът?

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

32. Можем ли да създадем окончателен конструктор?

Не, не можем да създадем конструктор като финал.

33. Можем ли да претоварим конструктор?

Да, можем да претоварим конструктор въз основа на броя аргументи или типа параметри. По-долу е даден прост пример за претоварване на конструктора. Първият конструктор няма никакви аргументи. Вторият има 2 аргумента, а третият има само 1 аргумент. Въз основа на параметъра той извиква съответния конструктор.

public class Employee {
  int empId;
  String empName;
  String empRole;
  
  public Employee() {
    this.empId = 100;
  }
  
  public Employee(int id, String name) {
    this.empId = id;
    this.empName = name;
  }
  
  public Employee(String designation) {
    this.empRole = designation;
  }
  
  public static void main(String[] args) {
    Employee e1 = new Employee();
    Employee e2 = new Employee(102,"Rakesh");
    Employee e3 = new Employee("Java Developer");
    Employee e4 = new Employee("Tester");
    System.out.println("Default value of Empid: " + e1.empId);
    System.out.println("Employee id: " + e2.empId + " " + "Employee Name:" + e2.empName);
    System.out.println("Employee Role: " + e3.empRole + " and " + e4.empRole);
    
  }
}
Default value of Empid: 100
Employee id: 102 Employee Name:Rakesh
Employee Role: Java Developer and Tester

34. Какво е конструктор за копиране в Java?

В Java няма конструктор за копиране като такъв, но можем да копираме стойности на един обект в друг, използвайки конструктора, който е подобен на конструктора за копиране в C ++. Има различни начини за копиране на стойности:

  • Чрез използване на конструктор
  • Използвайки метода clone ()
  • Присвояване на стойности на един обект на друг.

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

public class Employee {
  int empId;
  String empName;
  public Employee(int id, String name) {
    this.empId = id;
    this.empName = name;
  }
  
   //Copy constructor
  public Employee(Employee emp) {
    empId = emp.empId;
    empName = emp.empName;
  }
  
  public void displayDetails() {
    System.out.println("Employee ID:" + empId);
    System.out.println("Employee Name:" + empName);
  }
  
  public static void main(String[] args) {
    Employee e1 = new Employee(102,"Dev");
    //Create a copy of another object
    Employee e2 = new Employee(e1);
    e1.displayDetails();
    e2.displayDetails();
  }
}
Employee ID:102
Employee Name:Dev
Employee ID:102
Employee Name:Dev

35. Какви са разликите между конструктор и метод?

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

Java конструкторJava метод
Инициализира състояние на обектОписва поведението на обекта
Няма тип връщанеИма връщащ тип
Той се извиква имплицитноИзвиква се изрично
Името на конструктора трябва да бъде същото като името на класаИмето на метода може да бъде всичко, независимо от името на класа

36. Какъв е резултатът от следния код?

public class Sample {
  
  Sample(int a) {
    System.out.println("Value of a: " + a);
  }
  
  Sample(float a) {
    System.out.println("Value of a: " + a);
  }

  public static void main(String[] args) {
    byte x = 5;
    Sample s = new Sample(5);

  }

}
Value of a: 5

В горния код имаме 2 конструктора, единият с тип аргумент int, а другият с тип плаващ тип данни. По време на създаването на обект, ние предаваме байтова стойност. В този случай той извиква първия конструктор от цял ​​тип, тъй като байтният тип се повишава до цяло число.

37. Какъв е резултатът от следния код?

class Result {
  int a;
  String s;
}
public class Demo {

  public static void main(String[] args) {
    Result r = new Result();
    System.out.println(r.a);
    System.out.println(r.s);

  }

}
0
null

Имаме 2 променливи на тип данни цяло число и низ. Тъй като няма конструктор, JVM вътрешно извиква конструктора по подразбиране и инициализира тези променливи със стойност по подразбиране, която е съответно 0 и нула.

38. Какъв е резултатът от кода по-долу?

class Result {
  int a;
  String s;
  
  Result(int a, String s) {
    this.a = a;
    this.s = s;
  }
}
public class Demo {

  public static void main(String[] args) {
    Result r = new Result();
    System.out.println(r.a);
    System.out.println(r.s);

  }

}
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
  The constructor Result() is undefined

  at Demo.main(Demo.java:13)

В този сценарий получаваме грешка при компилация. Това е така, защото когато дефинираме който и да е конструктор, JVM не извиква вътрешно конструктора по подразбиране. Следователно, ако дефинираме конструктор, трябва да създадем обекта, използвайки този конструктор, в противен случай това ще доведе до грешка в компилацията.

39. Какво е статична променлива?

Когато декларираме променлива с static ключова дума, ние го наричаме a статична променлива. Те също се наричат ​​променливи на класа, което означава, че не е специфичен за нито един обект и не изисква никакъв обект за достъп до статичните променливи. Използва се предимно за управлява паметта ефективно, тъй като разпределя паметта само веднъж (област на класа) за статични променливи, които се случват, когато класът се зареди. Можем да използваме статична променлива, когато искаме една и съща стойност да бъде споделена между различни обекти или екземпляри на клас. Например: име на училище, име на колеж, име на фирма и т.н.

40. Какво е статичен метод?

Когато декларираме метод, използвайки static ключова дума, тя се превръща в статичен метод. Можем директно да осъществим достъп до статичните методи и техните променливи, без да използваме обекта. Тези методи принадлежат към клас. Не можем да извикаме нестатичен метод или променлива на екземпляр от статичен метод, тъй като това ще доведе до грешка при компилация. Статичните методи могат да се използват само за инициализиране на статични променливи, а не променливи на инстанции (обекти).

41. Какви са ограниченията при използването на статичен метод?

  • Не можем да получим достъп до нестатични членове в рамките на статичен метод
  • Не може да се извикат никакви нестатични методи от статичен метод
  • Не може да се използва супер ключова дума в статичен метод

42. Защо декларираме основния метод като статичен?

Ние декларираме основния метод като статичен, тъй като той не изисква никакъв обект и зарежда методите по време на зареждането на класа. Също така, основният метод е входната точка за всяко изпълнение в Java

43. Можем ли да заменим статичните методи?

Не, не можем да заменим статичните методи и това ще доведе до грешка при компилацията.

44. Какво е статичен блок?

Когато блок съдържа името като ключова дума java статичен, ние го наричаме статичен блок. Използваме статичен блок, когато искаме да инициализираме всякакви статични членове, докато зареждаме класа. Първо изпълнява този статичен блок, преди да извика основния метод.

public class StaticBlockExample {
  static int i;
  static {
    System.out.println("Inside the static block");
    i = 10;
  }
  public static void main(String[] args) {
    System.out.println("Inside the main method");
    System.out.println("Value of i: " + i);
  }
}
Inside the static block
Inside the main method
Value of i: 10

45. Възможно ли е да се изпълни Java програма без основния метод?

Можем да изпълним Java програма без основния метод, като използваме статичния блок. Статичният блок се изпълнява преди основния метод и когато класът се зареди. Но ако нямаме статичен блок, тогава компилаторът ще потърси метода main () и изхвърля грешка при компилация, ако не бъде намерен.

Забележка: Това не е възможно за версията на Java 7.

46. ​​Какво се случва, когато дефинираме основния метод без статична ключова дума?

Java кодът се компилира успешно, но обаче ще изхвърли “NoSuchMethodError”.

47. Каква е разликата между статичния (клас) метод и метода на екземпляра?

Статичен методМетод на инстанция
Декларацията на метода съдържа статичната ключова думаДекларацията на метода няма статична ключова дума
Не изисква обект за достъп до статичен методОбектът се изисква за достъп до метода на екземпляра
Не можем да получим достъп до нестатични методи или променливи в рамките на статичен методМожем да имаме достъп както до статични, така и до нестатични членове в рамките на метод на екземпляр
Статичният метод принадлежи на класа. Следователно той също се нарича метод на класИнстанционните методи принадлежат на обекта.

48. Можем ли да създадем статичен конструктор?

Не можем да направим конструктор static тъй като се нуждаем от обекти, за да извикаме конструктор. Статиката не изисква никакви обекти, поради което ще изведе грешка при компилацията като „Модификатор на нелегален достъп“.

49. Можем ли да направим абстрактните методи като статични?

Не, не можем да направим абстрактни методи като статични, защото не можем да заменим статичните методи. Трябва да заменим абстрактните методи, за да осигурим тяхното внедряване или функционалност в класа, който разширява абстрактния клас.

50. Можем ли да декларираме статични методи и статични променливи в абстрактния клас?

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

51. Каква е тази ключова дума в Java?

В Java тази ключова дума се отнася до текущия екземпляр или променлива в метод или конструктор. Извиква се като референтна променлива. Основната го използва, за да прави разлика между променливата на екземпляра и локалната променлива. Това се случва главно, когато използваме едно и също име на променлива за параметъра в конструктор и същото име за променливата на екземпляра.

52. Какви са ползите от this ключова дума в Java?

Основната цел на използването на java thisключова дума е да се прави разлика между променливата на екземпляра и локалната променлива. По-долу са дадени други различни употреби:

  • За да се обърнете към текущата променлива на екземпляра на класа
  • Извикайте метода на текущия клас имплицитно
  • За извикване на текущия конструктор на клас
  • Предайте като аргумент в извикването на метода
  • Предайте като аргумент в извикването на конструктора
  • Връща текущия екземпляр на клас от метода

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

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

public class SampleTest {

  public SampleTest()
  {
    this = 5;
  }
  public static void main(String[] args) {
    SampleTest s = new SampleTest();

  }

}
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
  The left-hand side of an assignment must be a variable

54. Можем ли да използваме тази ключова дума за препратка към статични променливи?

Можем да използваме java this ключова дума за препратка към static променливи и няма да доведе до грешка. Това обаче не е най-добрата практика, тъй като статичните променливи могат да бъдат достъпни директно и не изискват никакъв обект или референтна променлива.

55. Как да постигна използване на верига на конструктор this ключова дума?

Използваме java тази ключова дума, за да извикаме конструктор главно за реализиране на верига на конструктор, която извиква конструктор в друг конструктор. Това помага за повторната употреба на кода. Въз основа на типа конструктор можем да предадем параметрите. Извикване на конструктор с помощта на java това ключовата дума винаги трябва да бъде първият израз, в противен случай ще изведе грешка при компилацията.

Можем да извикаме конструктор, използвайки 2 различни начина:

това() Конструктор по подразбиране -

това (параметър) - параметризиран конструктор

Можете да се отнесете тук за повече информация.

56. Какво е предимството на подаването this към метод вместо към текущия обект на клас?

Това се отнася и до текущия екземпляр на клас, който е подобен на текущия обект. Но има няколко разлики, както по-долу:

  • This е крайна променлива и следователно не можем да променяме никакви стойности, но това не е случаят с текущия обект.
  • Може да се използва и в синхронизиран блок

57. Какво е наследяване?

Наследяването е важна характеристика на ООП. Това е функция, която помага да се използват повторно методите и променливите на един клас в друг клас. С други думи, той позволява на нов клас да наследи свойствата и функциите на съществуващ клас, без да пренаписва кода. Той изпълнява Майка-дете връзка. Това означава, че дъщерният клас може директно да използва променливите и функциите на родителския клас заедно със собствените си методи и променливи.

58. Кои са различните видове наследяване в Java?

По-долу са различните видове наследяване в Java:

  • Единично наследство
  • Наследяване на много нива
  • Хибридно наследяване
  • Йерархично наследяване
  • Множествено наследяване - Не се поддържа с използване на клас Java, но може да се постигне чрез интерфейс.

59. Защо използваме наследяване в Java?

  • Възможност за повторно използване на съществуващия код на клас
  • Поддържа замяна на метода
  • Позволява извикване на методи на суперклас в методите на подклас с помощта на супер ключова дума.
  • Не позволява да се наследи окончателният клас или да се заменят крайните методи.
  • Поддържа множество наследяване с помощта на интерфейси

60. Кой клас е суперкласът за всички класове?

Класът Object е суперкласът за всички класове.

61. Защо Java не поддържа множествено наследяване?

Java не поддържа множествено наследяване поради сложността и неяснотата, които създава по време на изпълнението. Множественото наследяване означава, че един клас може да разшири повече от 1 клас. С други думи, детски клас може да има повече от 1 родителски клас. Можем да разберем това, ако сравним това с реалния живот. Невъзможно е детето да има повече от 1 майка. По същия начин наследството в java не може да има 1 детски клас с повече от 1 родител.

Например, ако това е разрешено в java, разгледайте долния пример. Когато извикаме obj.show (), той няма да знае кой метод на клас да извика, тъй като присъства и в двата класа.

class classA {
  public void show() {
    System.out.println("Class A");
  }
}
class classB {
  public void show() {
    System.out.println("Class B");
  }
}
public class MultipleInheritance extends classA,classB { //Suppose if allowed
  public static void main(String[] args) {
    MultipleInheritance obj = new MultipleInheritance();
    obj.show();
  }
}
Compile-time error

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

62. Какво е агрегиране?

Агрегирането в Java ни позволява да предоставим справка за един клас в друг клас. С други думи, той поддържа a еднопосочен взаимоотношения и изпълнява a ИМА отношение.

Когато два класа имат връзка HAS-A, ние казваме, че реализира агрегиране. Един от най-добрите примери, за които можем да се сетим, е „Служителят има кола“. Ние казваме, че това е еднопосочно, тъй като колата не може да има служител и само служител може да има кола.

В примера по-долу можете да видите, че класът Employee има препратка към класа Car. Следователно има агрегиране между класа Служител и Автомобил.

class Car {
  String carname;
  String color;
  String regno;
  
  Car(String carname, String color, String regno) {
    this.carname = carname;
    this.color = color;
    this.regno = regno;
  }
  
}
public class Employee {
  
  String empname;
  int empid;
  Car car;
  
  Employee(String empname, int empid, Car car) {
    this.empname = empname;
    this.empid = empid;
    this.car = car;
  }
  public static void main(String[] args) {
    Car car = new Car("Dezire","blue","KA 02 B 5544");
    Employee e = new Employee("Raj",456234,car);
    System.out.println("----------Employee Details:------------");
    System.out.println("Employee Name: " + e.empname);
    System.out.println("Employee ID: " + e.empid);
    System.out.println("----------Employee's car details-------");
    System.out.println("Car Name: " + e.car.carname);
    System.out.println("Car color: " + e.car.color);
    System.out.println("Car Reg No: " + e.car.regno);
  }
}
----------Employee Details:------------
Employee Name: Raj
Employee ID: 456234
----------Employee's car details-------
Car Name: Dezire
Car color: blue
Car Reg No: KA 02 B 5544

63. Какво е композиция?

Съставът означава a принадлежат или са част от вид асоциация. С други думи, можем да кажем, че един обект съдържа или е съставен от друг обект. Това реализира силен тип асоциация, което означава, че ако вътрешният обект не може да съществува, ако основният външен обект е унищожен.

Например, не можем да имаме училище без ученици. Това означава, че училище не може да съществува без ученици в него. Следователно той създава състав между училище и ученици.

64. Каква е разликата между агрегирането и състава?

композицияАгрегация
Силен тип асоциацияСлаб тип асоциация
Осъществява част от или принадлежи към връзкаПрилага има връзка
И двата класа са зависими един от друг.
Класът дете не може да съществува без клас родител
Детският клас може да съществува независимо дори без родителски клас

65. Защо Java не поддържа използването на указатели?

Указателите се отнасят до местоположението на адреса в паметта. Ако ги използваме в Java, това прави опасно и също така увеличава сложността и не ни позволява да реализираме абстракция. Това не се изисква за ООП с общо предназначение, тъй като за управлението на паметта се грижи събирането на боклука.

66. Какво е супер ключова дума в Java?

Java супер ключова дума е справка променлива, която използваме при наследяване, за да се позовем на непосредствения обект на родителски клас от дъщерния клас. Можем да използваме ключовата дума super за достъп до променливата на родителския клас, метода на родителския клас и конструктора на родителски клас. Всеки път, когато създаваме екземпляр на подклас, компилаторът вътрешно извиква конструктора на родителски клас, използвайки ключовата дума super, дори ако не го извикваме изрично.

67. Как да приложим верига от конструктори, използвайки супер ключовата дума Java?

Можем да реализираме верига на конструктор, като извикаме конструктора на родителски клас от подкласа, който има различни аргументи, използвайки ключовата дума super. Винаги е важно да се отбележи, че супер операторът трябва да бъде първият оператор в детския конструктор. Когато правим изрично извикване на конструктор, тогава компилаторът не прави друго неявно извикване на родителския клас.

В примера по-долу правим изрично супер извикване на конструктора на родителски клас Фигури (име на низ) който има аргументи от конструктора на дъщерния клас Квадрат().

class Shapes {
  Shapes() {
    System.out.println("This is a shape");
  }
  
  Shapes(String name) {
    System.out.println("Shape name is: " + name);
  }
}
public class Square extends Shapes {
  
  Square() {
    super("Square");
    System.out.println("Square constructor");
  }
  public static void main(String[] args) {
    Square s = new Square();
  }
}
Shape name is: Square
Square constructor

68. Какви са ползите от супер ключовата дума Java?

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

69. Какви са разликите между this и super ключова дума?

тази ключова думасупер ключова дума
Той се отнася до текущия контекст на класаТой се отнася до контекста на базовия клас или родителския клас
Използва се главно за разграничаване на локалните и екземплярни променливи в конструктораТой се използва за инициализиране на променливите на базовия клас в конструктора на производен клас

70. Какъв е резултатът от долната java програма?

class College {
  
  College() {
    System.out.println("College Name is BITS Pilani");
  }
}

public class Department extends College {
  public String dept;
  public Department(String deptname) {
    dept = deptname;
  }
  public static void main(String[] args) {
    Department d = new Department("Computer Science");
    System.out.println("Department Name:" + d.dept);
  }
}
College Name is BITS Pilani
Department Name:Computer Science

Когато е създаден екземпляр на подкласа, той първо извиква конструктора на родителски клас, като използва ключовата дума super неявно и след това изпълнява конструктора на детски клас.

71. Можем ли да използваме и двете this и super ключова дума в конструктор?

Не, не можем да използваме и двете изрази заедно в един и същ конструктор, тъй като this и super трябва да бъде първото изявление в конструктора. Ако се опитаме да използваме и двете, ще получим грешка при компилацията.

72. Какво е клониране на обект?

Клонирането на обект е процесът на създаване на точно копие на обекта. Той използва метода на клониране от клас Object. Класът трябва да приложи интерфейса Cloneable, за да използва метода на клониране, иначе ще хвърли CloneNotSupportedException. Методът на клониране спестява повече време от създаването на обект с помощта на new ключова дума, ако искаме точно копие на създадения обект.

73. Какво е претоварване на метода?

Когато има няколко метода в един и същи клас с едно и също име, ние го наричаме метод претоварване, Това е един от статичен полиморфизъм техника. Той идентифицира кой метод да извика по време на компилиране въз основа на предадените параметри. Можем да реализираме претоварване на метода по 2 различни начина:

  • Чрез предаване на различен брой параметри
  • Чрез предаване на различни видове параметри.

74. Защо не е възможно претоварването на метода чрез промяна на типа на връщане?

Java не поддържа претоварване на метода само чрез промяна на типа на връщане, защото това ще създаде неяснота и компилаторът няма да знае кой метод да извика.

75. Можем ли да претоварим методите, като просто ги направим статични?

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

public class College {
  
  public void getCollegeName() {
    System.out.println("CollegeName is BITS Pilani");
  }
  
//Throws compilation error as duplicate method name
  public static void getCollegeName() {
    System.out.println("CollegeName is BITS Pilani");
  }

}

76. Можем ли да претоварим основния метод в Java?

Да, можем да претоварим основния метод в Java. Но Java компилаторът извиква публичния статичен void main метод само по време на зареждането на класа. За да изпълним претоварения основен метод, трябва да извикаме от действителния основен метод.

77. Какво е претоварване на метода с промоция на тип?

Претоварването на метода с промоция на тип означава, че когато не е намерен метод за съвпадение на параметър тип, той по подразбиране повишава типа данни до следващото ниво и извиква съответния метод. Например, ако извикаме метод с тип данни за кратък параметър и ако няма метод за съвпадение с кратък тип, но ако присъства int, тогава той извиква метода с тип данни за параметър int.

Основни въпроси за интервю за Java

public class Sample {

  public void add(int a, int b) {
    int sum = a + b;
    System.out.println("Integer addition");
    System.out.println("Sum: " + sum);
  }
  
  public void add(float a, float b) {
    float sum = a + b;
    System.out.println("Float addition");
    System.out.println("Sum: " + sum);
  }
    
  public static void main(String[] args) {
    Sample s = new Sample();
    short x,y;
    s.add(4, 5);

  }

}
Integer addition
Sum: 9

78. Какъв е резултатът от долната java програма?

public class Sample {

  public void add(int a, float b) {
    System.out.println("Integer addition");
  }
  
  public void add(float a, int b) {
    System.out.println("Float addition");
  }
    
  public static void main(String[] args) {
    Sample s = new Sample();
    s.add(4, 5);
  }

}
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
  The method add(int, float) is ambiguous for the type Sample

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

79. Какво е заместване на метода?

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

80. Можем ли да заменим статичен метод?

Не, не можем да заменим статичен метод, тъй като той ще доведе до грешка при компилацията.

81. Защо Java не позволява да се заменят статичните методи?

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

82. Можем ли да заменим претоварен метод?

Да, Java позволява заменяне на претоварен метод.

83. Каква е разликата между претоварването на метода и заместването на метода?

Претоварване на методаЗамяна на метода
Това реализира статичен полиморфизъмТова реализира динамичен полиморфизъм
Това се случва по време на компилацияТова се случва по време на изпълнение
Същите методи присъстват в един и същи класЕдни и същи методи присъстват в различни класове

84. Можем ли да заменим частните методи в Java?

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

85. Можем ли да променим обхвата на заменените методи в подкласа?

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

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

86. Можем ли да модифицираме клаузата за хвърляне на метода на суперкласа, като го заменим в подкласа?

Можем да модифицираме клаузата за хвърляне на метода на суперкласа, като заменим в подкласа, но трябва да следваме правилата по-долу за обработка на изключения:

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

87. Какъв е резултатът от долната Java програма?

class parent {
  
  public void print(int a) {
    System.out.println("Prints base class integer number");
  }
  
  public void print(double a) {
    System.out.println("Prints base class double number");
  }
}
public class child extends parent{
  
  public void print(double a) {
    System.out.println("Prints child class double number");
  }

  public static void main(String[] args) {
    child c = new child();
    c.print(5);
    c.print(5.5);

  }

}
Prints base class integer number
Prints child class double number

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

88. Можем ли да имаме виртуални функции в Java?

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

89. Какво представлява ковариантният тип връщане?

Когато заменим метод в подкласа, като декларираме типа на връщане като тип на подклас, ние го наричаме ковариантен тип на връщане. Java поддържа ковариантен тип връщане само от JDK 5.0 и по-нова версия.

class Base {
  Base display() {
    return this;
  }
}
public class Derived extends Base{

  Derived display() {
    return this;
  }
  
  public void show() {
    System.out.println("Covariant return type");
  }
  public static void main(String[] args) {

    new Derived().display().show();

  }

}
Covariant return type

90. Какъв е резултатът от кода по-долу?

class Base {
  public void display() {
    System.out.println("Base method");
  }
}
public class Derived extends Base {

  public void display() {
    System.out.println("Derived method");
  }
  
  public static void main(String[] args) {

    Base b = new Derived();
    b.display();

  }

}
Derived method

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

91. Каква е последната ключова дума в Java?

Крайната ключова дума на Java е модификатор без достъп, който предоставя малко ограничения или ограничения за потребителя. С други думи, когато използваме ключовата дума финал, не можем да ги преназначим или реинициализираме. Това означава, че не можем да променяме стойностите, след като бъдат инициализирани. Можем да използваме крайната ключова дума Java за променливи, методи, клас и променливи на параметри.

public class Circle {
  final double PI= 3.14;
  
  public void area(int r) {
    PI= 2.14;
    double area = PI*r*r;
    System.out.println("Area of circle: " + area);
  }
  public static void main(String[] args) {
    Circle c = new Circle();
    c.area(4);
  }
}
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
  The final field Circle.PI cannot be assigned

92. Какъв е крайният метод?

Когато използваме ключовата дума java final преди метода, ние я наричаме окончателен метод. В този случай не можем да заменим крайния метод. Можем да извикаме крайния метод директно от подклас, но не можем да го заменим, тъй като това ще доведе до грешка при компилацията.

class Vehicle {
  final void speed() {
    System.out.println("Default speed");
  }
}
public class Car extends Vehicle{
  void speed() {
    System.out.println("Car speed");
  }
  public static void main(String[] args) {
  }
}
Error: LinkageError occurred while loading main class Car
  java.lang.VerifyError: class Car overrides final method Vehicle.speed()V

93. Какво е финален клас?

Когато използваме последната ключова дума, докато създаваме клас в java, ние я наричаме окончателен клас. Не можем да разширим окончателен клас и не поддържа наследяване. Повечето ядрени библиотеки на java имат финален клас като String клас например.

final class Vehicle {
  public void speed() {
    System.out.println("Default speed");
  }
}
public class Car extends Vehicle{
  public static void main(String[] args) {
    
  }
}
The type Car cannot subclass the final class Vehicle

94. Какво е окончателна празна променлива?

Когато не присвояваме никаква стойност на крайната променлива по време на декларацията, ние я наричаме празна крайна променлива в java. Ако не инициализираме крайната променлива по време на декларацията, тогава можем да направим същото само в конструктор, в противен случай ще получим грешка при компилация. Не можем да инициализираме крайната променлива във всеки друг метод. Основното използване на окончателна празна променлива е, когато искаме да имаме различни стойности за всяко създаване на екземпляр.

95. Можем ли да инициализираме крайна празна променлива?

Да, можем да инициализираме крайна празна променлива само в конструктор, ако не я инициализираме по време на декларацията на променливата. Ако това е статична крайна променлива, можем да я инициализираме само в статичен блок.

public class Circle {
  final double PI;
  
       //Initialize final variable in the constructor
  Circle() {
    PI= 3.14;
  }
  
  public void area(int r) {
    double area = PI*r*r;
    System.out.println("Area of circle: " + area);
  }
  public static void main(String[] args) {
    Circle c = new Circle();
    c.area(4);
  }
}
Area of circle: 50.24

96. Можете ли да обявите основния метод на Java като окончателен?

Да, можем да обявим основния метод за окончателен, тъй като не е необходимо да заместваме основния метод в Java.

97. Какъв е резултатът от долупосочения код на Java?

public class Test {

  public static void main(String[] args) {
    final String value;
    value = "Hello";
    System.out.println(value);

  }

}
Hello

Той отпечатва изхода като „Hello“, тъй като го инициализираме само веднъж.

98. Какъв е резултатът от следния код?

class Sample {
  public final void display() {
    System.out.println("Sample display method");
  }
}
public class Test extends Sample{
  
  public final void display() {
    System.out.println("Test display method");
  }

  public static void main(String[] args) {
    Sample s = new Sample();
    s.display();

  }

}
Error: LinkageError occurred while loading main class Test
  java.lang.VerifyError: class Test overrides final method Sample.display()V

Изхвърля грешка при компилация, тъй като не можем да заменим окончателния метод на Java.

99. Можем ли да обявим конструктор или интерфейс за окончателен?

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

100. Каква е разликата между крайния метод и абстрактния метод?

Основната разлика е, че окончателният метод не може да бъде заменен, докато абстрактният метод трябва да бъде заменен в подкласа, който реализира абстрактния клас.

101. Каква е разликата между полиморфизма по време на компилация и време на изпълнение?

Полиморфизъм по време на компилацияПолиморфизъм по време на изпълнение
Обаждането се случва по време на компилацияОбаждането се случва по време на изпълнение.
Нарича се още статичен полиморфизъм или ранно свързванеНарича се още динамичен полиморфизъм или късно свързване
Претоварването на метода е пример за полиморфизъм по време на компилацияЗамяна на метода е пример за полиморфизъм по време на изпълнение
По-бързо изпълнениеПо-бавно изпълнение
Осигурява по-малко гъвкавостОсигурява повече гъвкавост
Методи със същото име присъстват в същия класМетодите със същото име присъстват в извлечения клас

102. Какво е полиморфизъм по време на изпълнение?

Когато полиморфизмът се разреши по време на изпълнение, ние го наричаме динамичен or по време на работа полиморфизъм. В този тип полиморфизъм в java той използва референтната променлива на суперкласа, за да извика заменения метод. Това означава, че въз основа на обекта, който е отнесен от референтната променлива, той извиква заменения метод на съответния клас. Можем да използваме заместване на метода концепция за прилагане на динамичен полиморфизъм.

103. Възможно ли е да се постигне полиморфизъм по време на изпълнение с членове на данни?

Не, не можем да постигнем полиморфизъм по време на изпълнение, като заменим членовете на данните. Само методите могат да бъдат заменени, но не и променливите.

class Bank {
  public double interestRate = 7.5;
}
class SBI extends Bank {
  public double interestRate = 6.4;
}
public class BankDemo {
  public static void main(String[] args) {
    Bank b = new SBI();
    System.out.println(b.interestRate);
    SBI s = new SBI();
    System.out.println(s.interestRate);
  }
}
7.5
6.4

Когато имаме едно и също име на променлива в суперкласа и подкласа, въз основа на референтните променливи, той извиква съответната променлива. В този пример b е екземпляр на суперкласа, следователно първо отпечатва стойността на променливата на суперкласа. След това s е екземпляр на подклас, който отпечатва стойността на променливата на подкласа.

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

Статично обвързванеДинамично свързване
Нарича се още ранно обвързване или обвързване по време на компилацияНарича се още късно свързване или свързване по време на изпълнение
Претоварването на метода е статично обвързванеЗаменянето на метода е динамично обвързване
Използва тип клас за разрешаване на обвързванетоИзползва тип обект за разрешаване на обвързване
По-бързо изпълнениеБавно изпълнение

105. Какъв е резултатът от следната програма?

class Vehicle {
  public void speed() {
    System.out.println("Default speed");
  }
}
class Bike extends Vehicle {
  public void speed() {
    System.out.println("Bike speed");
  }
}
class Car extends Vehicle {
  public void speed() {
    System.out.println("Car speed");
  }
}
public class VehicleType {
  public static void main(String[] args) {
    //Create an instance of Vehicle
    Vehicle v = new Vehicle();
    v.speed();
    
    //Create an instance of Bike
    Vehicle b = new Bike();
    b.speed();
    
    //Create an instance of Car
    Vehicle c = new Car();
    c.speed();
  }
}
Default speed
Bike speed
Car speed

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

106. Какво представлява операторът Java instanceOf?

Операторът Java instanceOf е оператор за сравнение, който проверява дали обектът е екземпляр от някакъв тип клас. Връщаната стойност е или true, или false. Ако няма стойност, тя връща false.

public class SpecialOperator {

  public static void main(String[] args) {
    String value = "";
    Boolean b;
    b = (value instanceof String);
    System.out.println(b);
  }

}
true

107. Какво е абстракция?

Абстракция в Java, която е една от ООП концепции, е процесът на показване само на необходимата информация на потребителя чрез скриване на други подробности. Той показва какво прави методът, а не как се прави. Например, помислете за мобилен телефон, ние просто знаем, че натискането на бутона за повикване ще набере необходимия номер. Но всъщност не знаем действителното изпълнение на това как работи обаждането. Това е така, защото вътрешният механизъм не е видим за нас. Можем да постигнем абстракция, като използваме абстрактен клас или интерфейс.

108. Каква е разликата между абстракция и капсулиране?

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

109. Какво представлява абстрактният клас?

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

110. Може ли да има абстрактен метод без абстрактен клас?

Не, ако има абстрактен метод, тогава трябва да декларираме този клас като абстрактен клас.

111. Какъв е резултатът от следния код?

abstract class Area {
  abstract void square(int x);
}
public class Test {

  int area;
  
  public static void main(String[] args) {
    new Area() {
      void square(int x) {
        int area = x * x;
        System.out.println("Area is: " + area);
      }
    }.square(5);

  }

}
Area is: 25

Горният код отпечатва изхода като 25. Тестовият клас реализира абстрактния метод квадрат.

112. Можем ли да декларираме метод и като абстрактен, и като окончателен?

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

113. Можем ли да създадем екземпляр на абстрактен клас?

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

114. Какво е интерфейс?

Java интерфейсът е ключова дума, която ни позволява да постигнем пълна абстракция. Интерфейсът ни казва какво прави, а не как го прави. Това означава, че интерфейсът съдържа само декларация за функция и не съдържа изпълнение на функция. Класът, който реализира интерфейса, съдържа дефиницията на функцията. Не можем да създадем екземпляр или да имаме променливи на екземпляра в интерфейс. Всички променливи в интерфейса са публични, статични и окончателни по подразбиране и трябва да бъдат инициализирани по време на декларацията. Всички методи са публични и абстрактни по подразбиране.

115. Можем ли да декларираме интерфейсния метод като статичен?

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

116. Можем ли да обявим интерфейс за окончателен?

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

117. Какво представлява маркерният интерфейс?

Когато дефинираме празен интерфейс, ние го наричаме интерфейс на маркер или маркер. Този тип java интерфейс няма никакви свойства или методи. Малко съществуващи интерфейси на тагове в java са EventListener, Serializable, Remote (java.rmi.Remote). Основната употреба на таг интерфейса е, че когато класът реализира такъв интерфейс, той може да използва членството в този интерфейс. Това означава, че JVM (Java Virtual Machine) извършва специална операция в подкрепа на този интерфейс. Например процес на сериализация или десериализация.

package java.uti;
public interface EventListener 
{ }

118. Какви са разликите между абстрактния клас и интерфейса?

Абстрактен класInterface
Абстрактният клас може да има както абстрактни, така и абстрактни методиИнтерфейсът може да има само абстрактни методи. От Java 8 поддържа методи по подразбиране
Не поддържа множествено наследяванеПоддържа множествено наследяване
Използва абстрактна ключова думаИзползва ключова дума за интерфейс
Използва разширява ключовата дума за наследяване на абстрактния класИзползва ключова дума implements за реализиране на интерфейса
Той може да разшири друг клас Java и също така да реализира интерфейсТой може да разшири само друг интерфейс
Членовете могат да имат модификатори на достъп като частни, защитени и т.н.Членовете могат да имат само публични
Може да има статични, нестатични, крайни или нефинални променливи.Може да има само статични и крайни променливи

119. Можем ли да декларираме променливите в интерфейса като частни или защитени?

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

120. Кога може да се направи препратка към обект към препратка към интерфейс?

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

121. Как да създам клас само за четене в Java?

Можем да създадем клас само за четене в Java, като направим всички променливи като частни. Класът ще съдържа само getter методи, които се използват за четене на стойностите на частната променлива. Тъй като няма методи за задаване, не можем да модифицираме стойностите.

de class Account {
  private int accountnumber;
  
  public int getAccountNumber() {
    return accountnumber;
  }
}

122. Как да създам клас само за писане в Java?

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

class Account {
  private int accountnumber;
  
  public void setAccountNumber(int accno) {
    this.accountnumber = accno;
  }

}

123. Какви са предимствата на капсулирането в Java?

  • Осигурява сигурност, като не позволява на външния клас да променя частните полета.
  • Можем да имаме методи само за четене или само за запис, като по този начин предоставяме ограничения на други класове за достъп до тях. Това означава, че ако клас има само a получавам метод, можем да четем само променливите. По същия начин можем да имаме само a определен метод само за задаване на променливата.
  • Осигурява гъвкавост и повторна употреба чрез методите за получаване и задаване.
  • Подробности за изпълнението не се виждат от други класове.
  • Лесно за модулно тестване

124. Какво представлява пакет в Java?

Пакети в Java групира множество класове, интерфейси или пакети и т.н. на едно място. Можем да разгледаме пакет, подобен на папка. Папката може да съдържа множество файлове. По същия начин в Java пакетът съдържа група класове. Основната цел е да се избегнат конфликти на имена на класове. Има два вида пакети в Java: вградени и дефинирани от потребителя.

125. Какви са предимствата от използването на пакет в Java?

  • Избягва конфликти при именуване на класове. Това означава, че можем да използваме едни и същи имена на класове в 2 различни пакета.
  • Осигурява повторна употреба чрез достъп до клас от 1 пакет в друг.
  • Лесна поддръжка, тъй като часовете ще бъдат организирани
  • Осигурява защита на достъпа за защитени класове и класове по подразбиране. Моля, обърнете се към модификатори за достъп за повече информация.
  • Помага при капсулиране или скриване на данни.

126. Как да създам пакет в Java?

Ако използваме IDE като Eclipse, можем да създадем пакет, като следваме стъпките по-долу:

  1. Създайте нов Java проект - Например: “PackageDemo”.
  2. Щракнете с десния бутон върху проекта -> Ново -> Пакет
  3. Въведете името на пакета. Например: com.tutorial.packagedemo
  4. Щракнете върху Finish

Ако използваме бележник, следвайте стъпките по-долу:

  1. Определете пакет package_name. Създайте клас име_клас и го запазете като class_name.java
  2. Компилирайте кода с помощта на командния ред: javac -d. class_name.java
  3. Изпълнете кода, като използвате командния ред: java_име_пакет.клас_име

127. Как можем да получим достъп до клас в пакет от друг клас?

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

128. Задължително ли е да импортирате пакет java.lang?

Не, не е задължително да импортирате пакет java.lang, тъй като той е импортиран от JVM по подразбиране.

129. Можем ли да импортираме един и същ пакет / клас два пъти и как JVM го зарежда?

Да, можем да импортираме един и същ пакет / клас няколко пъти. JVM обаче ще го зареди само веднъж вътрешно, независимо колко пъти сме го импортирали.

130. Какво е статичен импорт?

Поддържа Java 5 и по-нова версия статичен импорт.  Това означава, че когато използваме статичното импортиране, не е необходимо да посочваме името на класа, докато осъществяваме достъп до неговите полета или методи.

import static java.lang.System.*;
public class StaticImportDemo {
  public static void main(String[] args) {
    out.println("Exmaple of static import");
    
  }
}

131. Какво представлява обработката на изключения в Java?

Обработката на изключения в Java е една от най-важните концепции в програмирането на Java. Винаги, когато разработваме софтуер, трябва да гарантираме, че правилно обработваме изключенията на Java. В Java изключение е условие, което спира или прекратява процеса на изпълнение, когато срещне неочаквано състояние. Това прекъсва нормалния поток на изпълнение и изхвърля генерирано от системата съобщение, което потребителят може да не разбере. Можем да се справим с тази ситуация в Java, като предоставим смислено съобщение на потребителя, когато възникне изключение, без да прекъсваме потока на изпълнение.

132. Какви са различните видове изключения, които могат да възникнат в Java?

Има два вида изключения, които могат да възникнат в Java:

  • Проверени изключения: Можем да ги наречем и като компилация изключения, което означава, че компилаторът ги обработва по време на компилацията на кода. С други думи, той проверява изключението по време на компилацията и предупреждава разработчика, че има шансове да възникне изключение. В този случай разработчикът трябва да се справи с него в кода.
  • Непроверени изключения: Ние също можем да ги извикаме изключения по време на изпълнение от възниква по време на изпълнението на програмата. Много е важно разработчикът да се справи с тях, за да излезе безопасно от изпълнението на кода, когато срещне неочаквано състояние. Пример: ArrayIndexOutOfBoundException, NullPointerException и др.

133. Каква е йерархията на класовете Java Exception?

Основният клас на Java Exceptions е java.lang.Throwable клас, който съдържа два подкласа: Грешка и Изключение.

Предаване на изключение в Java

134. Каква е разликата между проверени и непроверени изключения?

Основната разлика е, че проверените изключения се обработват по време на компилация, докато непроверените изключения се обработват по време на изпълнение.

135. Какъв е основният клас за изключение и грешка?

Основният клас за изключение и грешка е класът Throwable, който принадлежи към пакета java.lang.

136. Необходимо ли е всеки блок за опит да бъде последван от блок за хващане?

Не, не е необходимо. A try block трябва да бъде последван или от улов блок или окончателно блок. Методът трябва да декларира типа изключения, които могат да възникнат с помощта на хвърля ключова дума.

public class Test {

  public static void main(String[] args) {
    try {
      int a = 5;
      System.out.println(a/0);
    }
    finally {
      System.out.println("Finally block");
    }	

  }

}
Finally block
Exception in thread "main" java.lang.ArithmeticException: / by zero
  at Test.main(Test.java:6)

137. Какъв е резултатът от кода по-долу?

public class UncheckedException {
  
  int a = 10;
  int b = 0;
  public void divide() {
    try {
      int result = a/b;
      System.out.println("Result: " + result);
    }
    catch(Exception e) {
      System.out.println(e);
    }
    catch(ArithmeticException e) {
      System.out.println("Division by 0 is not allowed");
    }
    finally {
      System.out.println("Divide method executed");	
    }
    
  }

  public static void main(String[] args) {
    UncheckedException uce = new UncheckedException();
    uce.divide();

  }

}
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
  Unreachable catch block for ArithmeticException. It is already handled by the catch block for Exception

Горният код изхвърля грешка при компилация, тъй като първо улавяме изключението, като използваме класа Exception. В този случай той никога няма да достигне до блока за улавяне на ArithmeticException, тъй като Exception е родителският клас за всички видове изключения. Трябва да използваме блок за улов на клас на изключение винаги като последния блок.

138. Какво е най-накрая блок?

Най- finally блок винаги следва блок за опит за улавяне. Той изпълнява важния код, независимо дали възниква изключение или не. Използва се главно за почистване на кода като затваряне на файл, освобождаване на обект и т.н. Finally блок се изпълнява към края след try-catch се изпълнява. Ако някой изход или прекъсване на системата се случи преди това, тогава finally блокът няма да бъде изпълнен.

139. Можем ли да използваме окончателно блок без блок за улов?

Да, можем да използваме finally блок без блок за улов, но той трябва да следва try вместо това блокирайте.

140. При коя ситуация окончателният блок никога няма да бъде изпълнен?

Има 2 ситуации, в които блокът окончателно никога няма да бъде изпълнен:

  • Когато излизането на системата се случва с помощта на System.exit()
  • Когато възникне фатална грешка, която кара процеса да се прекрати.

141. Каква е разликата между ключовата дума throw и throws в Java?

Java хвърлянеJava хвърля
Използва се вътре в методаИзползва се в декларацията на метода
Използва се за хвърляне на ново изключение вътре в методаИзползва се за деклариране на изключение, което може да възникне вътре в метода
Можем да хвърлим само едно изключение наведнъжМожем да обработваме множество изключения наведнъж в декларацията на метода
Може да се използва само с непроверено изключение.Може да се използва както за проверени, така и за непроверени изключения
Не изисква опит за улавяне, за да се справи с изключениетоОтговорността на извикания метод е да се справи с изключението, използвайки try-catch

142. Какъв е резултатът от кода по-долу?

public class Test {

  public static void main(String[] args) {
    try {
      throw 10;
    }
    catch(Exception e) {
      System.out.println(e);
    }
    finally {
      System.out.println("Finally block");
    }	

  }

}
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
  No exception of type int can be thrown; an exception type must be a subclass of Throwable

  at Test.main(Test.java:5)

Това ще хвърли грешка при компилация, тъй като не можем да хвърлим целочислена стойност. Хвърленото изключение трябва да бъде подклас на Throwable.

143. Какъв е изходът на кода по-долу?

import java.util.LinkedList;

class OwnException extends Exception {
  String message;
  OwnException(String s) {
    message = s;
  }
  
  public String toString() {
    return ("Exception: " + message);
  }
}
public class CustomException {

  public static void main(String[] args) {
    try {
      throw new OwnException("My own custom exception");
    }
    catch(Exception e) {
      System.out.println(e);
    }

  }

}
Exception: My own

потребителско изключение

Той отпечатва съобщението за изключение, което предаваме с помощта на ключовата дума throw. Тук създаваме персонализирано изключение и хвърляме изключението в блока try.

144. Можем ли да възстановим изключение?

Да, можем да възстановим изключение.

145. Може ли заместващ метод subclass да декларира изключение, дори ако родителският клас не създаде изключение?

Да, заместващият метод в подклас може да хвърли изключение, при условие че е непроверено изключение. В този случай той не позволява да се хвърли проверено напрежение.

146. Какво е размножаване по изключение?

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

public class PropagationDemo {

  void display() {
    int a = 10/0;
  }
  void test() {
    display();
  }
  void show() {
    try {
      test();
    }
    catch(Exception e) {
      System.out.println("Exception handled in show method");
    }
  }
  public static void main(String[] args) {
    PropagationDemo p = new PropagationDemo();
    p.show();

  }

}
Exception handled in show method

В горния пример възниква изключение в метода display (). Тъй като не се обработва в този метод, той се разпространява към метода test (), откъдето е бил извикан. Той не се обработва и тук, той допълнително проверява в следващия метод, откъдето е бил извикан тестът. И накрая, той се справя с метода show.

147. Какъв е резултатът от кода по-долу?

public class Test {

  void m() {
    try {
      System.out.println("Inside m method");
      n();
    }
    catch(Exception e) {
      System.out.println("Exception caught in m method");
    }
  }
  void n() throws Exception{
    try {
      System.out.println("Inside n method");
      p();
    }
    catch(Exception e) {
      throw new Exception();
    }
    
  }
  void p() throws Exception {
    try {
      System.out.println("Inside p method");
      throw new Exception();
    }
    finally {
      System.out.println("Inside finally block");
    }
    
  }
  public static void main(String[] args) {
    Test t = new Test();
    t.m();
  }

}
Inside m method
Inside n method
Inside p method
Inside finally block
Exception caught in m method

От основния метод той извиква м () метод, който отпечатва ред и след това извиква н() метод. Вътре в този метод той отпечатва друг ред и след това извиква p () метод. Той отпечатва ред и след това изхвърля изключение. От finally блок винаги се изпълнява, той изпълнява това първо и прехвърля изключението в н() метод. Това отново разпространява изключението до м () метод, който обработва изключението.

148. Какъв е резултатът от кода по-долу?

public class Demo {

  int x;
  Demo(int x) {
    this.x = x;
  }
  
  public int sum() {
    x = x  + 5;
    try {
      x = x + 5;
      
      try {
        x = x * 5;
        throw new Exception();
      }
      catch(Exception e) { 
        x = x - 5;
      }
    }
    catch(Exception e) {
      x = x - 5;
    }
    
    return x;
  }
  public static void main(String[] args) {
    Demo d = new Demo(5);
    int result = d.sum();
    System.out.println("Value of x: " + result);

  }

}
Value of x: 70

Конструкторът първо инициализира стойността x на 5 по време на създаването на екземпляр. След това извиква метода sum, където добавя 5. Сега x = 10. Вътре в първия блок за опит, той добавя още 5, което означава x = 15. Вътре вложен опит, той се умножава по 5, следователно x = 75. Сега, той хвърля ново изключение, което се улавя от вътрешния блок за хващане, когато изважда 5. Следователно крайният резултат е 70. Външният блок за хващане никога няма да бъде изпълнен, тъй като тук няма хвърлено изключение.

149. Какво е String pool?

String pool е специална памет за съхранение на String обектите. Когато създаваме низов литерал, JVM първо проверява в „константния пул на низове“ дали низът съществува. Ако не съществува, JVM създава нов екземпляр на низ, в противен случай ще се върне само препратка към обединения екземпляр. Например в долния случай и двата низови обекта държат една и съща стойност. Следователно се създава само 1 обект (т.е. s1) и s2 ще има препратка към s1. Това означава, че независимо от това колко някога низови променливи създаваме с една и съща стойност, само 1 екземпляр ще бъде създаден в пула с константи.

String s1 = "Java language"; 
String s2 = "Java language";

String в java

150. Какво представлява неизменяем низ в Java?

Неизменяемият низ в Java означава, че не можем да променим стойността на String. Това означава, че след като присвоим стойност на низ обект, не можем да променим стойността му.

public class StringConcat {

  public static void main(String[] args) {
    String s1 = "Hello,";
    String s2 = s1.concat("How are you?");
    System.out.println(s1);
    System.out.println(s2);
  }

}
Hello,
Hello,How are you?

Въпреки че обединяваме нов низ в s1 обект, стойността на s1 обект остава непроменена. Но ние обаче можем да съхраним обединената стойност в нов низ обект.

151. Защо обектите String са неизменни в Java?

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

152. Какви са различните начини за създаване на низ обект?

Можем да създадем низов обект по следните два начина:

  • Използване на низ литерал: Това е най-прекият начин за създаване на низ в Java. Можем да създадем низ, като заградим стойността в двойни кавички. Тук променливата “value” от тип String съдържа низа с име “Java language”.
    String value = "Java language";

    Когато създаваме низов литерал, JVM първо проверява в „константния пул“. Ако съществува, тогава връща само препратката към пула на екземпляра, иначе създава нов екземпляр.

  • Използване на новата ключова дума: Когато искаме да имаме 2 различни обекта, съдържащи една и съща стойност на низ, тогава създаваме низ с помощта на нов ключова дума, както е описано по-долу. В този случай JVM създава 2 различни низови обекта в паметта на купчината.
    String s1 = new String("Java");
    String s2 = new String("Java");

153. Колко обекта ще бъдат създадени в кода по-долу?

String a = "Java";
String b = "Java";
String c = "Java";

Само 1 обект ще бъде създаден, тъй като създаваме низ литерали. Когато се създава нов литерален низ, той проверява дали стойността вече присъства в пула литерални низове. Тъй като е налице, той просто връща препратката към този екземпляр.

154. Защо Java използва концепцията за String литерали?

Java използва String литерали за ефективно управление на паметта, тъй като не създава нови копия за същата стойност.

155. Колко обекта ще бъдат създадени в кода по-долу?

String s = new String("Java");

Тъй като създаваме низ с помощта на новата ключова дума, той създава 2 обекта, един в паметта на купчината и един в пула с константи.

156. Какъв е резултатът от следния код?

public class Test {

  public static void main(String[] args) {
    String s1 = "Java language";
    String s2 = new String("Java language");
    if(s1 == s2)
      System.out.println("s1 == s2");
    if(s1.equals(s2))
      System.out.println("s1.equal(s2)");

  }

}
s1.equal(s2)

Въпреки че и двата низови обекта имат едно и също съдържание, техните препратки са различни, тъй като са създадени по различни начини. Следователно == връща false, тъй като проверява за препратки, а методът equals () връща true, тъй като проверява за съдържанието.

157. Какъв е резултатът от кода по-долу?

public class Test {

  public static void main(String[] args) {
    String s1 = "Java language";
    String s2 = new String("Java language");
    s2 = s2.intern();
    System.out.println(s1==s2);
    
  }

}
true

Методът intern връща канонично представяне на низа, което означава, че връща препратка към еквивалента на низа от пула. Следователно и s1, и s2 ще имат една и съща препратка.

158. Какви са разликите между String и StringBuffer?

НизStringBuffer
Той е неизмененТой е променлив
Процесът на обединяване е по-бавенПроцесът на обединяване е по-бърз
Той заменя метода на equals от клас Object за comapreТой не отменя метода на equals
Консумира повече паметКонсумира по-малко памет

159. Какви са разликите между StringBuffer и StringBuilder?

StringBufferStringBuilder
Той е безопасен за конциНе е безопасно за нишки
Той е синхронизиранТой не е синхронизиран
Производителността е по-бавнаИзпълнението е по-бързо
Той е достъпен от JDK 1.0Той е достъпен от JDK 1.5

160. Как да създам неизменяем клас в Java?

Можем да създадем неизменяем клас в Java, като направим всички полета като final заедно с класа като final. Това е така, защото не можем да променим стойностите на final членове.

public final class Sample {

  final int accountNumber;
  
  public Sample(int accno) {
    this.accountNumber = accno;
  }

  public int getAccountNumber() {
    return accountNumber;
  }
}

161. Каква е ползата от метода toString () в Java?

В Java методът toString () връща низово представяне на обекта. Компилаторът вътрешно извиква метода toString (), когато отпечатваме обект. Това улеснява писането на код.

162. Защо charArray () е предпочитан пред String за съхраняване на парола?

Низ се съхранява в паметта, докато не се събере боклук. Следователно, ако съхраняваме пароли в String, тя остава в паметта за по-дълго време и може да доведе до заплаха за сигурността, защото можем да извлечем дъмп на паметта. От друга страна, ако паролата се съхранява в charArray, можем веднага да я зададем на празно, след като бъде използвана, което предотвратява заплахите за сигурността.

163. Напишете програма за Java, за да преброите броя на думите в низ.

public class CountWords {

  public static void main(String[] args) {
    String s = "Welcome to Java programming";
    String[] arr = s.split(" ");
    System.out.println("Number of words: " + arr.length);

  }

}
Number of words: 4

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

164. Избройте няколко класа, присъстващи в пакета java.util.regex

Следните класове или интерфейси присъстват в пакета java.util.regex

  • Интерфейс MatchResult
  • Клас на мач
  • Клас на шаблон
  • PatternSyntaxException клас

165. По какво метасимволите се различават от обикновените знаци?

Метасимволите са специални символи по отношение на a регулярен израз. Малко метасимволи са $ ^ *, {[). За да ги третираме като нормални символи, трябва да използваме обратна наклонена черта, преди тези знаци да се считат за специални знаци.

166. Напишете регулярен израз, за ​​да потвърдите парола с условия: Паролата трябва да започва с азбуката, последвана от буквено-цифрови, чиято дължина трябва да бъде между 8 и 15.

Регулярният израз е ^ [a-zA-Z] [a-zA-Z0-9] {8-15} където ^ означава регулярен израз, последван от азбука и след това буквено-цифров. {8-15} означава, че дължината трябва да бъде между 8 и 15.

167. Какъв е резултатът от следния код?

import java.util.regex.Pattern;

public class RegEx {

  public static void main(String[] args) {
    System.out.println(Pattern.matches(".a..", "Java"));
    System.out.println(Pattern.matches("..a.", "Java"));
    System.out.println(Pattern.matches("a...", "Java"));
    System.out.println(Pattern.matches("...a", "Java"));

  }

}
true
false
false
true

Първото и последното твърдение са верни, тъй като моделът съвпада с входния низ. Той проверява дали „а“ присъства във втората и четвъртата позиция на низа. Вторият и третият оператор са неверни, тъй като моделът не съвпада с входния низ, което означава, че „а“ не присъства на втората и първата позиция.

168. Какви са предимствата на вътрешните класове на Java?

  • Полезно е, ако клас се нуждае от достъп само до един клас, който може да бъде реализиран с помощта на вътрешни класове или вложени класове
  • Вътрешният клас има достъп до всички полета и членове на външния клас, включително частните полета.
  • Насърчава оптимизирането и поддръжката на кода.

169. Какво е вложен клас?

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

public class classA {
  //code
  public class classB {
    //code
  }
}

170. Какви са недостатъците на вложените класове?

  • Това увеличава общия брой класове.
  • Увеличава натоварването на JVM, тъй като трябва да изпълнява определени операции, свързани с класове.

171. Какви са видовете вътрешни класове, използвани в Java?

  • Вложени вътрешни класове
  • Метод местни вътрешни класове
  • Анонимни вътрешни класове
  • Статични вложени класове

172. Каква е разликата между вложения клас и вътрешния клас?

Основната разлика е, че вътрешните класове са нестатични вложени класове, което означава, че те са част от вложени класове.

173. Можем ли да получим достъп до нефиналната локална променлива в локалния вътрешен клас?

Не. За достъп до вътрешния вътрешен клас трябва да декларираме локалната променлива като константа.

174. Колко файлове на класа се създават при компилиране на файла на външния клас в кода по-долу?

public class classA {
  int a;
  class classB {
    int b;
  }
  class classC {
    int c;
  }
  
  public static void main(String[] args) {
    classA ca = new classA();
  }
}

Ще бъдат създадени 3 класа файлове - classA.class, classA $ classB.class и classA $ classC.class

175. Какво е анонимен вътрешен клас?

Анонимните класове помагат да се декларира и създава екземпляр на клас едновременно. Той е подобен на локален клас, с изключение на това, че няма име на клас. Полезно е, ако трябва да ги използваме само веднъж.

class Test {
  public void print() {
    System.out.println("Test print method");
  }
}

class AnonymousDemo {
  
  public void showDemo() {
    //Anonymous class
    Test t = new Test() {
      public void print() {
        System.out.println("Anonymous Demo print method");
      }
    };
    t.print();
  }
}
public class AnonymousClass {
  
  public static void main(String[] args) {
    AnonymousDemo a = new AnonymousDemo();
    a.showDemo();

  }

}
Anonymous Demo print method

Вътре в класа AnonymousDemo създаваме анонимен клас, като разширяваме класа Test и заместваме метода на печат. Следователно, докато извиква метода showDemo (), той извиква анонимния метод print ().

176. Какво е вложен интерфейс?

Интерфейс в рамките на друг интерфейс или клас е вложен интерфейс. Един от най-добрите примери е влизане интерфейс. Това е дефинирано в Карта интерфейс. Ето защо имаме достъп до него, използвайки Карта. Вход и не може да осъществи директен достъп до интерфейса Entry. Основното използване на вложения интерфейс е, че позволява да се реализира само определен интерфейс в рамките на групиран интерфейс. Винаги можем да осъществим достъп до вътрешния интерфейс само с помощта на външния интерфейс. По подразбиране вложените интерфейси са статични и публични. Въпреки това можем да променим типа достъп на вътрешния интерфейс.

177. Може ли клас да има интерфейс?

Да, можем да определим интерфейс в рамките на клас. Това се нарича още вложен интерфейс.

178. Може ли интерфейсът да има клас?

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

179. Какво представлява събирането на боклука?

Събирането на боклук е автоматичен процес на управление на паметта, който освобождава паметта чрез изтриване на неизползваните обекти. По този начин той ефективно управлява паметта и няма нужда от ръчно унищожаване или изтриване на обект. Това е причината, че променливи, чиито стойности са само декларирани, а не инициализирани, връща стойност 0.

180. Какво е gc ()?

Методът gc () е част от клас System and Runtime, който се използва за извикване на боклука изрично за процес на почистване. Чрез извикване на този метод той освобождава паметта на неизползваните обекти.

public class GarbageDemo {

  public void finalize() {
    System.out.println("Garbage collected");
  }
  public static void main(String[] args) {
    GarbageDemo g1 = new GarbageDemo();
    GarbageDemo g2 = new GarbageDemo();
    
    g1 = null;
    g2 = null;
    System.gc();

  }

}

Той извиква метода finalize, когато се извика методът gc () и освобождава пространството на обектите g1 и g2. Следователно той извиква метода на финализиране два пъти.

181. Как се контролира събирането на боклука?

Процесът на събиране на боклука се контролира от Java Virtual Machine (JVM) автоматично, когато има по-малко памет или липсва памет. Можем да го контролираме и външно, като извикаме метода System.gc (), за да почистим неизползваните обекти и по този начин да освободим паметта.

182. Как можем да направим препратка към обект в Java?

Има 3 начина за препращане към обект в Java:

  • Анулиране на обекта или присвояване на нулева стойност на обекта.
    Student s = new Student();
    s = null;
  • Присвояване на препратка към друг обект.
    Student s1 = new Student();
    Student s2 = new Student();
    s1 = s2;
  • Анонимен обект.
    new Student();

183. Каква е ползата от метода finalize ()?

Методът finalize () е част от процеса на събиране на боклука, който се извиква след събирането на боклука. Събирачът на боклук изчиства обектите, които са създадени с помощта на новата ключова дума. За други можем да използваме метода финализиране за почистване. Методът finalize присъства в клас Object и следователно може да бъде заменен от всеки клас, тъй като класът Object е суперкласът за всички класове.

184. Можем ли да се позовем на обект без препратка?

Да, можем да се позовем на обект без препратка отново.

185. Какво е името на нишката за събиране на боклук?

Конецът за събиране на боклук използва нишка Daemon.

186. Каква е разликата между финал, окончателно и финализиране?

финал: final е ключова дума, която се използва за налагане на ограничения върху клас, метод или променлива. Не можем да наследим окончателен клас, не можем да заменим окончателен метод и да променим крайна стойност.

накрая: накрая е блок, който се използва за изпълнение на важен код по време на обработка на изключения.

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

187. Каква е ползата от Runtime class?

Класът Runtime е подклас на клас Object, който предоставя информация за текущата работеща среда. Можем да използваме getRuntime () метод за получаване на препратка към текущия обект на изпълнение. Той има няколко метода като gc (), exit (), halt () и т.н.

188. Как да извикам външен процес в Java?

import java.io.IOException;

public class Sample {

  public static void main(String[] args) throws IOException {
    Runtime.getRuntime().exec("notepad");

  }

}

189. Каква е йерархията на класовете InputStream и OutputStream?

Йерархия на StreamClass

190. Какво е IOStream?

Java IOStream е процес за извършване на операции за четене и запис. Потокът е поредица от данни под формата на байтове. InputStream се използва за четене на данни, а OutputStream се използва за запис на данни. Има 3 различни типа потоци в Java:

  • Входящ поток: System.in - Използва се за четене на данни от входния поток.
  • Изходен поток: System.out - Използва се за записване на данни в изходния поток.
  • Поток на грешки: System.err - отпечатва съобщения за грешка.

191. Какви са разликите между класовете Reader / Writer и InputStream / OutputStream?

Клас за четец / писател:

  • Той е ориентиран към характера и се нарича клас CharacterStream
  • Извършва операция вход / изход за 16-битовата система Unicode.
  • Най-често използваните класове са FileReader и FileWriter.

InputStream / OutputStream клас:

  • Той е ориентиран към байтове и се нарича клас ByteStream.
  • Извършва операция вход / изход за 8-битови байтове.
  • Най-често използваните класове са FileInputStream и FileOutputStream.

192. Кои са супер-класовете за всички потоци?

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

Класовете ByteStream съдържат класове InputStream и OutputStream. Суперкласът за тези потоци е java.io.InputStream и java.io.OutputStream.

CharacterStream съдържа класове Reader и Writer. Суперкласът е java.io.Reader и java.io.Writer.

193. Какво е FileInputStream и FileOutputStream?

Класът FileInputStream се използва за четене на данни от входния файл. Чете данни под формата на байтове. Може да се използва и за четене на символи, но FileReader е по-добра опция за символно ориентирани данни.

Класът FileOutputStream се използва за записване на данни във файла.

194. Каква е ползата от класовете BufferedInputStream и BufferedOutputStream?

Класовете BufferedInputStream и BufferedOutputStream се използват за четене и запис на данни, използвайки буферен механизъм. Той записва данни в буфер, вместо директно да ги записва в поток. Следователно това прави операцията по четене и писане по-бърза.

195. Как да задам разрешения за файл в Java?

Можем да променим разрешенията за файл в Java, използвайки класа FilePermission. Този клас съдържа разрешения, свързани с директория или файл. Трябва да зададем разрешенията, свързани с пътя на файла.

196. Какво представляват FilterStreams?

Класовете FilterStream предоставят допълнителни функционалности към класовете на потока. Той действа като интерфейс, където чете данните, филтрира ги и след това предава филтрираните данни на повикващия.

197. Какво е I / O филтър?

I / O филтърът извършва операция за филтриране на входните / изходните потоци като манипулиране на данни или модификация. Той чете данните, филтрира ги и след това предава филтрираните данни. Има различни потоци от IO филтри като FilterInputStream и FilterOutputStream.

198. Какви са различните начини за четене на входни данни от конзолата в Java?

Има 3 различни начина за четене на входни данни от конзолата в Java:

    • BufferedInputStream: Това чете входа от System.in и го обгръща в InputStreamReader и след това го предава на BufferedReader.
      import java.io.BufferedReader;
      import java.io.IOException;
      import java.io.InputStreamReader;
      
      public class BufferedReaderDemo {
      
        public static void main(String[] args) throws IOException {
          System.out.println("Enter a word: ");
          BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));   
              String value = reader.readLine();   
              System.out.println("Word is: " + value);     
      
        }
      
      }
      
      Enter a word: 
      Java
      Word is: Java
      

 

  • Клас на скенера: Най- Java скенер class се използва за получаване на потребителски вход от различни потоци като потребителски вход, файл и входния низ.

 

    • Този клас е част от пакета java.util. Използвайки различни вградени методи, той може да чете различни видове входни данни.

 

import java.util.Scanner;
public class ScannerDemo1 {
  public static void main(String[] args) {
    System.out.println("Enter your name:");
    Scanner sc = new Scanner(System.in);
    String s = sc.nextLine();
    System.out.println("Your name is " + s);
    sc.close();
  }
}
Enter your name:
Ravi Kumar
Your name is Ravi Kumar
  • Конзолен клас: Използва се за получаване на входни данни от конзолата.

199. Какво е сериализация?

Сериализацията е процес на преобразуване на състоянието на обекта в байт поток, който включва обекта данни и техния тип и вида на данните, които съхранява. ObjectInputStream и ObjectOutputStream съдържат методи за сериализиране и десериализиране на обект. Този процес е независим от JVM, което означава, че можем да сериализираме в една платформа и да десериализираме в друга платформа.

200. Как можете да направите клас сериализуем?

Можем да направим клас сериализуем чрез внедряване на интерфейса Serializable.

201. Как можете да избегнете сериализацията в дъщерния клас, ако основният клас реализира интерфейса Serializable?

Не е възможно да се избегне сериализацията директно в детски клас, ако базовият клас реализира интерфейса Serializable. Но ние можем да изпълним чрез прилагане на методите writeObject и readObject в подкласа и да хвърлим NotSerializableException.

202. Може ли сериализиран обект да се прехвърля през мрежа?

Да, възможно е да се прехвърли сериализиран обект чрез мрежа, тъй като той се съхранява в паметта под формата на байтове. Също така е възможно да пишете в база данни или на диск.

203. Какво е десериализация?

Десериализацията е процес на възстановяване на състоянието на обекта от формата на байтове или сериализирано състояние.

204. Какво е преходна ключова дума?

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

205. Какво се екстернализира?

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

206. Каква е разликата между Serializable и Externalizable interface?

SerializableВъншно
Това е маркер интерфейс, което означава, че не съдържа никакви методи.Той не е интерфейс на маркер и съдържа методи като writeExternal () и readExternal ()
Той не извиква конструктор на клас по време на сериализацияТой извиква публичния конструктор по подразбиране
Изпълнението е бавноИзпълнението е бързо и по-добро
Класът, който реализира интерфейса, носи отговорността на JVM за сериализиране на обект.Той предоставя отговорност на разработчика да напише своя собствена логика.

207. Какво е програмиране на сокети в Java?

Сокет, програмиращ комуникацията между 2 различни възла (сокет) през мрежа. С други думи, той установява комуникация между приложения, работещи на различни JRE. като клиент и сървър. Може да е ориентиран към връзка или без връзка. За ориентирани към свързване използваме класовете Socket и SocketServer, а за без връзки използваме класове DatagramSocket и DatagramPacket. Клиентът трябва да знае IP адреса на сървъра и номера на порта, за да установи връзка.

208. Какво е гнездо?

Сокетът е крайна точка, която улеснява комуникацията между 2 приложения, използващи TCP. Използваме клас Socket, за да създадем сокет. Сокет използва номера на порта и IP адреса, за да установи комуникацията.

209. Какви са стъпките за свързване на два компютъра чрез TCP?

  • Създайте обект ServerSocket в сървъра, който обозначава номера на порта, с който трябва да се осъществи връзката.
  • Извикайте метода accept () в сървъра, който чака, докато клиентът се опита да се свърже със сървъра на дадения порт.
  • Междувременно създайте сокет в клиентския клас, като използвате класа Socket. Конструкторът на клас Socket взема като параметри номера на сървърния порт и името на сървъра.
  • Конструкторът на клас Socket се опитва да се свърже със сървъра с посоченото име. Ако успее, клиентът ще има сокет обект, който да се свърже със сървъра.
  • Методът accept () на сървъра сега връща препратка към новия сокет, създаден от клиента.

210. Напишете Java програма за установяване на връзка между клиент и сървър.

Сървърна страна:

import java.io.DataInputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerDemo {

  public static void main(String[] args) {
    try {
      ServerSocket ss = new ServerSocket(5555);
      Socket s = ss.accept();
      DataInputStream di = new DataInputStream(s.getInputStream()); 
      String str = (String)di.readUTF();
      System.out.println("Message: " + str);
      ss.close();
    }
    catch(Exception e) {
      System.out.println(e);
    }

  }

}

Клиентска страна:

import java.io.DataOutputStream;
import java.net.Socket;

public class ClientDemo {

  public static void main(String[] args) {
    try {
      Socket s = new Socket("localhost",5555);
      DataOutputStream dos = new DataOutputStream(s.getOutputStream());
      dos.writeUTF("Socket connection program");
      dos.flush();
      s.close();
    }
    catch(Exception e) {
      System.out.println(e);
    }

  }

}
Message: Socket connection program

211. Как да конвертирате числов IP адрес в име на хост?

Можем да използваме класа InetAddress, за да получим името на хоста, като използваме методите getByName (“ipaddress”). GetHostName ().

import java.io.*;
import java.net.*;
public class ConvertNumericToHost {

  public static void main(String[] args) {
    try {
      InetAddress ia = InetAddress.getByName("192.18.97.39");
      System.out.println("Host Name: " + ia.getHostName());
    }
    catch(Exception e) {
      System.out.println(e);
    }

  }

}
Host Name: oc-192-18-97-39.compute.oraclecloud.com

212. Какво е отражение в Java?

Отражението в Java е механизъм за промяна на поведението на методи, класове или интерфейси по време на изпълнение. Подкрепящите класове присъстват в java.lang.reflect пакет. Той също така предоставя информация за класовете и методите на обекта, към който принадлежи.

213. Каква е ползата от класа java.lang.Class?

  • Той осигурява много полезни методи като getClass (), forName () и др.
  • Позволява създаване на екземпляр на клас без използване на новия оператор.
  • Предоставя методи за промяна на поведението по време на изпълнение на клас
  • Също така предоставя методи за получаване на метаданните на клас по време на изпълнение.

214. Какви са различните начини за създаване на екземпляр на класа Class?

Има 3 различни начина за създаване на обект за клас клас:

  • Class.forName („име_клас“): forName е фабричният метод за създаване на екземпляр от клас class няма конструктор. Трябва да посочим пълното име на клас в параметъра, за който трябва да създадем екземпляр.
  • MyClass.class: Това се използва главно за примитивни типове данни когато знаем името на класа му. Ако посочим .class след име на клас, той представлява обект за този клас.
  • obj.getClass (): Той присъства в клас Object и връща класа на изпълнение на посочения обект.

215. Какъв е резултатът от кода по-долу?

class TestDemo {
  TestDemo() {
    System.out.println("Test class constructor");
  }
  
  public void print() {
    System.out.println("Print method in Test class");
  }
}
public class ReflectionDemo {

  public static void main(String[] args) throws InstantiationException, IllegalAccessException {
    try {
      Class a = Class.forName("TestDemo");
      TestDemo t = (TestDemo)a.newInstance();
      t.print();
      
    } catch (ClassNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    

  }

}
Test class constructor
Print method in Test class

216. Каква е ползата от javap?

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

217. Можете ли да получите достъп до частния метод извън класа?

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

218. Какво представляват класовете обвивки?

Класовете на обвивки в Java се използват за достъп до примитивни типове данни като Обекти. Това се използва главно, докато се използва заедно с колекции като ArrayList или LinkedList, където трябва да посочим класа на обвивката, а не примитивен тип данни. Налични са 8 класа обвивки за 8 примитивни типове данни в пакета java.lang.

Примитивен тип данниКлас обвивка
булеваБулева
байтБайт
овъглявамОвъглявам
удвоидвойно
поплавъкПлувка
Intцяло число
дългодълго
късКъс

219. Какво имаш предвид под автобокс и дебокс и къде го използваме?

Автобоксът е процесът, при който преобразуваме примитив тип данни в обекти. Например: int към Integer Unboxing е процесът, при който преобразуваме обекта обратно в примитивен тип данни. Напр .: Цяло число към int.

И двата процеса се случват автоматично в Java, но можем да го направим и отвън в следните ситуации:

  • Докато използвате колекции като ArrayList или LinkedList.
  • Създаване на екземпляр от параметризирани класове като ThreadLocal
  • Когато присвояваме примитивен тип на тип обект.

220. Какъв е резултатът от кода по-долу?

public class WrapperDemo {

  public static void main(String[] args) {
    Double d = new Double(45.45);
    Double f = new Double(55.55);
    if(d == f) {
      System.out.println("Both Double objects are equal");
    }
    else
      System.out.println("Both Double objects are not equal");
    

  }

}
Both Double objects are not equal

Изходният печат „И двата Double обекта не са равни“, тъй като има 2 различни препратки, използващи новата ключова дума.

221. Какво е клониране на обект?

Клонирането на обект е процесът на създаване на плитко копие на обекта. Можем да използваме метода clone () от клас Object, за да клонираме обект. Класът трябва да реализира интерфейса Cloneable, където обектът трябва да бъде клониран, иначе ще хвърли CloneNotSupportedException.

222. Какви са предимствата и недостатъците на клонирането на обекти?

Предимства:

  • И двата обекта (оригиналният обект и клонираният обект) могат да бъдат модифицирани независимо.
  • Методът clone () е най-бързият начин за копиране на масив
  • Изисква само създаване на абстрактен клас с метода clone () и следователно не изисква повтарящ се код.

Недостатъци:

  • Поддържа само плитко копиране.
  • Няма конструктор.
  • Трябва да включим много синтаксиси в нашия код, за да приложим метода на клониране като реализиране на интерфейса Cloneable, да дефинираме метода на клониране и да обработим изключението.
  • Тъй като интерфейсът Cloneable няма никакви методи, трябва да инструктираме JVM, че трябва да извършим операция за клониране.

223. Какво е естествен метод?

Родният метод е метод в Java, където можем да пишем реализации на езици, различни от Java.

224. Каква е ползата от ключовата дума strictfp?

Ключовата дума strictfp в Java предоставя същия резултат за аритметичната операция с плаваща запетая във всяка платформа. Това означава, че дава резултати със същата прецизна стойност във всяка платформа.

225. За какво се ползва класът System?

Можем да използваме клас System за достъп до системните ресурси като Standard input и output. Не можем да създадем екземпляр за клас System. Той осигурява поддръжка като стандартен вход, стандартен изход и стандартна грешка.

226. Какъв е терминът, използван за плитки копия в Java?

Клониране на обект

227. Какво е единичен клас?

Единичен клас в Java означава, че не можем да създадем повече от един екземпляр за клас. Това означава, че можем да създадем само един обект за сингълтон класа. Дори ако се опитаме да създадем втора инстанция, тя ще се позовава на първата инстанция и ще извършва операции въз основа на това. Можем да създадем единичен клас по следния начин:

  • Декларирайте конструктора като частен.
  • Използвайте статичен метод getInstance ().

228. Напишете програма за отпечатване на всички стойности, предоставени в командния ред.

public class TestClass {

  public static void main(String[] args) {
    for(int i=0;i<args.length;i++)
      System.out.println(args[i]);

  }

}

 

C:\Users\Downloads>javac TestClass.java

C:\Users\Downloads>java TestClass welcome to java programming
welcome
to
java
programming

229. Кои контейнери използват оформление на границата като оформление по подразбиране?

Класовете Window, Frame и Dialog.

230. Кои контейнери използват FlowLayout като оформление по подразбиране?

Класовете Panel и Applet.

231. Кои са несравними компоненти?

Ненадминатите компоненти са леките компоненти. Swing има свои собствени библиотеки, които не използват компонентите от операционните системи. Те се наричат ​​леки или несравними компоненти.

232. Каква е разликата между лентата за превъртане и панела за превъртане?

Лентата за превъртане е компонент, докато ScrollPane е контейнер, който обработва събития и извършва операции за превъртане.

233. Какво е лек компонент?

Леките компоненти използват чисто Java кода за изобразяване на графични единици и не зависят от собствената операционна система. Например Swing използва drawLine и drawImage за извършване на графични чертежи.

234. Какво е компонент в тежка категория?

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

235. Какво е аплет?

Аплетите са малки програми, които присъстват в браузъра и се изпълняват автоматично. Той предоставя интерактивни функции на уеб приложенията и работи от страна на клиента, когато някога се извика уеб приложението. Може да се изпълни на много платформи, които поддържат браузъри и се изпълнява много по-бързо. Аплетът няма или дефинира метод main (). Когато се създаде аплет, той изпълнява методите init (), start () и paint (), а когато бъде унищожен, изпълнява методите stop () и Унищожи ().

236. Можем ли да напишем клас Java, който може да се използва и като аплет, и като приложение?

Да, можем да използваме Java клас и като аплет, и като приложение, като дефинираме метода main ().

237. Какво е локал?

Locale представлява географска информация, където можем да получим подробности като име на държава, език и т.н. Класът Locale присъства в пакета java.util. Можем да създадем екземпляр на Locale обект, като използваме метода getDefault (). Той има различни методи като getLanguage (), getCountry () и т.н.

import java.util.Locale;

public class LocaleDemo {

  public static void main(String[] args) {
    Locale l = Locale.getDefault();
    System.out.println(l.getCountry());
    System.out.println(l.getDisplayLanguage());
    System.out.println(l.getDisplayName());
    System.out.println(l.getLanguage());

  }

}
IN
English
English (India)
en

238. Как да заредя конкретен локал?

Можем да използваме метода ResourceBundle.getBundle (), за да заредим конкретен локал.

239. Какво е Java Bean?

Java Bean е софтуер за многократна употреба, който капсулира няколко обекта в един обект. Това е клас, който има конструктор no-argument заедно с методите getter и setter. Класът на Java bean също трябва да реализира java.io.Serializable.

240. Каква е ползата от Java Bean?

Основната употреба на Java bean е да осигури повторна употреба и лесна поддръжка на кода. Той капсулира няколко обекта в един обект, който се нарича боб.

241. Какво е боб устойчиво свойство?

Устойчивото свойство на боб Java възниква, когато полетата, свойствата и информацията за състоянието се съхраняват и извличат от хранилището.

242. Какво е RMI?

RMI означава Remote Method Invocation е API, който се използва за създаване на разпределени приложения в Java. Той поддържа комуникация между две приложения с помощта на обекти и скелет. RMI е механизъм, който позволява на един обект да извика друг обект, който се намира в различен JVM. Можем да използваме java.rmi пакет за внедряване на RMI.

243. Каква е ползата от мъниче и скелет?

Стъблото е клас, който присъства от страна на клиента и представлява отдалечения обект. Той действа като шлюз за клиента.

Скелетът е аналог на заглушителя и се намира от страната на сървъра.

244. Какви са стъпките за писане на програма RMI?

По-долу са описани стъпките за писане на RMI програма:

  • Създайте отдалечен интерфейс
  • Внедрете отдалечения интерфейс
  • Компилирайте класа на изпълнение и създайте мъниче и скелет с помощта на инструмента rmic
  • Стартирайте услугата на системния регистър
  • Създайте и стартирайте отдалеченото приложение
  • Създайте и стартирайте клиентското приложение.

245. Каква е ползата от HTTP тунелиране в RMI?

HTTP тунелирането в RMI обработва HTTP връзките, използвайки прокси сървърите и не изисква настройка, за да работи в средата на защитната стена.

246. Какво е JRMP?

JRMP означава Java Remote Method Protocol, който се използва за препратка към отдалечени обекти. Това е специфичен за Java и базиран на потоци протокол, който работи под RMI. Той изисква както клиент, така и сървър, за да използват отдалечените обекти.

247. Могат ли приложенията, базирани на RMI и CORBA, да си взаимодействат помежду си?

Да, приложенията, базирани на RMI и CORBA, могат да си взаимодействат помежду си.

248. Напишете програма за Java, за да извършите сортиране на балончета.

public class BubbleSort {

  public static void main(String[] args) {
    int[] numbers = {25,12,89,45,65,35};
    int temp;
    for(int i=0;i<numbers.length;i++) {
      for(int j=0;j<numbers.length;j++) {
        if(numbers[i] < numbers[j]) {
          temp = numbers[i];
          numbers[i] = numbers[j];
          numbers[j] = temp;
        }
      }
    }

    System.out.println("Sorted list:");
    for(int i=0;i<numbers.length;i++)
      System.out.println(numbers[i]);
  }

}
Sorted list:
12
25
35
45
65
89

249. Напишете програма за Java, за да извършите двоично търсене.

import java.util.Scanner;

public class BinarySearch {

  public static void main(String[] args) {
    int count, num[], searchValue,first,last,middle;
    Scanner sc = new Scanner(System.in);
    
    //Get the number of elements to create a tree
    System.out.println("Enter the number of elements: ");
    count = sc.nextInt();
    
    //Create an array
    num = new int[count];
    
    //Store the elements in an array
    System.out.println("Enter the elements: ");
    for(int i=0; i<count; i++)
      num[i] = sc.nextInt();
    
    System.out.println("Enter the search element: ");
    searchValue = sc.nextInt();
    
    first = 0;
    last = count - 1;
    middle = (first+last)/2;
    
    while(first<=last) {
      if(num[middle]< searchValue) {
        first = middle + 1;
      }
      else if(num[middle] == searchValue) {
        System.out.println("The search element is present in the location: " + (middle + 1));
        break;
      }
      else {
        last = middle - 1;
      }
      middle = (first+last)/2;
    }
    if(first>last)
      System.out.println("The search element " + searchValue + " is not found in the tree.");

  }
  
  

}
Enter the number of elements: 
5
Enter the elements: 
10
20
30
40
50
Enter the search element: 
30
The search element is present in the location: 3

250. Напишете програма за Java, за да извършите сортирането на селекцията.

public class SelectionSort {

  public static void main(String[] args) {
    int[] numbers = {30,50,10,40,20};
    int min;
    for(int i=0;i<numbers.length;i++) {
      min = i;
      for(int j=i+1; j< numbers.length; j++) {
        if(numbers[j] < numbers[min])
          min = j;
      }
      
      int temp = numbers[min];
      numbers[min] = numbers[i];
      numbers[i] = temp;
    }
    
    System.out.println("Selection sort:");
    for(int i =0;i<numbers.length;i++) {
      System.out.println(numbers[i]);
    }

  }

}
Selection sort:
10
20
30
40
50

251. Напишете програма за Java, за да извършите Линейно търсене.

import java.util.Scanner;
public class LinearSearch {

  public static void main(String[] args) {
    int[] numbers = {10,40,30,20,50};
    int index=0;
    Boolean bFlag = false;
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter the search element: " );
    int val = sc.nextInt();
    
    for(int i=0;i<numbers.length;i++) {
      if(numbers[i] == val) {
        bFlag = true;
        index = i+1;
        break;
      }
      else
        bFlag = false;
    }
    if(bFlag)
      System.out.println("The search element " + val + " is found at position " + index);
    else
      System.out.println("The search element " + val + " is not found");

  }

}
Enter the search element: 
30
The search element 30 is found at position 3

252. Напишете програма за Java, за да извършите сортиране по сливане.

public class MergeSort {

  public void merge(int[] arr, int first, int middle, int last) {
    int l = middle - first + 1;
    int r = last - middle;
    
    int LA[] = new int[l]; //Create left array
    int RA[] = new int[r]; //Create right array
    
    //Copy data to both arrays
    for(int i=0;i<l;++i)
      LA[i] = arr[first+i];
    
    for(int j=0;j<r;++j)
      RA[j] = arr[middle+1+j];
    
    int i=0,j=0;
    int k = first;
    
    while(i<l && j<r) {
      if(LA[i] <= RA[j]) {
        arr[k] = LA[i];
        i++;
      }
      else {
        arr[k] = RA[j];
        j++;
      }
      k++;
    }
    
    while(i<l) {
      arr[k] = LA[i];
      i++;
      k++;
    }
    
    while(j<r) {
      arr[k] = RA[j];
      j++;
      k++;
    }
    
  }
  
  public void sort(int[] arr, int first, int last) {
    if(first<last) {
      int middle = (first+last)/2;
      //Sort the first half array
      sort(arr,first,middle);
      
      //Sort the second half array
      sort(arr,middle+1,last);
      
      //Merge both the arrays
      merge(arr,first,middle,last);
    }
  }
  public static void main(String[] args) {
    int[] numbers = {10,50,40,60,30,20};
    MergeSort m = new MergeSort();
    m.sort(numbers, 0, numbers.length-1);

    System.out.println("Merge sort: ");
    for(int n=0;n<numbers.length;n++)
      System.out.println(numbers[n]);
  }

}
Merge sort: 
10
20
30
40
50
60

253. Напишете програма за Java, за да извършите бързо сортиране.

public class QuickSort {
  
  //Partioning the array
  public int partition(int[] arr, int low, int high) {
    //Pivot value
    int pivot = arr[high];
    
    //index of small element
    int i = low-1;
    
    for(int j=low;j<high;j++) {
      if(arr[j]<=pivot) {
        i++;
        
        //swap the elements
        int t = arr[i];
        arr[i] = arr[j];
        arr[j] = t;
      }
    }
    
    //Swap the next element and last element
    int t = arr[i+1];
    arr[i+1] = arr[high];
    arr[high] = t;
    
    return i+1;
  }
  
  //Quick sort functionality
  public void quicksort(int[] arr, int low, int high) {
    if(low<high) {
      int p = partition(arr,low,high);
      
      //Recursively sort the elements
      quicksort(arr,low,p-1);
      quicksort(arr,p+1,high);
    }
  }

  public static void main(String[] args) {
    int[] num = {80,30,50,10,60,20};
    
    QuickSort q = new QuickSort();
    q.quicksort(num, 0, num.length-1);
    
    //Print the sorted elements
    for(int i=0;i<num.length;i++)
      System.out.println(num[i]);
  }

}
10
20
30
50
60
80

254. Напишете Java програма, за да създадете двойно свързан списък, съдържащ n възли.

public class DoublyLinkedList {
  
  //Create a node class
  class Node {
    int value;
    Node prev;
    Node next;
    
    Node(int value) {
      this.value = value;
    }
  }
  
  //Initialize head and tail as null
  Node head,tail = null;
  
  //Add a node to doubly linked list
  void addNode(int value) {
    
    //Create a new node;
    Node n = new Node(value);
    
    //If list is empty, head and tail points to new node n
    if(head == null) {
      head = tail = n;
      
      //The prev and next value will be null
      head.prev = null;
      tail.next = null;
    }
    
    //Add the new node n to the end of the list
    else {
      tail.next = n;
      n.prev = tail;
      tail = n;
      tail.next = null;
    }
  }
  
  void print() {
    Node current = head;
    if(head == null) {
      System.out.println("Doubly linked list is empty");
      return;
    }
    System.out.println("Elements in

Двойно свързани

 list:");
    while(current!= null) {
      System.out.println(current.value);
      current = current.next;
    }
  }

  public static void main(String[] args) {
    DoublyLinkedList d = new DoublyLinkedList();
    d.addNode(40);
    d.addNode(20);
    d.addNode(30);
    d.addNode(10);
    d.addNode(50);
    
    d.print();
    
  }

}
Elements in Doubly linked list:
40
20
30
10
50

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

public class CircularLinkedList {
  
  public class Node {
    int value;
    Node next;
    
    public Node(int value) {
      this.value = value;
    }
  }
  
  //Initialize head and tail node as null
  public Node head = null;
  public Node tail = null;
  
  //Add new node at the end of the list	
  void add(int value) {
    Node n = new Node(value);
    
    //Check if list is empty, then assign head and tail as new node
    if(head == null) {
      head = n;
      tail = n;
      n.next = head; //Next node value will point back to head since it is circular linked list
    }
    
    //Assign new node to the tail
    else {
      tail.next = n;
      tail = n;
      tail.next = head;
    }
  }
  
  //Find minimum node value
  public void minNodeValue() {
    Node current = head;
    
    //Assign min as current node value
    int min = head.value;
    
    if(head == null) {
      System.out.println("List is empty");
    }
    
    else {
      do {
        if(min > current.value) {
          min = current.value; //Reassign min value if current value is lesser than min
        }
        current = current.next;
      }while(current != head);
      
      System.out.println("Minimum node value is: " + min);
    }
  }
  
  //Find maximum node value
  public void maxNodeValue() {
    Node current = head;
    
    //Assign max as current node value
    int max = head.value;
    
    if(head == null) {
      System.out.println("List is empty");
    }
    else {
      do {
        if(max < current.value) {
          max = current.value; //Reassign max value if current value is greater than max
        }
        current = current.next;
      }while(current != head);
      
      System.out.println("Maximum node value is: " + max);
    }
  }

  public static void main(String[] args) {
    CircularLinkedList c = new CircularLinkedList();
    c.add(20);
    c.add(30);
    c.add(10);
    c.add(50);
    c.add(40);
    
    //Find min node value
    c.minNodeValue();
    
    //Find max node value
    c.maxNodeValue();
  }

}
Minimum node value is: 10
Maximum node value is: 50

256. Напишете Java програма, за да намерите разликата между сумата на нечетните нива и четните възли на бинарно дърво.

import java.util.LinkedList;
import java.util.Queue;

public class BinaryTreeDifference {

  public static class Node{
    int value;
    Node left;
    Node right;
    
    public Node(int value) {
      this.value = value;
      this.left = null;
      this.right = null;
    }
  }
  
  //Root of binary tree
  public Node root;
  
  public BinaryTreeDifference() {
    root = null;
  }
  
  public int diff() {
    int oLevel = 0, eLevel = 0, diffOddEven = 0;
    
    //To track number of nodes in each level
    int nodesInLevel = 0;
    
    //Tracks the current level
    int curLevel = 0;
    
    //Queue to track nodes level in a tree
    Queue<Node> queue = new LinkedList<Node>();
    
    //Check if root is null
    if(root == null) {
      System.out.println("Tree is empty");
      return 0;
    }
    
    else {
      //Add root node to queue to represent first level
      queue.add(root);
      curLevel++;
      
      while(queue.size() != 0) {
        //Holds number of elements in the queue
        nodesInLevel = queue.size();
        
        while(nodesInLevel > 0) {
          Node current = queue.remove();
          
          //Check if level is even
          if(curLevel%2 == 0)
            eLevel += current.value;
          else
            oLevel += current.value;
          
          //Add left child to queue
          if(current.left != null)
            queue.add(current.left);
          
          if(current.right != null)
            queue.add(current.right);
          nodesInLevel--;
        }
        curLevel++;
      }
      
      //Calculate the difference
      diffOddEven = Math.abs(oLevel - eLevel);
    }
    
    return diffOddEven;
    
  }
  public static void main(String[] args) {
    BinaryTreeDifference bt = new BinaryTreeDifference();
    
    bt.root = new Node(10);
    bt.root.left = new Node(20);
    bt.root.right = new Node(30);
    bt.root.left.left = new Node(40);
    bt.root.left.right = new Node(50);
    bt.root.right.left = new Node(60);
    
    System.out.println("Difference between odd and even level: " + bt.diff());
  }

}
Difference between odd and even level: 110

257. Какво е многопоточност?

Многопоточността е многозадачна техника, при която един или повече процеси се изпълняват едновременно едновременно. Това води до максимално използване на процесора и следователно осигурява по-добра производителност и консумира по-малко памет. Всеки процес се нарича нишка, която се изпълнява независимо. Нарича се още като многопоточност, базирана на нишки.

258. Какво представлява нишката в многопоточността?

Нишката е отделна подпрограма или процес, който се изпълнява независимо по време на многонишков процес. Той споделя едни и същи ресурси, но все пак се изпълнява отделно. Той е лек и има няколко състояния като НОВО, БЛОКИРАНО, РАБОТНО, ЧАКАЩО, ПРЕКРАТЕНО, ТЪРСЕНО_ЧАКАЩО. Нишката може да бъде само в едно състояние в даден момент.

259. Каква е разликата между нишка и процес?

ПроцесНишка
Основната програма в изпълнение се нарича процесНишката е подмножество или част от процес
Той има различни адреси и заема различна паметТой споделя същите ресурси и памет
Превключването на контекста е по-бавноПревключването на контекст е по-бързо
Комуникацията между процесите е по-бавна и скъпаКомуникацията между нишките е по-бърза и по-евтина
Промяната в родителския процес не засяга дъщерния процесПромяната в родителската нишка може да повлияе на дъщерната нишка

260. Какво е комуникация между нишки?

Комуникацията между нишки е процесът, при който синхронизираните нишки комуникират помежду си едновременно. Това се случва, когато една нишка е поставена на пауза в критично състояние, а друга нишка влезе в същото критично състояние, за да продължи процеса на изпълнение. Можем да постигнем това, като използваме методите wait (), notify () и notifyAll ().

261. Каква е ползата от метода wait () в Java?

Методът wait () е част от клас Object, който се използва в процеса на комуникация между нишките. Когато методът за изчакване се изпълни, той изчаква, докато друга нишка извика метода notify () или notifyAll () или докато изтече определено време.

262. Защо трябва да извикваме метода wait () от синхронизиран блок?

Използваме метода wait () в синхронизиран блок за комуникация между нишки, в противен случай ще хвърли изключение java.lang.IllegalMonitorStateException. Този метод wait () се използва в синхронизиран блок заедно с методите notify () или notifyAll (), за да се осигури правилна комуникация.

263. Какви са предимствата на многопоточността?

  • Минимизирано използване на системните ресурси
  • Подобрена реакция на сървъра
  • По-добра комуникация
  • Подобрена производителност
  • Намалени разходи за поддръжка
  • Опростена програмна структура

264. Какви са различните състояния в жизнения цикъл на една нишка?

Нишка може да бъде във всяко от следните състояния. В даден момент тя може да бъде само в едно състояние.

  • NEW: В това състояние се създава нишка с помощта на новия оператор. Нишката започва само когато извиква метода start ().
  • РАНАБЕЛ: Нишката е готова за изпълнение, след като извика метода за стартиране. Той започва да работи, след като бъде избран от планиращия.
  • RUNNING: Нишката е в работещо състояние, когато е взета от планиращия.
  • ИЗЧАКВАНЕ / БЛОКИРАН: Нишката не се изпълнява и чака друга нишка да завърши.
  • ПРЕКРАТЯВА: Нишката се прекратява, след като излезе от метода run ().

265. Каква е разликата между предварителното планиране и нарязването на времето?

Предварително планиране: Задача с висок приоритет се изпълнява, докато премине в състояние на изчакване / мъртво или друга задача с висок приоритет дойде за изпълнение.

Нарязване на времето: Задача се изпълнява за определено време и след това отново влиза в пула от готови задачи. Планировщикът определя коя задача да се избере въз основа на приоритета.

266. Какво е превключване на контекста?

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

267. Каква е разликата между клас Thread и Runnable интерфейс за създаване на нишка?

Можем да създадем нишка по 2 различни начина:

  • Разширяване на клас Thread - Ако разширява клас Thread, тогава той не може да разшири никой друг клас, тъй като Java не поддържа множествено наследяване. Всяка нишка има уникален обект. Той поддържа различни вградени методи като getPriority (), isAlive () и др.
  • Внедряване на клас Thread с помощта на интерфейс Runnable - Ако внедрим интерфейса Runnable, можем да разширим и други класове. Множество нишки споделят един и същ обект. Той поддържа само един метод, който е методът run ().

268. Какво представлява методът join ()?

Методът на присъединяване е част от класа Thread, който чака изпълнението на текущата нишка да завърши, преди да бъде изпълнена друга нишка. Например, ако t е обект на нишка на текущата нишка, тогава присъединете се ще гарантира, че t се прекратява, преди да вземе следващата инструкция.

269. Опишете работата и използването на метода sleep ().

Методът sleep () се използва, за да накара нишката да изчака известно време. С други думи, той поставя на пауза изпълнението на нишката за определено време.

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

270. Каква е разликата между wait () и sleep ()?

изчакайте(): Този метод е част от клас Object и може да освободи заключването.

сън (): Този метод е част от класа Thread и не може да освободи заключването.

271. Можем ли да започнем нишка два пъти?

Не, можем да започнем нишка отново, ако тя вече е стартирана. Това е така, защото след като една нишка се стартира и изпълни, тя отива в мъртво състояние, следователно ще хвърли IllegalThreadStateException, ако се опитаме да рестартираме нишка.

272. Можем ли да извикаме метода run () вместо метода start ()?

Да, директното извикване на метод run () е валидно, но няма да работи като нишка и няма да поддържа превключване на контекста. Това е така, защото когато извикаме метода start (), той вътрешно извиква метода run (), който създава отделен стек, докато ако извикаме метода run () директно няма да създаде нов стек.

273. Какво представляват демоновите нишки?

Нишките на Daemon са ниски приоритети, които поддържат фонови услуги за потребителските нишки. Daemon нишките се прекратяват автоматично от JVM, когато всички останали потребителски нишки са мъртви. Можем да проверим дали нишката е демонова нишка или не, а също така да зададем нишка като демонова нишка.

274. Можем ли да направим потребителска нишка като демонова нишка, ако тя вече е стартирана?

Не, можем да направим потребителски нишки като демони само преди стартирането на нишката, в противен случай тя ще хвърли IllegalThreadStateException.

275. Какво е кука за изключване?

Куката за изключване е нишка, която се извиква неявно, преди JVM да се изключи нормално или внезапно. Следователно той може да се използва за почистване или освобождаване на ресурсите. Той е по-ефективен от метода на финализатора (). Можем да добавим кука за изключване с помощта на кода по-долу:

public void addShutDownHook(Thread hook) { }
Runtime r = Runtime.getRuntime();
r.addShutdDownHook(new MyThread());

276. Кога трябва да прекъснем нишка?

Използваме метода interrupt (), за да прекъснем нишка от състояние на заспиване или състояние на изчакване. Този метод изхвърля InterruptException.

277. Какво е синхронизация?

Синхронизацията е процес на контрол на достъпа на нишки до ресурс. Това означава, че позволява едновременно достъп до ресурса само на една нишка. Синхронизацията е много важна за използване в Java, когато множество нишки опитайте да получите същия ресурс. Синхронизацията може да бъде постигната по следните начини:

  • Синхронизиран метод
  • Синхронизиран блок
  • Статична синхронизация

278. Каква е ползата от синхронизиран блок?

Синхронизираният блок винаги е маркиран с синхронизирано ключова дума. Синхронизираните блокове съдържат всички споделени ресурси. Това означава, че една нишка може да има достъп само до споделените ресурси едновременно. Останалите нишки ще бъдат в блокирано състояние. Този блок заключва обекта за споделен ресурс.

synchronized(object_identifier) {
   //shared resources
}

279. Могат ли обектите на Java да бъдат заключени за изключителна употреба от дадена нишка?

Да, можем да заключим Java обект за изключително използване от дадена нишка, като го посочим в синхронизиран блок. По този начин само една нишка може да има достъп до обекта в определен момент.

280. Какво е статична синхронизация?

Когато използваме статичната ключова дума преди метод, това е статична синхронизация. Това означава, че заключването е в класа, а не в обекта и в даден момент само една нишка може да има достъп до класа в даден момент.

281. Каква е разликата между метода notify () и notifyAll ()?

Методът notify () деблокира една изчакваща нишка, докато методът notifyAll () деблокира всички нишки, които са в състояние на изчакване.

282. Какво разбирате под задънена улица?

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

283. Как да открием задънена улица и как тя може да бъде избегната?

Можем да открием блокиране, като стартираме кода в cmd и ако той съществува, на cmd ще се появи съобщение.

Избягване на ситуация на задънена улица

Можем да избегнем ситуация на задънена улица по следните начини:

  • Избягвайте вложени ключалки
  • Избягвайте ненужните ключалки
  • Използване на съединение с нишки

284. Какво е планировчик на нишки в Java?

Планировщикът на нишки е част от JVM, който решава коя нишка трябва да бъде изпълнена. С други думи, отговорността на планиращия поток е да вземе нишката за изпълнение. Планировчикът на нишки използва два механизма за избор на нишката: Предварително планиране, Нарязване на времето.

285. Има ли всяка нишка своя стек в многонишково програмиране?

Да, всяка нишка има свой собствен стек в многонишковото програмиране, като по този начин я прави независима една от друга.

286. Как се постига безопасността на нишката?

Когато метод или клас могат да бъдат използвани от множество нишки без никакви проблеми, ние го наричаме безопасен за нишки. Можем да постигнем нискобезопасна програма по следните начини:

  • синхронизация
  • волатилна ключова дума
  • Използване на механизъм, базиран на ключалка
  • Класове за атомна обвивка.

287. Какво е състоянието на състезанието?

Състезателно състояние възниква, когато множество нишки се опитват да получат достъп до един и същ споделен ресурс едновременно. Това може да се избегне, като се използва концепцията за синхронизация.

288. Какво е летлива ключова дума?

Летлива ключова дума се използва за постигане на безопасна за нишки програма. Промяна в променливата променлива е обща за всички нишки, следователно веднъж променлива може да се използва от една нишка в даден момент.

289. Какво е пул от нишки?

Пул от нишки е обща област, където всички нишки, които са готови и очакват разпределение на задачи. Доставчикът на услуги проверява пула от нишки и взима по една нишка за изпълнение. След като задачата е завършена, нишката отново ще се върне към пула от нишки. Използвайки пула от нишки, можем да подобрим производителността и да постигнем по-добра стабилност на системата.

290. Кои са основните компоненти на API за паралелна валута?

Java.util.concurrent съдържа много компоненти, които поддържат разработването на API за паралелност, както е изброено по-долу:

  • изпълнител
  • ExecutorService
  • ScheduledExecutorService
  • Бъдеще
  • CountDownLatch
  • CyclicBarrier
  • семафор
  • ThreadFactory
  • BlockingQueue
  • DelayQueue
  • Брави
  • Phaser

291. Какво представлява Изпълнителят в Concurrency API в Java?

Интерфейсът изпълнител на java.util.concurrency съдържа като execute () метод за изпълнение на някаква задача или дадена команда. Ако изпълнителят не може да приеме задачата за изпълнение, той ще хвърли RejectedExecutionException.

Синтаксис:

public void execute(Runnable command)

292. Какво е BlockingQueue?

BlockingQueue поддържа асинхронно програмиране. Това е подинтерфейс на Queue, който поддържа операции като изчакване за наличност на място, преди да се вмъкне нова стойност или изчакване опашката да стане празна, преди да се извлече стойност.

293. Как да приложим проблема производител-потребител чрез използване на BlockingQueue?

Моделът производител-потребител е най-често срещаните модели на интеграция в асинхронното програмиране. Можем да приложим това с помощта на BlockingQueue, както се вижда в примера по-долу:

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.logging.Level;
import java.util.logging.Logger;

class Producer implements Runnable {
  
  private final BlockingQueue b;
  
  public Producer(BlockingQueue b) {
    this.b = b;
  }

  @Override
  public void run() {
    for(int i=0;i<5;i++) {
      try {
        System.out.println("Produced: " + i);
        b.put(i);
      }
      catch(InterruptedException e) {
        Logger.getLogger(Producer.class.getName()).log(Level.SEVERE,null,e);
      }
    }
    
  }
  
}

class Consumer implements Runnable {

  private final BlockingQueue b;
  
  public Consumer(BlockingQueue b) {
    this.b = b;
  }
  @Override
  public void run() {
    while(true) {
      try {
        System.out.println("Consumed: " + b.take());
      }
      catch(InterruptedException e) {
        Logger.getLogger(Consumer.class.getName()).log(Level.SEVERE, null,e);
      }
    }
    
  }
  
}

public class BlockingQueueDemo {

  public static void main(String[] args) {
    BlockingQueue b = new LinkedBlockingQueue();
    
    Thread p = new Thread(new Producer(b));
    Thread c = new Thread(new Consumer(b));
    
    p.start();
    c.start();

  }

}
Produced: 0
Produced: 1
Produced: 2
Produced: 3
Produced: 4
Consumed: 0
Consumed: 1
Consumed: 2
Consumed: 3
Consumed: 4

 

294. Каква е разликата между интерфейса Java Callable и интерфейса Runnable?

Както Java Callable, така и Runnable интерфейсите се използват от класове, които искат да изпълняват множество нишки. Има обаче няколко разлики, както по-долу:

Извикваем интерфейсИзпълним интерфейс
Интерфейсът може да върне резултатИнтерфейсът не може да върне резултат
Той може да хвърли отметка за изключениеНе може да хвърли проверено изключение
Интерфейсът Callable поддържа само след Java 5Интерфейсът Runnable може да се използва и преди Java 5

295. Какво е атомно действие в паралелността в Java?

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

Пример за атомни операции: Всички операции за четене и запис за примитивна променлива (с изключение на long и double) и променлива променлива (включително long и double).

Всички атомни методи присъстват в пакета java.util.concurrent.

296. Какво представлява интерфейсът за заключване в Concurrency в Java?

Интерфейсът за заключване се използва за блокиране на достъп на други нишки до кодов сегмент, който в момента се използва от друга нишка. Той поддържа механизма за синхронизация. Той е подобен на синхронизиран блок, но има малко разлики.

Основната разлика е, че синхронизираният блок е в рамките на метод, докато интерфейсите на интерфейса за заключване като lock () и unlock () могат да бъдат отделни методи. Интерфейсът за заключване има опция за изчакване, докато синхронизираният блок няма.

297. Какво е интерфейс ExecutorService

ExecutorService е подинтерфейс на Executor и поддържа асинхронна обработка. Той има функции за управление на целия жизнен цикъл.

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ConcurrencyDemo {

  public static void main(String[] args) {
    ExecutorService e = Executors.newFixedThreadPool(10);
    e.execute(new Runnable() {
       public void run() {
         System.out.println("Executor Service");
       }
    });
    e.shutdown();
  }

}
Executor Service

298. Каква е разликата между синхронното и асинхронното програмиране в концепцията Thread?

При синхронното програмиране, след присвояване на задача на нишка и стартиране на задачата, тя е достъпна за други задачи само след като това приключи.

При асинхронното програмиране множество нишки могат да завършат една и съща работа и по този начин насърчават максимална използваемост.

299. Какво е извикателно и бъдеще в Java?

Java Callable интерфейсът е въведен от Java 5 и е част от пакета java.util.concurrent. Той има метод run (), за да поддържа изпълнението и може да върне резултат и да хвърли изключение.

Интерфейсът Java Future връща резултата от едновременния процес. Интерфейсът Callable връща обекта на java.util.concurrent.Future. Бъдещият интерфейс на Java поддържа внедряване за различни методи като cancel (), get (), isCancelled (), isDone ().

300. Каква е разликата между интерфейса ScheduledExecutorService и ExecutorService?

Интерфейсите ScheduledExecutorService и ExecutorService са част от пакета java.util.concurrent. Основната разлика е, че ScheduledExecutorService може да изпълнява задачи периодично и има допълнителни методи за изпълнение на Runnable и Callable задачи.

301. Какво представлява класът FutureTask в Java?

Класът FutureTask осигурява основната реализация на интерфейса Future. Той има методи за стартиране и анулиране на изчислението. Можем да извлечем резултатите само ако изчислението е завършено, иначе получавам метод ще блокира, ако изчислението не е завършено. Не е възможно рестартирането или анулирането на изчислението, след като приключи.

302. Какво представлява рамката за събиране в Java?

Рамката Collection съдържа списък с класове и интерфейси за съхранение и манипулиране на данни. Тази рамка съдържа класове като ArrayList, Vector, Stack, HashSet и др. И интерфейси като List, Queue и др.

303. Каква е разликата между масив и колекция?

Arrayколекция
Той е с фиксиран размер и не може да промени размера по време на изпълнениеРазмерът може да се променя динамично и не е фиксиран.
Той може да съхранява само същия тип данниТой може да съхранява комбинация от стойности на типа данни
Той няма вградени методи като сортиране или търсенеТой има вградени методи за сортиране и търсене
Изпълнението е бързоИзпълнението е бавно
Ефективността на паметта е по-малкаЕфективността на паметта е повече
Той не се прилага въз основа на каквато и да е структура на данниВсеки клас в Collection е реализиран въз основа на някаква структура от данни

304. Какви са различните интерфейси, използвани в рамките на колекция?

Рамката Collection съдържа различни интерфейси, изброени по-долу:

  • Интерфейс за събиране: Това е основният интерфейс и всеки друг интерфейс трябва да реализира интерфейса за събиране. java.util.Collection
  • Интерфейс на списъка: Списъкът е подредена колекция от елементи, които могат да съхраняват дубликат стойности и разширява интерфейса COllection. Можем да получим достъп до произволни елементи от Списък. java.util.List
  • Задайте интерфейс: Set е интерфейс, който не може да съхранява дублирани стойности и може да включва само наследени методи от интерфейса на Collection. java.util.Set
  • Интерфейс на опашката: Интерфейсът на опашката съхранява данни под формата на First-In-First-Out (FIFO). java.util.Queue
  • Dequeue интерфейс: Това е двойна опашка и изпълнява интерфейса на опашката. Той поддържа както FIFO (First-In-First-Out) операция на опашката, така и LIFO (Last-In-First-Out) операция на стека. Поради това можем да вмъкваме и премахваме елементи от двата края. java.util.Dequeue
  • Интерфейс на картата: Интерфейсът Map съхранява елементи под формата на двойки ключ-стойност. Той може да съхранява само уникални ключове, но може съдържат дубликат стойности. Той не прилага интерфейса за събиране. java.util.Map

305. Каква е разликата между ArrayList и Vector?

ArrayListВектор
ArrayList не се синхронизираВекторът се синхронизира
Това не е наследствен класТова е наследствен клас
Той може да увеличи размера си с 50% от размера на масиваТой може да увеличи размера си чрез удвояване
Не е безопасно за нишкиТой е безопасен за конци
Използва само Iterator за обхожданеИзползва както преброяване, така и итератор за обхождане
Изпълнението на ArrayList е по-бързоЕфективността на вектора е сравнително по-бавна

306. Каква е разликата между ArrayList и LinkedList?

ArrayListLinkedList
Използва динамичен масив за съхраняване на елементиИзползва Double LinkedList за съхраняване на елементи
Производителността е по-бавнаИзпълнението е по-бързо
Може да се използва за изпълнение само на СписъкМоже да се използва за внедряване на Списък и Опашка
Осигурява произволен достъпНе предоставя произволен достъп
Заема по-малко памет, тъй като съхранява само обектЗаема повече памет, тъй като съхранява както обекта, така и препратката към обекта
get (int index) дава ефективност на O (1)get (int index) дава производителност на O (n)
Изпълнението на операцията за отстраняване в най-лошия случай е O (n), а в най-добрия случай е O (1)Операцията за отстраняване дава ефективност на O (1)
Методът на добавяне дава производителност на O (n) в най-лошия случайМетодът на добавяне дава ефективност на O (1)

307. Каква е разликата между Iterator и ListIterator?

ИтераторListIterator
Това е универсален итераторТова не е универсален итератор
Може да се използва за всякакъв вид колекцияМоже да се използва само за класове за изпълнение на Списък
Поддържа само операция за четене и изтриванеПоддържа операции за добавяне, актуализиране, четене и изтриване.
Може да се използва само за предна навигацияМоже да се използва за навигация в посока напред и назад
Това не е двупосочен итераторТова е двупосочен итератор
Използваме метода iterator ()Използваме метода listiterator ().
Не можем да посочим индекса за итерацияМожем да посочим индекса за итерация

310. Каква е разликата между Итератор и Изброяване?

изброяванеИтератор
Предлага се от JDK 1.0Предлага се от JDK 1.2
Това не е универсален итераторТова е универсален итератор
Може да се използва за итерация само на стари колекции като Vector, hashtableМоже да се използва за итерация на всякакви колекции
Поддържа само операция за четенеПоддържа операция за четене и изтриване
Той има дълги имена на методи
Например: hasMoreElements ()
Той има кратки имена на методи
Например: hasNext ()

311. Каква е разликата между Списък и Набор?

списъккомплект
Той може да съхранява дублиращи се елементиТой може да съхранява само уникални елементи
Това е подредена колекцияТова е неподредена колекция
Той има един наследствен клас, който е VectorТой няма наследствен клас
Той може да съхранява произволен брой нулеви стойностиТой може да съхранява само една нулева стойност

312. Каква е разликата между HashSet и TreeSet?

TreeSetHashSet
Поддържа възходящ редНе поддържа никакъв ред
Изчисляването е по-бавноИзчисляването е по-бързо
Разходите за време са log (n)Времето е постоянно

313. Каква е разликата между Set и Map?

комплектКарта
Set съхранява само стойностиКартата съхранява ключ и стойности
Комплектът може да съдържа уникални стойностиКартата може да съдържа уникални ключове и дублирани стойности
Може да съдържа единична нулева стойностТой може да съдържа единичен нулев ключ и множество нулеви стойности

314. Каква е разликата между HashSet и HashMap?

HashSetHashMap
Той реализира интерфейса SetТой реализира интерфейса Map
Той съхранява само стойностиТой съхранява данни под формата на двойка ключ-стойност
Не може да има дублирани стойностиТой може да съдържа дублирани стойности с уникални ключове
Може да има само една нулева стойностТой може да съдържа един нулев ключ с множество нулеви стойности

315. Каква е разликата между HashMap и TreeMap?

TreeMapHashMap
Поддържа възходящ редНе поддържа никакъв ред
Не може да съдържа нулев ключМоже да съдържа един нулев ключ
Това е изпълнение, основано на дървесна структураТова е реализация, базирана на хеш-таблица
Не позволява нулеви стойностиТой позволява множество нулеви стойности
Сортирането е по-бавноСортирането е по-бързо
Използва червено-черна дървовидна структура на даннитеТой използва структура на данни с хеш

316. Каква е разликата между HashMap и HashTable?

HashMapHashtable
Той не е синхронизиранТой е синхронизиран
Той не е безопасен за нишки и не може да се споделя между нишкиТой е безопасен за нишки и може да се споделя между нишки
Позволява един нулев ключ и множество нулеви стойностиНе позволява нулев ключ и нулева стойност
Въведено в JDK 1.2Това е наследствен клас
Използваме Iterator, за да преминем през HashmapИзползваме Iterator или Enumeration, за да преминем през Hashtable
Наследява клас AbstractMapНаследява речник клас
Изчисляването е бързоИзчисляването е бавно

317. Каква е разликата между колекция и колекции?

  • Collection е интерфейс, докато Collections е клас
  • Колекцията осигурява структура на данни за изпълнение на List, Set и т.н., докато класът Collections предоставя методи за сортиране и синхронизиране на елементи на колекция.

318. Каква е разликата между сравним и сравнителен?

  • Comparable има един метод compareTo (), докато Comparator съдържа един метод compare ().
  • Сравнимо се намира в пакета java.lang, докато Comparator се намира в пакета java.util
  • В „Сравним“ има само една последователност за сортиране, докато компараторът има множество възпалени последователности.

319. Какво е BlockingQueue?

BlockingQueue разширява интерфейса на опашката и осигурява операции за поддържане на концепцията за паралелност. Не може да съдържа нулеви елементи. По време на операцията за извличане опашката трябва да е непразна и докато съхранява елементите, опашката трябва да има малко свободно пространство.

320. Какво е предимството на файла Properties?

Файлът със свойствата се използва главно, когато искаме да съхраняваме информация, която се променя често. Винаги, когато променяме стойностите във файла с свойствата, не е необходимо да прекомпилираме файла на класа на java. Следователно поддръжката е лесна с помощта на файла Properties и осигурява гъвкавост по отношение на конфигурацията.

321. Какво е метод hashCode ()?

Методът hashCode () се използва в техниката на хеширане. Този метод връща стойност на хеш код, която е цяло число. Той връща една и съща целочислена стойност, ако двата ключа са равни. Той проверява дали два ключа са равни по метода jednak (). Ако два обекта не дават еднакъв резултат, използвайки метода equals (), тогава методът hashCode () ще върне различно цяло число и за двата обекта.

322. Защо трябва да заменим метода equals ()?

Заменяме методите equals (), за да проверява дали свойствата на обект са равни или не.

323. Как да синхронизирам елементи в списък, набор и карта?

Можем да използваме синхронизирания метод, който присъства в класа Collections, за да синхронизираме елементите, както е показано по-долу:

public static List synchronizedList(List l) {}
public static Set synchronizedSet(Set s) {}
public static SortedSet synchronizedSortedSet(SortedSet st) {}
public static Map synchronizedMap(Map m) {}
public static SortedMap synchronizedSortedMap(SortedMap sm) {}

324. Какво е предимството от използването на родова колекция?

  • Не е нужно да въвеждаме тип, докато използваме обща колекция.
  • Той е безопасен за тип и се проверява по време на компилация
  • Това прави кода по-стабилен, като открива грешки по време на компилация

325. Какво е хеш-сблъсък в Hashtable и как можем да се справим с него в Java?

Когато два различни ключа произвеждат една и съща стойност на хеш-код, ние го наричаме хеш-сблъсък. В този случай той се съхранява като два отделни записа в една и съща група. Има 2 начина да се избегне сблъсък:

  • Отделна верига
  • Отворено адресиране

326. Какво е клас по речник?

Класът на речника съхранява данни под формата на двойки ключ-стойност. Можем да извлечем стойността въз основа на съответния ключ. Подобно е на думата в английския речник, където можем да получим значението на думата, като търсим с ключовата дума.

327. Какъв е размерът по подразбиране на коефициента на натоварване при събиране въз основа на хеширане?

Размерът по подразбиране на коефициента на натоварване е 0.75.

328. Какво е бързо-неуспешно?

Бърз неуспех възниква в итератор, когато се опитваме да модифицираме структурата по време на итерация. Изхвърля ConcurrentModificationException. Не изисква никакви допълнително пространство в памет.

329. Каква е разликата между Array и ArrayList?

  • Масивът е с фиксиран размер и не можем да го променяме, докато можем динамично да променяме размера на ArrayList.
  • Масивите могат да съхраняват примитивни данни и обекти, докато ArrayList може да съхранява само обекти.

330. Каква е разликата между дължината на масив и размера на ArrayList?

За да извлечем дължината на масив, можем да използваме свойството length.

int[] a = {4,5,6,7}
System.out.println(a.length);

Но ArrayList няма свойство за дължина, вместо това използваме метода size (), за да получим броя на елементите в ArrayList.

ArrayList<String> al = new ArrayList<String>();
al.add("AAA");
al.add("BBB");
System.out.println(al.size());

331. Как да конвертирате ArrayList в Array и обратно?

Можем да използваме метода toArray () на ArrayList, за да конвертираме ArrayList в Array, както е показано по-долу:

ArrayList<String> al = new ArrayList<String>();
al.toArray(new String[al.size()]);

За да конвертираме Array в ArrayList, използваме метода asList на Array, както е показано по-долу:

int[] a = {4,5,6};
Arrays.asList(a);

332. Как да направя Java ArrayList само за четене?

Можем да използваме метода Collections.unmodifiableCollection (), за да направим ArrayList като само за четене. В този случай не можем да извършваме операции за добавяне, изтриване или задаване на ArrayList.

333. Как да премахна дубликати от ArrayList?

Ние можем да премахнете дубликатите от ArrayList по два начина:

  • Използване на HashSet - Той не запазва реда за вмъкване, но премахва дубликати
  • Използване на LinkedHashSet - Той поддържа реда и премахва дубликати

334. Как да синхронизирам ArrayList?

Можем да синхронизираме ArrayList, като използваме или метода Collections.synchronizedList (), или чрез CopyOnWriteArrayList .

335. Кога да използвам ArrayList и LinkedList?

Можем да използваме ArrayList за операции по търсене и LinkedList за операции по актуализиране.

336. Напишете Java програма за обръщане на елементите в ArrayList.

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;

public class ArrayListSort {

  public static void main(String[] args) {
    ArrayList<Integer> i = new ArrayList<Integer>();
    i.add(5);
    i.add(1);
    i.add(10);
    i.add(3);
    i.add(8);
    System.out.println("ArrayList Elements:");
    for(int num : i)
      System.out.println(num);
    
    Iterator it = i.listIterator();
    Collections.reverse(i);
    
    System.out.println("Elements in the reverse order:");
    while(it.hasNext())
      System.out.println(it.next());
  }

}
ArrayList Elements:
5
1
10
3
8
Elements in the reverse order:
8
3
10
1
5

337. Напишете Java програма за сортиране на елементите в ArrayList в низходящ ред.

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;

public class ArrayListReverse {

  public static void main(String[] args) {
    ArrayList<Integer> al = new ArrayList<Integer>();
    al.add(30);
    al.add(10);
    al.add(50);
    al.add(40);
    al.add(20);
    
    System.out.println("Elements in the ArrayList");
    for(int i: al)
      System.out.println(i);
    
    System.out.println("Sort Elements in descending order:");
    Comparator c = Collections.reverseOrder();
    Collections.sort(al, c);
    Iterator it = al.listIterator();
    while(it.hasNext())
      System.out.println(it.next());

  }

}
Elements in the ArrayList
30
10
50
40
20
Sort Elements in descending order:
50
40
30
20
10

338. Какво е JDBC?

JDBC е Java Database Connectivity, който е API за свързване на Java приложението и базите данни. Той използва JDBC драйвери за свързване и изпълнение на заявки в база данни. Също така можем да преглеждаме и модифицираме записи в база данни.

339. Какво е JDBC драйвер?

JDBC драйверът използва JDBC API, за да свърже приложението Java с всяка база данни. Внедряването на JDBC драйвер се основава на типа операционна система и хардуерна платформа. По-долу са представени различните видове JDBC драйвери:

  • Драйвер за мост JDBC-ODBC: Използва ODBC драйвер за свързване към базата данни. Той преобразува извикванията на метода JDBC в извикванията на метода ODBC. Това се използва по-рядко и се заменя с тънък драйвер.
  • JDBC Native API: Преобразува JDBC повикванията в естествени повиквания на API на базата данни. Той използва клиентските библиотеки на базата данни. Неговата производителност е по-добра от драйвера JDBC-ODBC.
  • JDBC-Net чиста Java: Това е драйвер за мрежов протокол, който използва междинния софтуер, за да преобразува JDBC повикванията в специфичен за производителя протокол за база данни.
  • Тънък драйвер (100% чиста Java): Това е чист Java драйвер, който директно преобразува JDBC повикванията към специфични за производителя протоколи от бази данни. Това е най-препоръчителният тип драйвер поради по-бързото му представяне.

340. Какви са стъпките за свързване с база данни в Java?

По-долу са описани стъпките за свързване към база данни в Java:

  • Импортиране на пакета JDBC: За да използваме драйверите JDBC, трябва да импортираме конкретните пакети в нашия код.
    import java.sql.*;
    
  • Заредете и регистрирайте JDBC драйверите: Можем да използваме метода forName (), за да заредим и регистрираме JDBC драйвера. Регистрацията е само еднократен процесор за цялото Java приложение.
    Class.forName("oracle.jdbc.driver.OracleDriver");
  • Свързване с базата данни: Трябва да установим връзка с базата данни, като използваме метода getConnection (). Той създава екземпляр на обект на клас java.sql.Connection. Той приема три параметъра, URL адреса на сървъра на базата данни, потребителско име и парола за свързване към базата данни (ако е необходимо).
    Connection con = DriverManager.getConnection(URL, username, password);
  • Създаване на обект на оператор: След това трябва да създадем оператор, който се използва за изпълнение на заявките в базата данни. За това можем да използваме достъп до метода createStatement, използвайки обекта за свързване.
    Statement s = con.createStatement();
  • Изпълнете заявката: Използвайки обекта Statement, можем да изпълним необходимите заявки. Това винаги връща резултат от тип ResultSet.
    ResultSet rs = s.executeQuery(query);
  • Обработете резултата: След изпълнение на заявката можем да обработим резултата с помощта на докато цикъл.
    while(rs.next())
         System.out.println(rs.getInt(1) + " " + rs.getString(2));
  • Затворете обектите: След като всички операции са завършени, трябва да затворим обектите ResultsSet, Statement и Connection, използвайки метода close ().
    rs.close();
    s.close();
    con.close();

341. Какви са компонентите на JDBC API?

Компонентите на JDBC API съдържат различни интерфейси и класове, както е показано по-долу:

Интерфейси

  • Връзка: Обектът за връзка установява връзка с необходимата база данни.
  • Изявление: Използвайки обекта за свързване, можем да създадем обект Изявление за изпълнение на заявката.
  • PreparedStatement: Това се използва за изпълнение параметризирани заявки.
  • ResultSet: Връща резултата от изпълнената заявка.
  • ResultSetMetaData: Той съдържа информация за таблицата като брой колони, име на колона, тип колона и т.н.
  • DatabaseMetaData: Той предоставя информация за базата данни като име на база данни, име на драйвер, общия брой таблици и т.н.
  • CallableStatement: Полезно за извикване на съхранени процедури и функции

Класове

  • DriverManager: Проследява всички налични драйвери и установява връзка с базата данни. Това е основният компонент на класа на JDBC API.
  • SQLException: Предоставя информация, свързана с грешки в базата данни.
  • Blob: Това е двоичен голям обект, който представлява колекция от двоични данни.
  • Clob: Това е обект с големи символи, който съхранява файлове с символи.

342. Какво представляват JDBC изявленията?

Изявлението JDBC се използва за изпълнение на SQL заявки и извличане на данните. Той има методи като execute (), executeUpdate (), executeQuery () и т.н., за да изпълнява различни SQL команди.

Има 3 вида JDBC изявления:

  • Изявление: Той изпълнява статична SQL заявка по време на изпълнение и е фабрика на ResultSet.
  • PreparedStatement: Той изпълнява параметризирани заявки по време на изпълнение.
  • CallableStatement: Използва се за достъп до съхранени процедури или функции.

343. Какъв е типът на връщане на метода Class.forName ()?

Class.ForName () връща обект от клас java.lang.Object.

344. Какви са разликите между Statment и PreparedStatement?

ИзявлениеПодготвена декларация
Използва се за изпълнение на SQL заявкиИзползва се за изпълнение на параметризирани заявки
Когато използваме Statement, заявката се компилира всеки път, когато стартираме програматаКогато използваме PreparedStatement, заявката се компилира само веднъж.
Не изисква никакви параметриИзисква се предаване на параметри към заявката

345. Как да зададете нулева стойност в JDBC PreparedStatement?

Можем да използваме метода setNull () на интерфейса PreparedStatement, за да зададем индекс на нулева стойност, както е показано по-долу.

void setNull(int parameterIndex, int sqlType) throws SQLException

346. Какви са предимствата на PreparedStatement пред интерфейса на Statement?

  • Изпълнението на PreparedStatement е по-бързо от Statement, тъй като заявката се компилира само веднъж, докато в Statement заявката се компилира всеки път, когато стартираме програмата.
  • Можем да предаваме параметри на заявката, докато използваме PreparedStatement, докато можем да използваме само статични заявки в Statement.
  • PreparedStatement използва повторно кеша, тъй като заявката винаги е подобна, докато това не е така в Statement.

347. Каква е разликата между execute, executeQuery и executeUpdate?

изпълнявамexecuteQueryexecuteUpdate
Той може да се използва за извършване на всякакви операции с оператори на SQL като актуализиране и изборМоже да се използва за извършване само на избрана операцияМоже да се използва за извършване само на операции като актуализиране, изтриване или вмъкване.
Връща булева стойностВръща ResultSet, който съдържа данните, извлечени чрез изпълнение на заявкатаВръща целочислена стойност, която представлява броя на записите, засегнати от изпълнението на заявката

348. Какви са различните видове ResultSet?

Има 3 вида ResultSet въз основа на посоката, в която може да се движи през записите:

  • ResultSet.TYPE_Forward_ONLY: Той може да се движи само в посока напред.
  • ResultSet.TYPE_SCROLL_INSENSITIVE: Той може да навигира както в посока напред, така и в обратна посока. Той не е чувствителен към направените промени.
  • ResultSet.TYPE_SCROLL_SENSITIVE: Той може да навигира както в посока напред, така и в обратна посока. Той е чувствителен към направените промени.

349. Какви са разликите между ResultSet и RowSet?

РезултатRowSet
Винаги поддържа връзка с базата данниТой може да бъде свързан и изключен по всяко време
Не може да се сериализираМоже да се сериализира
Не може да се предаде ResultSet обект през мрежатаМоже да предаде RowSet обект през мрежа
Това не е JavaBean обектТова е обект JavaBean
По подразбиране ResultSet не може да се превърта и актуализира.По подразбиране RowSet може да се превърта и актуализира.
ResultSet се връща от метода executeQuery ()RowSet се връща от метода RowSetProvider.newFactory (). CreateJdbcRowSet ().

350. Как да изпълнявам съхранени процедури, използвайки CallableStatement?

По-долу са описани стъпките за изпълнение на съхранените процедури.

  • Създайте процедура в базата данни
  • Установете мрежова връзка
  • Създайте обект на CallableStatement
  • Задайте стойностите и изпълнете заявката

Пример:

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

create or replace procedure "SAMPLE"(id IN NUMBER, name IN VARCHAR2)
is
begin
insert into employee values(id,name);
end

По-долу е представена структурата на таблицата

CREATE TABLE EMPLOYEE(ID NUMBER(10), NAME VARCHAR2(100))

Java код за изпълнение на съхранена процедура с помощта на CallableStatement.

import java.sql.*;
public class StoredProcedureDemo {

  public static void main(String[] args) throws Exception{
    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection c = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "system", "oracle");
    
    CallableStatement cs = c.prepareCall("{call sample(?,?)}");
    cs.setInt(1, 100);
    cs.setString(2, "Ravi");
    
    cs.execute();
    
    System.out.println("Success");

  }

}

351. Каква е ролята на класа JDBC DriverManager?

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

352. Каква е функцията на интерфейса за връзка JDBC?

Интерфейсът JDBC Connection помага да се установи връзка с базата данни и поддържа сесията. Използва се и за управление на транзакции. Използва се заедно с Statement, PreparedStatement, CallableStatement и DatabaseMetaData.

353. Какво представлява интерфейсът JDBC ResultSet?

Интерфейсът JDBC ResultSet съдържа данните, извлечени чрез изпълнение на заявката. Всеки ResultSet обект представлява реда в таблица с данни. Той има различни типове, с които се придвижваме напред и назад в таблица с данни.

354. Какво представлява интерфейсът JDBC ResultSetMetaData?

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

355. Какво представлява интерфейсът JDBC DatabaseMetaData?

Интерфейсът JDBC DatabaseMetaData съдържа информация, свързана с базата данни, като име на база данни, име на драйвер, версия на драйвера, брой таблици и др. Можем да използваме метода getMetaData, използвайки обекта за свързване, за да създадем екземпляр на DatabaseMetaData.

356. Кой интерфейс е отговорен за управлението на транзакции в JDBC?

Интерфейсът на Connection има методи като commit (), rollback (), които отговарят за управлението на транзакции в JDBC.

357. Какво е пакетна обработка и как да се извърши партидна обработка в JDBC?

Партида обработката е процес за изпълнение на множество заявки наведнъж в партида и следователно води до след изпълнение. Statement и PreparedStatement съдържат методи, които поддържат групова обработка. По-долу са описани стъпките за извършване на групова обработка:

  • Заредете класа на драйвера
  • Създайте връзка
  • Създайте изявление
  • Добавете заявки в партидата
  • Изпълнете партидата
  • Затворете връзката
import java.sql.*;
public class BatchProcessing {

  public static void main(String[] args) throws Exception {
    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection c = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","oracle");
    c.setAutoCommit(false);
    
    Statement s = c.createStatement();
    
    //Add queries to the batch
    s.addBatch("insert into employees value(111,'Akash')");
    s.addBatch("insert into employees value(222,'Bharat')");
    
    //Execute the batch
    s.executeBatch();
    
    c.commit();
    c.close();

  }

}

358. Какво представляват типовете данни CLOB и BLOB в JDBC?

BLOB означава Binary Large Object и съхранява двоични данни като глас, изображение и смесени носители в базата данни. Може да се използва в бази данни като MySQL, Oracle, DB2. Той може да побере до 3GB данни в MySQL и 128GB в базата данни на Oracle.

CLOB означава символен голям обект и съхранява базирани на знаци данни като файлове в базата данни. Разглежда се като символен низ. Той може да побере до 2 GB на MySQL и 128 GB на базата данни на Oracle.

359. Какви са различните видове заключвания в JDBC?

Заключването е механизъм, който пречи на други потребители да използват определени ресурси. По-долу са различните видове брави в JDBC:

  • Брави на редове и ключове: Използва се, когато актуализираме редовете в таблицата с данни.
  • Заключване на страници: Използва се за заключване на страницата, особено когато някаква транзакция все още е в процес на обработка на конкретната страница. Той заключва цялата страница, която използва реда за актуализиране, изтриване или вмъкване на данни.
  • Брави за маса: Използва се за заключване на масата. Има два вида брави за маси като споделени и изключителни. Споделеното заключване ни позволява да четем таблицата, но предотвратява актуализации. Изключителната ключалка предотвратява както четенето, така и писането.
  • Заключване на база данни: Той заключва базата данни и предотвратява операциите за четене и актуализиране на други транзакции, когато базата данни е отворена.

360. Как да съхранявате и извличате изображения от базата данни?

Създайте таблица с две колони като ИМЕ и ФОТО.

CREATE TABLE "IMAGETABLE"("NAME" VARCHAR2(1000), "PHOTO" BLOB)

Използвайки PreparedStatement, ние можем да съхраняваме и извличаме изображенията от базата данни. По-долу е даден кодът за съхраняване на изображението.

import java.sql.*;
import java.io.*;
public class StoreImage{

  public static void main(String[] args) {
    try {
      Class.forName("oracle.jdbc.driver.OracleDriver");
      Connection c = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "system", "oracle");
      
      PreparedStatement p = c.prepareStatement("insert into imagetable(?,?)");
      p.setString(1, "Ravi");
      
      FileInputStream f = new FileInputStream("C:\\photo.jpg");
      p.setBinaryStream(2, f, f.available());
      
      //Store the image
      int i = p.executeUpdate();
      System.out.println(i + " row is affected");
      
      c.close();
      
    }
    catch(Exception e) {
      e.printStackTrace();
    }
    

  }

}

По-долу е даден кодът за извличане на изображението от базата данни.

import java.sql.*;
import java.io.*;
public class ImageRetrieval {

  public static void main(String[] args) {
    try {
      Class.forName("oracle.jdbc.driver.OracleDriver");
      Connection c = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "system", "oracle");
      
      PreparedStatement p = c.prepareStatement("select * from imagetable");
      ResultSet r = p.executeQuery();
      
      if(r.next()) {
        Blob b = r.getBlob(2); //Retrieve 2nd column data since image is in 2nd column
        byte[] barr = b.getBytes(1, (int)b.length()); //1 denotes 1st image
        
        FileOutputStream f = new FileOutputStream("C:\\newphoto.jpg");
        f.write(barr);
        
        f.close();
      }
      System.out.println("Image retrieved");
      
      c.close();
      
    }
    catch(Exception e) {
      e.printStackTrace();
    }

  }

}

361. Как да съхранявам файлове в базата данни на Oracle?

Можем да използваме типа данни CLOB за съхраняване на файлове в базата данни с помощта на PreparedStatement.

По-долу е даден код за създаване на таблица с 2 колони ID и NAME

CREATE TABLE FILETABLE("ID" NUMBER, "NAME" CLOB)

По-долу е даден кодът за съхраняване на файла в базата данни.

import java.sql.*;
import java.io.*;

public class StoreFile {

  public static void main(String[] args) {
    try {
      Class.forName("oracle.jdbc.driver.OracleDriver");
      Connection c = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "system", "oracle");
      
      PreparedStatement p = c.prepareStatement("insert into filetablevalues(?,?)");
      
      File f = new File("D:\\File1.txt");
      FileReader fr = new FileReader(f);
      
      p.setInt(1, 100);
      p.setCharacterStream(2, fr, (int)f.length());
      
      int i = p.executeUpdate();
      System.out.println(i + " row is affected");
      
      c.close();
      
    }
    catch(Exception e) {
      e.printStackTrace();
    }

  }

}

362. Как да извлека файлове от база данни на Oracle?

Можем да използваме метода getClob () на PreparedStatement за извличане на файлове от базата данни.

По-долу е таблицата, която сме създали.

CREATE TABLE FILETABLE("ID" NUMBER, "NAME" CLOB)

По-долу е даден кодът за извличане на файла от базата данни.

import java.io.*;
import java.sql.*;
public class FileRetrieval {

  public static void main(String[] args) {
    try {
      Class.forName("oracle.jdbc.driver.OracleDriver");
      Connection c = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "system", "oracle");
      
      PreparedStatement p = c.prepareStatement("select * from filetable");
      
      ResultSet r = p.executeQuery();
      r.next(); //Points to the first row
      
      Clob clob = r.getClob(2); //2 denotes the 2nd column that contains the file
      Reader reader = clob.getCharacterStream();
      
      FileWriter f = new FileWriter("D:\\File2.txt");
      int i;
      while((i=reader.read())!= -1) {
        f.write((char)i);
      }
      f.close();
      c.close();
      
      System.out.println("File Retrieved");
    }
    catch(Exception e) {
      e.printStackTrace();
    }

  }

}

363. Какви са разликите между съхранените процедури и функции?

Съхранена процедураФункции
Изпълнява бизнес логикаИзвършва изчисления
Не е задължително да имате тип връщанеЗадължително е да имате тип връщане
Той поддържа входни и изходни параметриПоддържа само входни параметри
Може да върне 0 или много стойностиМоже да върне само 1 стойност
Процедурите не могат да се извикват от функциятаФункцията може да бъде извикана от процедура
Процедурата позволява SELECT и DML изрази (INSERT, UPDATE, DELETE)Функцията позволява само оператор SELECT

364. Как да поддържам целостта на базата данни, използвайки JDBC?

Можем да поддържаме целостта на базата данни чрез осигуряване на ACID свойства. ACID означава атомност, консистенция, изолация и издръжливост. Можем да управляваме транзакциите, като използваме методите като setAutoCommit (), commit (), rollback (), който присъства в интерфейса на Connection.

import java.sql.*;
public class IntegrityDemo {

  public static void main(String[] args) throws Exception{
    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection c = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "system", "oracle");
    
    c.setAutoCommit(false);
    
    Statement s = c.createStatement();
    s.executeUpdate("insert into employees values(111,'Ravi')");
    s.executeUpdate("insert into employees values(222,'Abhishek')");
    
    c.commit();
    c.close();

  }

}

365. Какво е JDBC RowSet?

JDBC RowSet е обвивка на ResultSet. Той може да съхранява таблични данни като ResultSet и е лесен за използване. Класовете за изпълнение на интерфейса RowSet са:

  • JdbcRowSet
  • CachedRowSet
  • WebRowSet
  • JoinRowSet
  • FilteredRowSet

366. Каква е разликата между java.util.Date и java.sql.Date?

Основната разлика е, че java.sql.Date представлява само информация за дата без време, а java.util.Date представлява информация за дата и час.

367. Какво представлява методът JDBC setMaxRows?

Методът setMaxRows () ограничава броя редове, които базата данни може да върне с помощта на заявката.