-
„Разглобяване“
public static void main(String args[]).Един от популярните въпроси за интервю за Java за първокурсници и много лесен.
-
publicе модификатор на достъп. Използваме го, за да посочим достъпа до този метод. Тук модификаторът е „публичен“, така че всеки клас има достъп до този метод. -
static. Тази ключова дума на Java означава, че използваме този метод, без да създаваме нов обект от клас. -
Voidе типът връщане на метода. Това означава, че методът не връща ниHowва стойност. -
mainе името на метода. JVM го „познава“ като входна точка към приложение (трябва да има конкретен подпис).Mainе метод, при който се извършва основното изпълнение. -
String args[]. Това е параметърът, предаван на главния метод. Тук имаме аргументите от тип String, които вашето Java приложение приема, когато го стартирате. Можете да ги въведете на терминала.
-
-
Каква е разликата между
equals()и==?Първо, „
==“ е оператор, докатоequals()е метод. Ние използваме==оператор за сравнение на справки (or сравнение на addressи) иequals()метод за сравнение на съдържание. Това означава, че==проверява дали и двата обекта сочат към едно и също място в паметта, докатоequals()сравнява стойностите в обектите. -
Можем ли да изпълним програма без
main()метод?Много въпроси за основно интервю за Java са наистина лесни. Като този. Така че краткият отговор е: да, можем. Например можем да го направим с помощта на статичен блок.
Можете да използвате статичен блок, за да инициализирате члена на статичните данни. Изпълнява се преди
mainметода, по време на зареждане на класа.class Example{ Static{ System.out.println("static block is invoked"); } public static void main(String args[]){ System.out.println("Now main method"); } }Резултатът е:
static block is invoked Now main method Какво ще кажете за пълното отсъствие на главния метод? Ако се опитате да стартирате обикновен клас без основния метод изобщо, получавате следващата грешка: Главният метод не е намерен в класа Тест, моля, дефинирайте основния метод като: public static void main (String [] args) or JavaFX приложение класът трябва да разширява javafx.application.Application. Самата грешка казва, че ако това е JavaFX приложение и класът е наследен от javafx.application.Application, тогава е възможно.
-
Какво е
immutableобект? Можете ли да създадетеimmutableобект?Не можете да променяте обекти от
immutableклас след създаването им. Така че след като ги създадете, не можете да ги промените. Ако се опитате да модифициратеImmutableобект, получавате нов обект (клонинг) и променяте този клонинг, докато създавате.Добър пример е
String, той еimmutableв Java. Това означава, че не можете да промените самия обект, но можете да промените препратката към обекта. -
Колко обекта са създадени в следния code?
Един от въпросите за техническо интервю за Java, който замества #4.
String s1="Hello"; String s2="Hello"; String s3="Hello";Отговорът е „само един“, защото Java има String Pool. Когато създаваме String обект с помощта на оператора new(), той създава нов обект в хийп паметта. Ако използваме синтаксис на String литерал, Howто в нашия пример, той може да върне съществуващ обект от String пула, ако вече съществува.
-
Колко обекта са създадени в следния code?
String s = new String("Hello");Има 2 обекта. Единият е в низов константен пул (ако вече не присъства), а другият е в купчината.
-
Каква е разликата между и
Stringкласове в Java?StringBuilderStringBufferИма един от лидерите в най-добрите въпроси за интервю за Java.
На първо място
Stringе неизменен клас. Това означава, че не можете да променяте съдържанието му, след като бъде създадено. ДокатоStringBufferиStringBuilderса променливи класове, така че можете да ги промените по-късно. Ако променим съдържанието наStringобекта, той създава нов низ, следователно не променя оригиналния. Ето защо представянето сStringBufferе по-добро, отколкото сString.Основната разлика между
StringBufferиStringBuilderе, чеStringBufferметодите са синхронизирани, докатоStringBuilderметодите не са. -
Има ли няHowва разлика в
Stringтова, че е създадено с помощта на литерал и сnew()оператор?Има. Ако създадем низ с
new()оператора, той се появява в купчината и в пула от низове (ако вече не присъства). Ако създадетеStringс помощта на литерал, той се създава в пула от низове (ако вече не присъства). Пулът от низове е зона за съхранение в купчината, която съхранява низови литерали. -
Можете ли да замените
privateorstaticметод в Java?Един от сложните въпроси за интервю за Java за новобранци. Наистина не можете да замените
privateorstaticметод в Java.Не можете да замените
privateметодите, защото обхватът на спецификатора за частен достъп е само в рамките на класа. Когато ще замените нещо, трябва да имаме клас родител и дете. Ако методът на суперклас еprivate, дъщерният клас не може да го използва и методите в дъщерния клас ще се третират като нови методи (без да се отменят).Staticметодите също не могат да бъдат отменени, тъй катоstaticметодите са част от самия клас, а не част от който и да е обект на класа. Разбира се, можете да декларирате същияstaticметод със същия подпис в дъщерни класове, но отново, те ще бъдат третирани като нови методи. -
Разлика между
Abstract ClassиInterfaceЕдин от популярните въпроси за интервю за разработчици на Java, който се отнася за принципите на ООП. На първо място, в Java
interfaceдефинира поведение иabstract classсъздава йерархия.Абстрактен клас Интерфейс Възможно е да има тяло на метод (неабстрактни методи) в абстрактен клас Интерфейсът може да има само абстрактни методи. В Java 8 or по-нова стана възможно да се дефинират методи по подразбиране и да се внедрят директно в интерфейса. Освен това интерфейсите в Java 8 могат да имат статични методи. Променливите на екземпляра могат да бъдат в абстрактен клас Един интерфейс не може да има променливи на екземпляр. Допускат се конструктори Интерфейсът не може да има конструктор. Статичните методи са разрешени Статичните методи не са разрешени Класът може да има само един абстрактен родител Един интерфейс може да реализира различни класове Абстрактният клас може да осигури реализацията на интерфейса. Интерфейсът не може да осигури имплементацията на абстрактния клас. На абстрактен клас е разрешено да разширява другия Java клас и да прилага множество Java интерфейси. На интерфейс е разрешено да разширява само другия Java интерфейс. Абстрактен клас на Java може да има частни и защитени членове на класа Членовете на Java интерфейс са публични по подразбиране -
Можем ли да декларираме
staticпроменливи и методи вabstractклас?Да, възможно е да се декларират
staticпроменливи и методи вabstractmethod. Няма изискване да се направи обект за достъп до статичния контекст. Така че ни е разрешен достъп до статичния контекст, деклариран вътре вabstractкласа, като използваме името наabstractкласа. -
Какви типове области на паметта се разпределят от JVM?
Class Area съхранява структури за всеки клас, например пул от константи по време на изпълнение, полета, данни за методи и целия code за методи.
Heap е област с данни по време на изпълнение, където паметта е разпределена за обектите.
Стекът съхранява рамки. Той съдържа локални променливи и частични резултати и участва в извикването и връщането на метода. Всяка нишка има частен JVM стек, създаден по същото време като нишката. Нов кадър се създава всеки път, когато се извиква метод. Кадър се унищожава, когато извикването на метода му завърши.
Регистърът на програмния брояч съдържа address на инструкцията за виртуална машина на Java, която се изпълнява в момента.
Native Method Stack съдържа всички собствени методи, които се използват в приложението.
-
Защо множественото наследяване не е разрешено в java?
Би било наистина сложно. Представете си три класа
A,BиCиCнаследяваAиB. СегаAиBкласовете имат същия метод и го извиквате от обект на дъщерен клас... Кой?Aе orBе? Тук имаме неяснота.ако се опитате да наследите два класа, Java изобразява грешка при компorране.
-
Можем ли да претоварим
main()метода?Разбира се, разрешено ни е да имаме много
mainметоди в Java програма чрез използване на претоварване на методи. Опитай го! -
Можем ли да декларираме конструктор като
final?не Конструкторът не може да бъде деклариран като,
finalзащото не може да бъде наследен. Така че е безсмислено да се декларират конструктори катоfinal. Ако обаче се опитате да го направите, Java компилаторът ви извежда грешка. -
Можем ли да декларираме интерфейс като
final?Не, не можем да направим това. Интерфейс не може да бъде
final, защото интерфейсът трябва да бъде имплементиран от няHowъв клас според неговата дефиниция. Следователно няма смисъл да се прави интерфейсfinal. Ако обаче се опитате да го направите, компилаторът ще покаже грешка. -
Каква е разликата между
static bindingиdynamic binding?Което
bindingможе да бъде разрешено по време на компorране от компилатора се извикваstaticor ранно свързване.Bindingна всичкиstatic,privateиfinalметоди се извършва по време на компorране.В
Dynamic bindingкомпилатора не може да се избере метод, който да бъде извикан. Замяната е перфектен пример заdynamic binding. При замяна и родителските, и дъщерните класове имат един и същ метод.Static Binding class Cat{ private void talk() {System.out.println("cat is mewing..."); } public static void main(String args[]){ Cat cat=new Cat(); cat.talk(); } } Dynamic Binding class Animal{ void talk(){ System.out.println("animal is talking..."); } } class Cat extends Animal{ void talk(){ System.out.println("cat is talking..."); } public static void main(String args[]){ Animal animal=new Cat(); animal.talk(); } } -
Как да създадете клас само за четене в Java?
Можете да го направите, като направите всички полета на класа лични. Класът само за четене има само методи за получаване, които връщат частната собственост на класа на
mainметода. Не можете да промените това свойство, причината е липсата на метод за настройки.public class HockeyPlayer{ private String team ="Maple leaf"; public String getTeam(){ return team; } } -
Как да създадете клас само за запис в Java?
Отново трябва да направите всички полета на класа
private. Сега вашият клас само за писане трябва да има само методи за настройка и ниHowви гетери. Следователно не можем да прочетем свойствата на класа.public class HockeyPlayer{ private String team; public void setTeam(String college){ this.team = team; } } -
Всеки
tryблок трябва да бъде последван отcatchблок, нали?не Не е необходимост. Всеки
tryблок може да бъде безcatchблок. Може да бъде последвано or от catchblock, or от finally block, or дори без тях.public class Main{ public static void main(String []args){ try{ int variable = 1; System.out.println(variable/0); } finally { System.out.println("the other part of the program..."); } } }Изход:
Exception in thread main java.lang.ArithmeticException:/ by zero the other part of the program...
Още един пример:class Main { public static void main(String[] args) throws IOException { try(InputStreamReader inputStreamReader = new InputStreamReader(System.in); BufferedReader reader = new BufferedReader(inputStreamReader)){ System.out.println("test"); } } }Изход:
test
PS: Преди Java 8 методите в интерфейсите можеха да бъдат само абстрактни. В Java 8 or по-нова стана възможно да се дефинират методи по подразбиране и да се внедрят директно в интерфейса. -
Каква е разликата между
throwиthrowsключови думи?Throwsсе използва за деклариране на изключение, така че работи подобно наtry-catchблока.Throwключовата дума се използва за хвърляне на изключение изрично от метод or друг блок от code.Throwе последван от екземпляр наExceptionклас и throws е последван от имена на класове на изключения.Throwсе използва в тялото на метода за хвърляне на изключение.Throwsсе използва в сигнатура на метод за деклариране на изключенията, които могат да възникнат в изразите, присъстващи в метода.Разрешено е да хвърляте едно изключение наведнъж, но можете да обработвате множество изключения, като ги декларирате с
throwключова дума. Можете да декларирате множество изключения, напр.,public void method()throws IOException,SQLException.
GO TO FULL VERSION