90% гарантія питань співбесіди
Існує список із 300 основних питань співбесіди на Java. Якщо вам поставили якесь основне запитання для співбесіди про Java, будь ласка, опублікуйте його в розділі запитань. Ми запевняємо, що ви отримаєте тут 90% поширених запитань і відповідей на співбесіді.
Відповіді на запитання співбесіди щодо Core Java короткі та по суті. Основні запитання співбесіди щодо Java класифікуються в питаннях інтерв’ю «Основи Java», запитання інтерв’ю щодо ООП, питання інтерв’ю щодо обробки рядків, питання інтерв’ю щодо багатопотокової роботи, питання інтерв’ю щодо колекції, запитання інтерв’ю JDBC тощо.
1 2 3 4 5
Core Java: Основи Java Питання для співбесіди
1) Що таке Java?
Java це високий рівень, об'єктно-орієнтований , надійна, безпечна мова програмування, незалежна від платформи, високопродуктивна, багатопотокова та портативна мова програмування. Він був розроблений Джеймс Гослінг у червні 1991 р. Її також можна назвати платформою, оскільки вона надає власний JRE та API.
2) Які відмінності між C++ і Java?
Відмінності між C++ і Java наведено в наступній таблиці.
Індекс порівняння | C++ | Java |
---|---|---|
Незалежний від платформи | C++ залежить від платформи. | Java не залежить від платформи. |
В основному використовується для | С++ в основному використовується для системного програмування. | Java в основному використовується для програмування додатків. Він широко використовується у віконних, веб-додатках, корпоративних і мобільних додатках. |
Мета дизайну | C++ був розроблений для програмування систем і додатків. Це було розширенням Мова програмування C . | Java була розроблена та створена як інтерпретатор для систем друку, але пізніше була розширена як допоміжна мережева обчислювальна програма. Він був розроблений з метою бути простим у використанні та доступним для ширшої аудиторії. |
Йти до | C++ підтримує оператор goto. | Java не підтримує оператор goto. |
Множинне успадкування | C++ підтримує множинне успадкування. | Java не підтримує множинне успадкування через клас. Це може бути досягнуто шляхом інтерфейси в java . |
Перевантаження оператора | C++ підтримує перевантаження оператора . | Java не підтримує перевантаження операторів. |
Покажчики | C++ підтримує покажчики. Ви можете написати програму покажчика на C++. | Java внутрішньо підтримує покажчик. Однак ви не можете написати програму покажчика на java. Це означає, що Java має обмежену підтримку вказівників у Java. |
Компілятор та інтерпретатор | C++ використовує лише компілятор. C++ компілюється та виконується за допомогою компілятора, який перетворює вихідний код у машинний, тому C++ залежить від платформи. | Java використовує як компілятор, так і інтерпретатор. Вихідний код Java перетворюється на байт-код під час компіляції. Інтерпретатор виконує цей байт-код під час виконання та створює вихідні дані. Java інтерпретується, тому вона не залежить від платформи. |
Виклик за значенням і виклик за посиланням | C++ підтримує як виклик за значенням, так і виклик за посиланням. | Java підтримує лише виклик за значенням. У java немає виклику за посиланням. |
Структура та союз | C++ підтримує структури та об'єднання. | Java не підтримує структури та об’єднання. |
Підтримка потоків | C++ не має вбудованої підтримки потоків. Він покладається на сторонні бібліотеки для підтримки потоків. | Java має вбудований нитка підтримка. |
Коментар до документації | C++ не підтримує коментарі до документації. | Java підтримує коментар до документації (/** ... */) для створення документації для вихідного коду Java. |
Віртуальне ключове слово | C++ підтримує віртуальне ключове слово, щоб ми могли вирішити, перевизначати чи ні функцію. | Java не має віртуального ключового слова. Ми можемо перевизначати всі нестатичні методи за замовчуванням. Іншими словами, нестатичні методи є віртуальними за замовчуванням. |
беззнаковий зсув вправо >>> | C++ не підтримує оператор >>>. | Java підтримує оператор беззнакового зсуву вправо >>>, який заповнює нуль у верхній частині для від’ємних чисел. Для додатних чисел він працює так само, як оператор >>. |
Дерево успадкування | C++ завжди створює нове дерево успадкування. | Java завжди використовує одне дерево успадкування, оскільки всі класи є дочірніми класами Object у Java. Клас об'єктів є коренем класу успадкування дерево в java. |
Обладнання | C++ ближче до апаратного забезпечення. | Java не дуже взаємодіє з апаратним забезпеченням. |
Об'єктно-орієнтований | C++ є об'єктно-орієнтованою мовою. Однак у мові C однокоренева ієрархія неможлива. | Java також є об'єктно-орієнтований мова. Однак усе (крім фундаментальних типів) є об’єктом у Java. Це єдина коренева ієрархія, оскільки все походить від java.lang.Object. |
3) Перелічіть особливості мови програмування Java.
У мові програмування Java є такі функції.
4) Що ви розумієте під віртуальною машиною Java?
Віртуальна машина Java це віртуальна машина, яка дозволяє комп’ютеру запускати програму Java. JVM діє як механізм виконання, який викликає основний метод, присутній у коді Java. JVM - це специфікація, яка повинна бути реалізована в комп'ютерній системі. Код Java компілюється JVM як байт-код, який є машинно-незалежним і близьким до рідного коду.
5) Яка різниця між JDK, JRE та JVM?
JVM
JVM — це абревіатура від Java Virtual Machine; це абстрактна машина, яка забезпечує середовище виконання, в якому може виконуватися байт-код Java. Це специфікація, яка визначає роботу віртуальної машини Java. Його впровадження забезпечили Oracle та інші компанії. Його реалізація відома як JRE.
JVM доступні для багатьох апаратних і програмних платформ (тому JVM залежить від платформи). Це екземпляр середовища виконання, який створюється, коли ми запускаємо клас Java. Існує три поняття JVM: специфікація, реалізація та екземпляр.
JRE
JRE означає Java Runtime Environment. Це реалізація JVM. Java Runtime Environment — це набір програмних засобів, які використовуються для розробки програм Java. Він використовується для забезпечення середовища виконання. Це реалізація JVM. Він фізично існує. Він містить набір бібліотек + інші файли, які JVM використовує під час виконання.
JDK
JDK — це абревіатура від Java Development Kit. Це середовище розробки програмного забезпечення, яке використовується для розробки програм і аплетів Java. Він фізично існує. Він містить засоби розробки JRE +. JDK є реалізацією будь-якої з наведених нижче платформ Java, випущених корпорацією Oracle:
- Платформа Java Standard Edition
- Платформа Java Enterprise Edition
- Платформа Java Micro Edition
6) Скільки типів областей пам'яті виділяє JVM?
Багато видів:
7) Що таке JIT-компілятор?
Компілятор Just-In-Time (JIT): Використовується для підвищення продуктивності. JIT компілює частини байт-коду, які мають однакові функції одночасно, і, отже, зменшує час, необхідний для компіляції. Тут термін компілятор відноситься до транслятора з набору інструкцій віртуальної машини Java (JVM) в набір інструкцій конкретного процесора.
8) Що таке платформа?
Платформа — це апаратне або програмне середовище, у якому виконується частина програмного забезпечення. Існує два типи платформ: програмні та апаратні. Java забезпечує програмну платформу.
9) Які основні відмінності між платформою Java та іншими платформами?
Існують такі відмінності між платформою Java та іншими платформами.
- Java є програмною платформою, тоді як інші платформи можуть бути апаратними або програмними платформами.
- Java виконується поверх інших апаратних платформ, тоді як інші платформи можуть мати лише апаратні компоненти.
10) Що надає Java характеру «напиши один раз і запусти будь-де»?
Байт-код. Компілятор Java перетворює програми Java у файл класу (байт-код), який є проміжною мовою між вихідним кодом і машинним кодом. Цей байт-код не залежить від платформи і може бути виконаний на будь-якому комп’ютері.
11) Що таке завантажувач класів?
Classloader — це підсистема JVM, яка використовується для завантаження файлів класів. Щоразу, коли ми запускаємо програму Java, вона спочатку завантажується завантажувачем класів. У Java є три вбудовані завантажувачі класів.
12) Чи є порожня назва файлу .java дійсною назвою вихідного файлу?
Так, Java дозволяє зберегти наш файл Java за допомогою .java лише нам потрібно скомпілювати його за допомогою javac .java і пробігти повз ім'я класу java Візьмемо простий приклад:
//save by .java only class A{ public static void main(String args[]){ System.out.println('Hello java'); } } //compile by javac .java //run by java A
скомпілювати його за допомогою javac .java
пропустіть це Java A
13) Чи є ключове слово delete, next, main, exit або null у java?
Немає.
14) Якщо я не надаю жодних аргументів у командному рядку, то яке значення, збережене в масиві String, буде передано в метод main(), пусте чи NULL?
Він порожній, але не нульовий.
15) Що, якщо я напишу static public void замість public static void?
Програма компілюється та працює правильно, оскільки порядок специфікаторів не має значення в Java.
16) Яке значення локальних змінних за замовчуванням?
Локальні змінні не ініціалізуються значенням за замовчуванням, ані примітивами, ані посиланнями на об’єкти.
17) Які різні специфікатори доступу існують у Java?
У Java специфікатори доступу - це ключові слова, які використовуються для визначення області доступу методу, класу або змінної. У Java є чотири специфікатори доступу, наведені нижче.
18) Яке призначення статичних методів і змінних?
Методи або змінні, визначені як статичні, є спільними для всіх об’єктів класу. Статика є частиною класу, а не об’єкта. Статичні змінні зберігаються в області класу, і нам не потрібно створювати об’єкт для доступу до таких змінних. Тому static використовується у випадку, коли нам потрібно визначити змінні або методи, які є спільними для всіх об’єктів класу.
Наприклад, у класі, що моделює групу студентів коледжу, назва коледжу є загальним атрибутом для всіх студентів. Тому назву коледжу будемо визначати як статичний .
19) Які переваги пакетів у Java?
Існують різні переваги визначення пакетів у Java.
- Пакунки уникають конфліктів імен.
- Пакет забезпечує легший контроль доступу.
- Ми також можемо мати приховані класи, які не видно ззовні та використовуються пакетом.
- Легше знайти споріднені класи.
20) Який результат роботи наступної програми Java?
class Test { public static void main (String args[]) { System.out.println(10 + 20 + 'Javatpoint'); System.out.println('Javatpoint' + 10 + 20); } }
Результатом наведеного вище коду буде
30Javatpoint Javatpoint1020
Пояснення
У першому випадку 10 і 20 розглядаються як числа та додаються до 30. Тепер їхня сума 30 розглядається як рядок і об’єднується з рядком Javatpoint . Тому вихід буде 30Javatpoint .
У другому випадку рядок Javatpoint об’єднується з 10, щоб бути рядком Javatpoint10 який потім буде об’єднано з 20 Javatpoint1020 .
21) Який результат роботи наступної програми Java?
class Test { public static void main (String args[]) { System.out.println(10 * 20 + 'Javatpoint'); System.out.println('Javatpoint' + 10 * 20); } }
Результатом наведеного вище коду буде
200Javatpoint Javatpoint200
Пояснення
У першому випадку спочатку будуть перемножені числа 10 і 20, а потім результат 200 розглядатиметься як рядок і буде об’єднаний із рядком Javatpoint для отримання результату 200Javatpoint .
У другому випадку числа 10 і 20 будуть спочатку помножені, щоб отримати 200, оскільки пріоритет множення є вищим, ніж додавання. Результат 200 розглядатиметься як рядок і об’єднано з ним Javatpoint щоб вивести як Javatpoint200 .
22) Який результат роботи наступної програми Java?
class Test { public static void main (String args[]) { for(int i=0; 0; i++) { System.out.println('Hello Javatpoint'); } } }
Наведений вище код викличе помилку під час компіляції, оскільки цикл for вимагає логічне значення в другій частині, а ми надаємо ціле значення, тобто 0.
Основна Java – концепції ООП: початкові запитання для співбесіди з ООП
Надано понад 50 питань для співбесіди з ООП (об’єктно-орієнтоване програмування та система). Однак, для кращого розуміння їх було розділено на категорії в багатьох розділах, таких як запитання інтерв’ю щодо конструктора, запитання статичної інтерв’ю, запитання інтерв’ю щодо успадкування, питання інтерв’ю щодо абстракції, запитання інтерв’ю щодо поліморфізму тощо.
23) Що таке об'єктно-орієнтована парадигма?
Це парадигма програмування, заснована на об’єктах, які мають дані та методи, визначені в класі, до якого вони належать. Об'єктно-орієнтована парадигма спрямована на включення переваг модульності та багаторазового використання. Об’єкти — це екземпляри класів, які взаємодіють один з одним для розробки додатків і програм. Існують наступні особливості об'єктно-орієнтованої парадигми.
- Дотримується підходу знизу вгору в розробці програм.
- Зосередьтеся на даних за допомогою методів роботи з даними об’єкта
- Включає такі концепції, як інкапсуляція та абстракція, які приховують складності від користувача та показують лише функціональність.
- Реалізує підхід у реальному часі, як-от успадкування, абстракція тощо.
- Прикладами об’єктно-орієнтованої парадигми є C++, Simula, Smalltalk, Python, C# тощо.
24) Що таке об'єкт?
Об’єкт — це сутність реального часу, яка має певний стан і поведінку. У Java Object — це екземпляр класу, який має змінні екземпляра як стан об’єкта та методи як поведінку об’єкта. Об'єкт класу можна створити за допомогою новий ключове слово.
25) Яка різниця між об’єктно-орієнтованою мовою програмування та об’єктно-орієнтованою мовою програмування?
Існують наступні основні відмінності між об'єктно-орієнтованою мовою та об'єктно-орієнтованою мовою.
- Об’єктно-орієнтовані мови дотримуються всіх концепцій ООП, тоді як об’єктно-орієнтована мова не дотримується всіх концепцій ООП, таких як успадкування та поліморфізм.
- Об’єктно-орієнтовані мови не мають вбудованих об’єктів, тоді як об’єктно-орієнтовані мови мають вбудовані об’єкти, наприклад, JavaScript має об’єкт вікна.
- Прикладами об’єктно-орієнтованого програмування є Java, C#, Smalltalk тощо, тоді як прикладами об’єктно-орієнтованих мов є JavaScript, VBScript тощо.
26) Яким буде початкове значення посилання на об’єкт, визначеного як змінна екземпляра?
Усі посилання на об’єкти ініціалізуються значенням null у Java.
Основна Java - концепції ООП: запитання для співбесіди конструктора
27) Що таке конструктор?
Конструктор можна визначити як спеціальний тип методу, який використовується для ініціалізації стану об’єкта. Він викликається, коли створюється екземпляр класу і для об’єкта виділяється пам’ять. Кожного разу об’єкт створюється за допомогою новий ключове слово, викликається конструктор класу за замовчуванням. Ім'я конструктора має бути схоже на ім'я класу. Конструктор не повинен мати явний тип повернення.
Детальніше.28) Скільки типів конструкторів використовується в Java?
На основі параметрів, переданих у конструкторах, у Java існує два типи конструкторів.
29) Яке призначення конструктора за замовчуванням?
Метою конструктора за замовчуванням є призначення об’єктам значення за замовчуванням. Компілятор Java неявно створює конструктор за замовчуванням, якщо в класі немає конструктора.
class Student3{ int id; String name; void display(){System.out.println(id+' '+name);} public static void main(String args[]){ Student3 s1=new Student3(); Student3 s2=new Student3(); s1.display(); s2.display(); } }Перевірте зараз
Вихід:
0 null 0 null
Пояснення: У наведеному вище класі ви не створюєте жодного конструктора, тому компілятор надає вам конструктор за замовчуванням. Тут 0 і нульові значення надаються конструктором за замовчуванням.
Детальніше.
30) Чи повертає конструктор якесь значення?
років: так, конструктор неявно повертає поточний екземпляр класу (ви не можете використовувати явний тип повернення з конструктором). Детальніше.
31)Чи успадковується конструктор?
Ні, конструктор не успадковується.
32) Чи можете ви зробити конструктор остаточним?
Ні, конструктор не може бути остаточним.
де я можу знайти налаштування свого браузера
33) Чи можна перевантажувати конструктори?
Так, конструктори можна перевантажити, змінивши кількість прийнятих конструктором аргументів або змінивши тип даних параметрів. Розглянемо наступний приклад.
class Test { int i; public Test(int k) { i=k; } public Test(int k, int m) { System.out.println('Hi I am assigning the value max(k, m) to i'); if(k>m) { i=k; } else { i=m; } } } public class Main { public static void main (String args[]) { Test test1 = new Test(10); Test test2 = new Test(12, 15); System.out.println(test1.i); System.out.println(test2.i); } }
У наведеній вище програмі тест конструктора перевантажений іншим конструктором. Під час першого виклику конструктора викликається конструктор з одним аргументом, і i буде ініціалізовано значенням 10. Однак під час другого виклику конструктора викликається конструктор з 2 аргументами, і i буде ініціалізовано зі значенням 15.
34) Що ви розумієте під конструктором копіювання в Java?
У java немає конструктора копіювання. Однак ми можемо копіювати значення з одного об’єкта в інший, як конструктор копіювання в C++.
Існує багато способів копіювання значень одного об’єкта в інший у java. Вони є:
- За конструктором
- Шляхом присвоєння значень одного об’єкта іншому
- Методом clone() класу Object
У цьому прикладі ми скопіюємо значення одного об’єкта в інший за допомогою конструктора Java.
//Java program to initialize the values from one object to another class Student6{ int id; String name; //constructor to initialize integer and string Student6(int i,String n){ id = i; name = n; } //constructor to initialize another object Student6(Student6 s){ id = s.id; name =s.name; } void display(){System.out.println(id+' '+name);} public static void main(String args[]){ Student6 s1 = new Student6(111,'Karan'); Student6 s2 = new Student6(s1); s1.display(); s2.display(); } }Перевірте зараз
Вихід:
111 Karan 111 Karan
35) Які відмінності між конструкторами та методами?
Існує багато відмінностей між конструкторами та методами. Вони наведені нижче.
Конструктор Java | Метод Java |
---|---|
Для ініціалізації стану об’єкта використовується конструктор. | Метод використовується для виявлення поведінки об’єкта. |
Конструктор не повинен мати тип повернення. | Метод повинен мати тип повернення. |
Конструктор викликається неявно. | Метод викликається явно. |
Компілятор Java надає конструктор за замовчуванням, якщо у вас немає жодного конструктора в класі. | Метод не надається компілятором у будь-якому випадку. |
Ім'я конструктора має збігатися з ім'ям класу. | Назва методу може збігатися з назвою класу, а може і не збігатися. |
36) Який результат роботи наступної програми Java?
public class Test { Test(int a, int b) { System.out.println('a = '+a+' b = '+b); } Test(int a, float b) { System.out.println('a = '+a+' b = '+b); } public static void main (String args[]) { byte a = 10; byte b = 15; Test test = new Test(a,b); } }
Вихід наступної програми:
a = 10 b = 15
Тут тип даних змінних a і b, тобто byte, змінюється на int, і викликається перший параметризований конструктор із двома цілими параметрами.
37) Який результат роботи наступної програми Java?
class Test { int i; } public class Main { public static void main (String args[]) { Test test = new Test(); System.out.println(test.i); } }
Результатом програми є 0, тому що змінна i ініціалізована на 0 внутрішньо. Оскільки ми знаємо, що конструктор за замовчуванням викликається неявно, якщо в класі немає конструктора, змінна i ініціалізується 0, оскільки в класі немає конструктора.
38) Який результат роботи наступної програми Java?
class Test { int test_a, test_b; Test(int a, int b) { test_a = a; test_b = b; } public static void main (String args[]) { Test test = new Test(); System.out.println(test.test_a+' '+test.test_b); } }
Є помилка компілятора у програмі, оскільки в основному методі є виклик конструктора за замовчуванням, якого немає в класі. Однак у класі Test є лише один параметризований конструктор. Таким чином, жоден конструктор за замовчуванням не викликається конструктором неявно.
Ядро Java - концепції ООП: статичні ключові слова, запитання для співбесіди
39) Що таке статична змінна?
Статична змінна використовується для посилання на спільну властивість усіх об’єктів (яка не є унікальною для кожного об’єкта), наприклад, назва компанії співробітників, назва коледжу студентів тощо. Статична змінна отримує пам’ять лише один раз в області класу в час завантаження класу. Використання статичної змінної робить вашу програму більш ефективною пам’яттю (це зберігає пам’ять). Статична змінна належить класу, а не об'єкту.
//Program of static variable class Student8{ int rollno; String name; static String college ='ITS'; Student8(int r,String n){ rollno = r; name = n; } void display (){System.out.println(rollno+' '+name+' '+college);} public static void main(String args[]){ Student8 s1 = new Student8(111,'Karan'); Student8 s2 = new Student8(222,'Aryan'); s1.display(); s2.display(); } }Перевірте зараз
Output:111 Karan ITS 222 Aryan ITS
Детальніше.
40) Що таке статичний метод?
- Статичний метод належить класу, а не об’єкту.
- Немає необхідності створювати об’єкт для виклику статичних методів.
- Статичний метод може отримати доступ і змінити значення статичної змінної.
41) Які обмеження застосовуються до статичних методів Java?
До статичних методів застосовуються два основні обмеження.
- Статичний метод не може використовувати нестатичний елемент даних або безпосередньо викликати нестатичний метод.
- this і super не можна використовувати в статичному контексті, оскільки вони не статичні.
42) Чому основний метод є статичним?
Оскільки об’єкт не вимагає виклику статичного методу. Якщо ми зробимо основний метод нестатичним, JVM спочатку буде створювати свій об’єкт, а потім викликати метод main(), що призведе до виділення додаткової пам’яті. Детальніше.
43) Чи можемо ми перевизначити статичні методи?
Ні, ми не можемо перевизначити статичні методи.
44) Що таке статичний блок?
Статичний блок використовується для ініціалізації статичних даних. Він виконується перед основним методом, під час завантаження класу.
class A2{ static{System.out.println('static block is invoked');} public static void main(String args[]){ System.out.println('Hello main'); } }Перевірте зараз
Output: static block is invoked Hello main
Детальніше.
45) Чи можемо ми виконати програму без методу main()?
Відповідь) Ні, це було можливо до JDK 1.7 за допомогою статичного блоку. З JDK 1.7 це неможливо. Детальніше.
46) Що робити, якщо модифікатор static буде видалено з сигнатури основного методу?
Програма компілюється. Однак під час виконання видає помилку 'NoSuchMethodError'.
47) Яка різниця між статичним (класовим) методом і методом екземпляра?
статичний або класовий метод | метод екземпляра |
---|---|
1) Метод, який оголошено як статичний, називається статичним методом. | Метод, який не оголошено як статичний, називається методом екземпляра. |
2) Нам не потрібно створювати об’єкти для виклику статичних методів. | Об’єкт потрібен для виклику методів екземпляра. |
3) До нестатичних (екземплярів) членів неможливо отримати прямий доступ у статичному контексті (статичний метод, статичний блок і статичний вкладений клас). | До статичних і нестатичних змінних можна отримати доступ у методах екземпляра. |
4) Наприклад: public static int cube(int n){ return n*n*n;} | Наприклад: public void msg(){...}. |
48) Чи можемо ми зробити конструктори статичними?
Як відомо, статичний контекст (метод, блок або змінна) належить класу, а не об’єкту. Оскільки конструктори викликаються лише під час створення об’єкта, немає сенсу робити конструктори статичними. Однак, якщо ви спробуєте це зробити, компілятор покаже помилку компілятора.
49) Чи можемо ми зробити абстрактні методи статичними в Java?
У Java, якщо ми зробимо абстрактні методи статичними, вони стануть частиною класу, і ми зможемо напряму викликати його, що є непотрібним. Виклик невизначеного методу абсолютно марний, тому це заборонено.
50) Чи можемо ми оголосити статичні змінні та методи в абстрактному класі?
Так, ми можемо оголосити статичні змінні та методи в абстрактному методі. Оскільки ми знаємо, що немає вимоги робити об’єкт для доступу до статичного контексту, отже, ми можемо отримати доступ до статичного контексту, оголошеного всередині абстрактного класу, використовуючи назву абстрактного класу. Розглянемо наступний приклад.
abstract class Test { static int i = 102; static void TestMethod() { System.out.println('hi !! I am good !!'); } } public class TestClass extends Test { public static void main (String args[]) { Test.TestMethod(); System.out.println('i = '+Test.i); } }
Вихід
hi !! I am good !! i = 102
Основна Java - концепції ООП: запитання для співбесіди щодо успадкування
51) Що таке це ключове слово в java?
The це Ключове слово - це посилання на змінну, яка посилається на поточний об'єкт. У Java це ключове слово використовується по-різному. Його можна використовувати для посилання на поточні властивості класу, такі як методи екземпляра, змінна, конструктори тощо. Його також можна передати як аргумент у методи чи конструктори. Його також можна повернути з методу як поточний екземпляр класу.
Детальніше.
52) Яке основне використання цього ключового слова?
Існують наступні способи використання це ключове слово.
53) Чи можемо ми призначити посилання на це змінна?
Ні, це не можна призначити жодному значенню, оскільки воно завжди вказує на поточний об’єкт класу, і це остаточне посилання в Java. Однак, якщо ми спробуємо це зробити, буде показано помилку компілятора. Розглянемо наступний приклад.
public class Test { public Test() { this = null; System.out.println('Test class constructor called'); } public static void main (String args[]) { Test t = new Test(); } }
Вихід
Test.java:5: error: cannot assign a value to final variable this this = null; ^ 1 error
54) Можна це використовувати ключове слово для посилання на статичні члени?
Так, це ключове слово можна використовувати для посилання на статичні члени, оскільки це лише посилання на змінну, яка посилається на поточний об’єкт класу. Однак, як ми знаємо, немає необхідності отримувати доступ до статичних змінних через об’єкти, тому це не найкраща практика використовувати це для посилання на статичні члени. Розглянемо наступний приклад.
public class Test { static int i = 10; public Test () { System.out.println(this.i); } public static void main (String args[]) { Test t = new Test(); } }
Вихід
10
55) Як можна здійснити ланцюжок конструкторів за допомогою цього ключового слова?
Ланцюжок конструкторів дозволяє нам викликати один конструктор з іншого конструктора класу щодо поточного об’єкта класу. Ми можемо використовувати це ключове слово, щоб виконати ланцюжок конструктора в одному класі. Розглянемо наступний приклад, який ілюструє, як ми можемо використовувати це ключове слово для досягнення ланцюжка конструктора.
public class Employee { int id,age; String name, address; public Employee (int age) { this.age = age; } public Employee(int id, int age) { this(age); this.id = id; } public Employee(int id, int age, String name, String address) { this(id, age); this.name = name; this.address = address; } public static void main (String args[]) { Employee emp = new Employee(105, 22, 'Vikas', 'Delhi'); System.out.println('ID: '+emp.id+' Name:'+emp.name+' age:'+emp.age+' address: '+emp.address); } }
Вихід
ID: 105 Name:Vikas age:22 address: Delhi
56) Які переваги передачі цього в метод замість самого поточного об’єкта класу?
Як ми знаємо, це стосується поточного об’єкта класу, тому він має бути схожий на поточний об’єкт класу. Однак передача цього в метод замість поточного об’єкта класу може мати дві основні переваги.
- це кінцева змінна. Таким чином, цьому не можна призначити будь-яке нове значення, тоді як поточний об’єкт класу може бути не остаточним і його можна змінити.
- це можна використовувати в синхронізованому блоці.
57) Що таке спадщина?
Спадкування - це механізм, за допомогою якого один об'єкт набуває всіх властивостей і поведінки іншого об'єкта іншого класу. Він використовується для повторного використання коду та перевизначення методу. Ідея успадкування в Java полягає в тому, що ви можете створювати нові класи, побудовані на основі існуючих класів. Коли ви успадковуєте існуючий клас, ви можете повторно використовувати методи та поля батьківського класу. Крім того, ви також можете додавати нові методи та поля у свій поточний клас. Спадкування представляє зв’язок IS-A, який також відомий як зв’язок «батько-нащадок».
У Java існує п'ять типів успадкування.
- Однорівневе успадкування
- Багаторівневе успадкування
- Множинне успадкування
- Ієрархічне успадкування
- Гібридне успадкування
Множинне успадкування не підтримується в Java через клас.
Детальніше.58) Чому в Java використовується успадкування?
Нижче наведено кілька переваг використання успадкування в Java.
- Спадкування забезпечує повторне використання коду. Похідному класу не потрібно перевизначати метод базового класу, якщо йому не потрібно забезпечити конкретну реалізацію методу.
- Поліморфізм виконання не може бути досягнутий без використання успадкування.
- Ми можемо симулювати успадкування класів за допомогою об’єктів реального часу, що робить ООП більш реалістичними.
- Спадкування забезпечує приховування даних. Базовий клас може приховати деякі дані від похідного класу, зробивши його приватним.
- Перевизначення методу неможливо досягти без успадкування. За допомогою перевизначення методу ми можемо дати конкретну реалізацію деякого базового методу, що міститься в базовому класі.
59) Який клас є суперкласом для всіх класів?
Клас об’єкта є суперкласом усіх інших класів у Java.
60) Чому множинне успадкування не підтримується в java?
Щоб зменшити складність і спростити мову, множинне успадкування не підтримується в java. Розглянемо сценарій, де A, B і C є трьома класами. Клас C успадковує класи A і B. Якщо класи A і B мають однаковий метод, і ви викликаєте його з об’єкта дочірнього класу, виникне неоднозначність виклику методу класу A або B.
Оскільки помилки під час компіляції кращі, ніж помилки під час виконання, Java відображає помилку під час компіляції, якщо ви успадкуєте 2 класи. Отже, незалежно від того, чи є у вас той самий метод, чи інший, буде помилка часу компіляції.
class A{ void msg(){System.out.println('Hello');} } class B{ void msg(){System.out.println('Welcome');} } class C extends A,B{//suppose if it were Public Static void main(String args[]){ C obj=new C(); obj.msg();//Now which msg() method would be invoked? } }Перевірте зараз
Compile Time Error
61) Що таке агрегація?
Агрегацію можна визначити як зв’язок між двома класами, де агрегатний клас містить посилання на клас, яким він володіє. Агрегацію найкраще описати як a має відносини. Наприклад, сукупний клас Employee, що має різні поля, такі як вік, ім’я та зарплата, також містить об’єкт класу Address, який має різні поля, такі як Address-Line 1, City, State та pin-code. Іншими словами, можна сказати, що Employee (клас) має об’єкт класу Address. Розглянемо наступний приклад.
Адреса.java
public class Address { String city,state,country; public Address(String city, String state, String country) { this.city = city; this.state = state; this.country = country; } }
Employee.java
public class Emp { int id; String name; Address address; public Emp(int id, String name,Address address) { this.id = id; this.name = name; this.address=address; } void display(){ System.out.println(id+' '+name); System.out.println(address.city+' '+address.state+' '+address.country); } public static void main(String[] args) { Address address1=new Address('gzb','UP','india'); Address address2=new Address('gno','UP','india'); Emp e=new Emp(111,'varun',address1); Emp e2=new Emp(112,'arun',address2); e.display(); e2.display(); } }
Вихід
111 varun gzb UP india 112 arun gno UP india
62) Що таке композиція?
Зберігання посилання на клас в якомусь іншому класі називається композицією. Коли об’єкт містить інший об’єкт, якщо об’єкт, що міститься, не може існувати без існування об’єкта-контейнера, це називається композицією. Іншими словами, ми можемо сказати, що композиція є окремим випадком агрегації, яка представляє сильніший зв’язок між двома об’єктами. Приклад: клас містить студентів. Учень не може існувати без класу. Існує композиція між класом і учнями.
63) Яка різниця між агрегацією та композицією?
Агрегація представляє слабкий зв’язок, а композиція – сильний зв’язок. Наприклад, у велосипеда є індикатор (агрегат), а у велосипеда є двигун (композиція).
64) Чому Java не підтримує покажчики?
Покажчик - це змінна, яка посилається на адресу пам'яті. Вони не використовуються в Java, тому що вони небезпечні (незахищені) і складні для розуміння.
65) Що таке супер у java?
The супер Ключове слово в Java є посиланням на змінну, яка використовується для посилання на об’єкт безпосереднього батьківського класу. Щоразу, коли ви створюєте екземпляр підкласу, неявно створюється екземпляр батьківського класу, на який посилається змінна суперпосилання. Компілятор неявно викликає super() у конструкторі класу, якщо немає super або this.
class Animal{ Animal(){System.out.println('animal is created');} } class Dog extends Animal{ Dog(){ System.out.println('dog is created'); } } class TestSuper4{ public static void main(String args[]){ Dog d=new Dog(); } }Перевірте зараз
Вихід:
animal is created dog is createdДетальніше.
66) Як можна здійснити ланцюжок конструкторів за допомогою ключового слова super?
class Person { String name,address; int age; public Person(int age, String name, String address) { this.age = age; this.name = name; this.address = address; } } class Employee extends Person { float salary; public Employee(int age, String name, String address, float salary) { super(age,name,address); this.salary = salary; } } public class Test { public static void main (String args[]) { Employee e = new Employee(22, 'Mukesh', 'Delhi', 90000); System.out.println('Name: '+e.name+' Salary: '+e.salary+' Age: '+e.age+' Address: '+e.address); } }
Вихід
Name: Mukesh Salary: 90000.0 Age: 22 Address: Delhi
67) Яке основне використання ключового слова super?
Існують наступні способи використання ключового слова super.
- super можна використовувати для посилання на змінну примірника безпосереднього батьківського класу.
- super можна використовувати для виклику методу безпосереднього батьківського класу.
- super() можна використовувати для виклику конструктора безпосереднього батьківського класу.
68) Які відмінності між ключовим словом this і super?
Існують такі відмінності між ключовим словом this і super.
- Ключове слово super завжди вказує на контексти батьківського класу, тоді як це ключове слово завжди вказує на поточний контекст класу.
- Ключове слово super в основному використовується для ініціалізації змінних базового класу в конструкторі похідного класу, тоді як це ключове слово в основному використовується для розрізнення між локальними змінними та змінними екземплярів, коли їх передають у конструкторі класу.
- Супер і це має бути першим оператором усередині конструктора, інакше компілятор видасть помилку.
69) Який результат роботи наступної програми Java?
class Person { public Person() { System.out.println('Person class constructor called'); } } public class Employee extends Person { public Employee() { System.out.println('Employee class constructor called'); } public static void main (String args[]) { Employee e = new Employee(); } }
Вихід
Person class constructor called Employee class constructor called
Пояснення
Super() неявно викликається компілятором, якщо super() або this() не включено явно в конструктор похідного класу. Тому в цьому випадку спочатку викликається конструктор класу Person, а потім конструктор класу Employee.
70) Чи можна використовувати this() і super() у конструкторі?
Ні, оскільки this() і super() мають бути першими операторами в конструкторі класу.
приклад:
public class Test{ Test() { super(); this(); System.out.println('Test class object is created'); } public static void main(String []args){ Test t = new Test(); } }
Вихід:
Test.java:5: error: call to this must be first statement in constructor
71)Що таке клонування об'єктів?
Клонування об'єкта використовується для створення точної копії об'єкта. Метод clone() класу Object використовується для клонування об’єкта. The java.lang.Cloneable інтерфейс має бути реалізований класом, клон об’єкта якого ми хочемо створити. Якщо ми не реалізуємо інтерфейс Cloneable, метод clone() генерує CloneNotSupportedException.
protected Object clone() throws CloneNotSupportedExceptionДетальніше.
Основна Java - Концепції ООП: Перевантаження методів, запитання для співбесіди
72) Що таке перевантаження методу?
Перевантаження методів — це техніка поліморфізму, яка дозволяє нам створювати кілька методів з однаковою назвою, але різною сигнатурою. Ми можемо досягти перевантаження методу двома способами.
- Змінюючи кількість аргументів
- Змінюючи тип даних аргументів
Перевантаження методів підвищує читабельність програми. Перевантаження методів виконується для швидкого визначення програми.
Детальніше.73) Чому перевантаження методу неможливе шляхом зміни типу повернення в java?
У Java перевантаження методів неможливе шляхом зміни типу повернення програми через уникнення неоднозначності.
class Adder{ static int add(int a,int b){return a+b;} static double add(int a,int b){return a+b;} } class TestOverloading3{ public static void main(String[] args){ System.out.println(Adder.add(11,11));//ambiguity }}Перевірте зараз
Вихід:
Compile Time Error: method add(int, int) is already defined in class AdderДетальніше.
74) Чи можемо ми перевантажити методи, зробивши їх статичними?
Ні, ми не можемо перевантажити методи, просто застосувавши до них ключове слово static (кількість параметрів і типів однакова). Розглянемо наступний приклад.
public class Animal { void consume(int a) { System.out.println(a+' consumed!!'); } static void consume(int a) { System.out.println('consumed static '+a); } public static void main (String args[]) { Animal a = new Animal(); a.consume(10); Animal.consume(20); } }
Вихід
Animal.java:7: error: method consume(int) is already defined in class Animal static void consume(int a) ^ Animal.java:15: error: non-static method consume(int) cannot be referenced from a static context Animal.consume(20); ^ 2 errors
75) Чи можемо ми перевантажити метод main()?
Так, ми можемо мати будь-яку кількість основних методів у програмі Java за допомогою перевантаження методів.
Детальніше.76) Що таке перевантаження методу з просуванням типу?
Під підвищенням типу є перевантаження методу, ми маємо на увазі, що один тип даних може бути підвищений до іншого неявно, якщо не знайдено точної відповідності.
Як показано на наведеній вище діаграмі, байт можна змінити на short, int, long, float або double. Короткий тип даних можна змінити на int, long, float або double. Тип даних char може бути підвищений до int, long, float або double тощо. Розглянемо наступний приклад.
class OverloadingCalculation1{ void sum(int a,long b){System.out.println(a+b);} void sum(int a,int b,int c){System.out.println(a+b+c);} public static void main(String args[]){ OverloadingCalculation1 obj=new OverloadingCalculation1(); obj.sum(20,20);//now second int literal will be promoted to long obj.sum(20,20,20); } }Перевірте зараз
Вихід
40 60
77) Який результат роботи наступної програми Java?
class OverloadingCalculation3{ void sum(int a,long b){System.out.println('a method invoked');} void sum(long a,int b){System.out.println('b method invoked');} public static void main(String args[]){ OverloadingCalculation3 obj=new OverloadingCalculation3(); obj.sum(20,20);//now ambiguity } }
Вихід
OverloadingCalculation3.java:7: error: reference to sum is ambiguous obj.sum(20,20);//now ambiguity ^ both method sum(int,long) in OverloadingCalculation3 and method sum(long,int) in OverloadingCalculation3 match 1 error
Пояснення
Існує два методи, визначені з однаковою назвою, тобто сума. Перший метод приймає типи integer і long, тоді як другий метод приймає тип long і integer. Передані параметри: a = 20, b = 20. Ми не можемо сказати, який метод буде викликано, оскільки немає чіткої різниці між цілочисельним літералом і довгим літералом. Це випадок двозначності. Тому компілятор видасть помилку.
Основна Java - Концепції ООП: Запитання для співбесіди, що перекривають метод
78) Що таке перевизначення методу:
Якщо підклас забезпечує конкретну реалізацію методу, який уже надано його батьківським класом, це відомо як перевизначення методу. Він використовується для поліморфізму часу виконання та для реалізації методів інтерфейсу.
Правила перевизначення методу
- Метод повинен мати таке ж ім'я, як у батьківського класу.
- Метод повинен мати таку саму сигнатуру, як і в батьківському класі.
- Два класи повинні мати зв’язок IS-A між собою.
79) Чи можемо ми перевизначити статичний метод?
Ні, ви не можете перевизначити статичний метод, оскільки він є частиною класу, а не об’єкта.
80) Чому ми не можемо перевизначити статичний метод?
Це тому, що статичний метод є частиною класу, і він пов’язаний з класом, тоді як метод екземпляра пов’язаний з об’єктом, а статичний отримує пам’ять в області класу, а екземпляр отримує пам’ять у купі.
81) Чи можемо ми перевизначити перевантажений метод?
Так.
82) Різниця між перевантаженням і перевизначенням методу.
Перевантаження методу | Перевизначення методу |
---|---|
1) Перевантаження методів підвищує читабельність програми. | Перевизначення методу забезпечує конкретну реалізацію методу, яка вже надається його суперкласом. |
2) Перевантаження методів відбувається всередині класу. | Перевизначення методу відбувається у двох класах, між якими є зв’язок IS-A. |
3) У цьому випадку параметри повинні відрізнятися. | При цьому параметри повинні бути однаковими. |
83) Чи можемо ми перевизначити приватні методи?
Ні, ми не можемо перевизначити приватні методи, оскільки область приватних методів обмежена класом, і ми не можемо отримати до них доступ поза класом.
84) Чи можемо ми змінити область перевизначеного методу в підкласі?
Так, ми можемо змінити область перевизначеного методу в підкласі. Однак ми повинні зауважити, що ми не можемо зменшити доступність методу. При зміні доступності методу необхідно звернути увагу на наступний момент.
- Приватний можна змінити на захищений, загальнодоступний або за замовчуванням.
- Захищений можна змінити на загальнодоступний або за замовчуванням.
- Типове значення можна змінити на публічне.
- Публіка завжди буде публічною.
85) Чи можемо ми змінити пункт throws методу суперкласу, перевизначаючи його в підкласі?
Так, ми можемо змінити пункт throws методу суперкласу, перевизначаючи його в підкласі. Однак є деякі правила, яких слід дотримуватися під час перевизначення у випадку обробки винятків.
- Якщо метод суперкласу не оголошує виняток, перевизначений метод підкласу не може оголосити перевірений виняток, але він може оголосити неперевірений виняток.
- Якщо метод суперкласу оголошує виняток, перевизначений метод підкласу може оголосити те саме, виняток підкласу або відсутність винятку, але не може оголосити батьківський виняток.
86) Який результат роботи наступної програми Java?
class Base { void method(int a) { System.out.println('Base class method called with integer a = '+a); } void method(double d) { System.out.println('Base class method called with double d ='+d); } } class Derived extends Base { @Override void method(double d) { System.out.println('Derived class method called with double d ='+d); } } public class Main { public static void main(String[] args) { new Derived().method(10); } }
Вихід
Base class method called with integer a = 10
Пояснення
Метод() перевантажено в класі Base, тоді як він похідний від класу Derived із типом double як параметр. У виклику методу передається ціле число.
87) Чи можна мати віртуальні функції в Java?
Так, усі функції в Java віртуальні за замовчуванням.
88) Що таке коваріантний тип повернення?
Тепер, починаючи з java5, можна перевизначити будь-який метод, змінивши тип повернення, якщо типом повернення методу перевизначення підкласу є тип підкласу. Він відомий як коваріантний тип повернення. Коваріантний тип повернення вказує, що тип повернення може змінюватися в тому ж напрямку, що й підклас.
class A{ A get(){return this;} } class B1 extends A{ B1 get(){return this;} void message(){System.out.println('welcome to covariant return type');} public static void main(String args[]){ new B1().get().message(); } }Перевірте зараз
Output: welcome to covariant return typeДетальніше.
89) Який результат роботи наступної програми Java?
class Base { public void baseMethod() { System.out.println('BaseMethod called ...'); } } class Derived extends Base { public void baseMethod() { System.out.println('Derived method called ...'); } } public class Test { public static void main (String args[]) { Base b = new Derived(); b.baseMethod(); } }
Вихід
Derived method called ...
Пояснення
Метод базового класу, тобто baseMethod() перевизначено в похідному класі. У тестовому класі посилальна змінна b (типу базового класу) посилається на примірник похідного класу. Тут поліморфізм часу виконання досягається між класом Base і Derived. Під час компіляції наявність методу baseMethod перевіряється в базовому класі. Якщо він присутній, програма скомпільована, інакше буде показано помилку компілятора. У цьому випадку baseMethod присутній у класі Base; тому його скомпільовано успішно. Однак під час виконання перевіряється, чи базовий метод було замінено похідним класом, якщо так, тоді викликається метод похідного класу, інакше викликається метод базового класу. У цьому випадку клас Derived перевизначає базовий метод; отже, викликається метод похідного класу.
Ядро Java – концепції ООП: остаточне ключове слово, запитання для співбесіди
90) Що таке кінцева змінна?
У Java кінцева змінна використовується для обмеження користувача в її оновленні. Якщо ми ініціалізуємо кінцеву змінну, ми не зможемо змінити її значення. Іншими словами, ми можемо сказати, що кінцева змінна, яка була присвоєна значенню, ніколи не може бути змінена після цього. Остаточна змінна, якій не присвоєно жодного значення, може бути присвоєна лише через конструктор класу.
class Bike9{ final int speedlimit=90;//final variable void run(){ speedlimit=400; } public static void main(String args[]){ Bike9 obj=new Bike9(); obj.run(); } }//end of classПеревірте зараз
Output:Compile Time ErrorДетальніше.
91) Що таке кінцевий метод?
Якщо ми змінюємо будь-який метод на кінцевий метод, ми не можемо його перевизначити. Детальніше.
class Bike{ final void run(){System.out.println('running');} } class Honda extends Bike{ void run(){System.out.println('running safely with 100kmph');} public static void main(String args[]){ Honda honda= new Honda(); honda.run(); } }Перевірте зараз
Output:Compile Time Error
92) Що таке підсумковий клас?
Якщо ми робимо будь-який клас остаточним, ми не можемо успадкувати його жодному з підкласів.
final class Bike{} class Honda1 extends Bike{ void run(){System.out.println('running safely with 100kmph');} public static void main(String args[]){ Honda1 honda= new Honda1(); honda.run(); } }Перевірте зараз
Output:Compile Time ErrorДетальніше.
93) Що таке кінцева порожня змінна?
Кінцева змінна, не ініціалізована під час оголошення, відома як кінцева порожня змінна. Ми не можемо безпосередньо ініціалізувати кінцеву порожню змінну. Замість цього ми повинні ініціалізувати його за допомогою конструктора класу. Це корисно в тому випадку, коли користувач має деякі дані, які не повинні бути змінені іншими, наприклад номер PAN. Розглянемо такий приклад:
class Student{ int id; String name; final String PAN_CARD_NUMBER; ... }Детальніше.
94) Чи можемо ми ініціалізувати остаточну порожню змінну?
Так, якщо він не є статичним, ми можемо ініціалізувати його в конструкторі. Якщо це статична пуста кінцева змінна, її можна ініціалізувати лише в статичному блоці. Детальніше.
95) Чи можете ви оголосити основний метод як остаточний?
Так, ми можемо оголосити основний метод як public static final void main(String[] args){}.
96) Який результат роботи наступної програми Java?
class Main { public static void main(String args[]){ final int i; i = 20; System.out.println(i); } }
Вихід
20
Пояснення
Оскільки i є пустою кінцевою змінною. Його можна ініціалізувати лише один раз. Ми ініціалізували його на 20. Тому буде надруковано 20.
97) Який результат роботи наступної програми Java?
class Base { protected final void getInfo() { System.out.println('method of Base class'); } } public class Derived extends Base { protected final void getInfo() { System.out.println('method of Derived class'); } public static void main(String[] args) { Base obj = new Base(); obj.getInfo(); } }
Вихід
Derived.java:11: error: getInfo() in Derived cannot override getInfo() in Base protected final void getInfo() ^ overridden method is final 1 error
Пояснення
Метод getDetails() є остаточним; тому його не можна перевизначати в підкласі.
98) Чи можемо ми оголосити конструктор як остаточний?
Конструктор ніколи не може бути оголошений як остаточний, оскільки він ніколи не успадковується. Конструктори не є звичайними методами; отже, немає сенсу оголошувати конструктори як final. Однак, якщо ви спробуєте це зробити, компілятор видасть помилку.
99) Чи можемо ми оголосити інтерфейс остаточним?
Ні, ми не можемо оголосити інтерфейс як остаточний, оскільки інтерфейс має бути реалізований деяким класом, щоб забезпечити його визначення. Тому немає сенсу робити інтерфейс остаточним. Однак, якщо ви спробуєте це зробити, компілятор покаже помилку.
100) Яка різниця між кінцевим методом і абстрактним методом?
Основна відмінність між методом final і абстрактним методом полягає в тому, що абстрактний метод не може бути остаточним, оскільки нам потрібно перевизначити їх у підкласі, щоб дати його визначення.