-
„Szedd szét”
public static void main(String args[]).Az egyik népszerű java interjúkérdés pályakezdőknek, és nagyon egyszerű.
-
publicegy hozzáférés módosító. Ezzel a módszerrel határozzuk meg a hozzáférést. Itt a módosító „nyilvános”, tehát bármely osztály hozzáférhet ehhez a metódushoz. -
static. Ez a Java kulcsszó azt jelenti, hogy ezt a módszert használjuk anélkül, hogy egy osztály új objektumát hoznánk létre. -
Voida metódus visszatérési típusa. Ez azt jelenti, hogy a metódus nem ad vissza semmilyen értéket. -
maina módszer neve. A JVM „ismeri” egy alkalmazás belépési pontjaként (adott aláírással kell rendelkeznie).Mainegy olyan módszer, ahol a fő végrehajtás történik. -
String args[]. Ez a fő metódusnak átadott paraméter. Itt vannak a String típusú argumentumok, amelyeket a Java-alkalmazása futtatásakor elfogad. Ezeket beírhatja a terminálba.
-
-
Mi a különbség
equals()a és között==?Először is a „
==” egy operátor, mígequals()egy metódus.==A referencia-összehasonlításhoz operátort (vagy cím-összehasonlításhoz),equals()a tartalom-összehasonlításhoz pedig módszert használunk . Ez azt jelenti, hogy==ellenőrzi, hogy mindkét objektum ugyanarra a memóriahelyre mutat-e, miközbenequals()összehasonlítja az objektumok értékeit. -
Futtathatunk-e programot
main()metódus nélkül?Sok alapvető Java interjúkérdés nagyon egyszerű. Mint ez. A válasz tehát rövid: igen, megtehetjük. Például megtehetjük statikus blokk segítségével.
Statikus blokk segítségével inicializálhatja a statikus adattagot.
mainA metódus előtt, az osztálybetöltéskor kerül végrehajtásra .class Example{ Static{ System.out.println("static block is invoked"); } public static void main(String args[]){ System.out.println("Now main method"); } }A kimenet a következő:
static block is invoked Now main method Mi a helyzet a fő módszer teljes hiányával? Ha egy közönséges osztályt a main metódus nélkül próbál meg futtatni, a következő hibaüzenetet kapja: A fő metódus nem található a teszt osztályban, kérjük, határozza meg a fő metódust a következőképpen: public static void main (String [] args) vagy JavaFX alkalmazás osztálynak ki kell terjesztenie a javafx.application.Application-t. Maga a hiba azt mondja, hogy ha ez egy JavaFX alkalmazás, és az osztály a javafx.application.Application-ből származik, akkor lehetséges.
-
Mi az
immutableobjektum? Tudszimmutableobjektumot létrehozni?immutableAz osztály objektumai létrehozásuk után nem módosíthatók . Tehát ha egyszer létrehozta őket, nem tudja megváltoztatni őket. Ha megpróbálja módosítaniImmutableaz objektumot, új objektumot (klónt) kap, és ezt a klónt módosítja a létrehozás során.Jó példa erre , hogy Java nyelven
Stringvan .immutableEz azt jelenti, hogy magát az objektumot nem módosíthatja, de az objektumra mutató hivatkozást megváltoztathatja. -
Hány objektum jön létre a következő kódban?
A Java technikai interjúkérdések egyike, amely a 4-et helyettesíti.
String s1="Hello"; String s2="Hello"; String s3="Hello";A válasz „csak egy”, mert a Java-nak van String Pool. Amikor létrehozunk egy String objektumot a new() operátor használatával, az új objektumot hoz létre a kupacmemóriában. Ha String literális szintaxist használunk, mint a példánkban, akkor visszaadhat egy meglévő objektumot a String készletből, ha az már létezik.
-
Hány objektum jön létre a következő kódban?
String s = new String("Hello");2 objektum van. Az egyik a string konstans készletben van (ha még nincs jelen), a másik pedig a kupacban van.
-
Mi a különbség a Java
StringosztályaiStringBuilderésStringBufferosztályai között?Ott van az egyik vezető java interjúkérdésekben.
Először is
Stringegy megváltoztathatatlan osztály. Ez azt jelenti, hogy a tartalmat a létrehozás után nem módosíthatja. A WhileStringBufferésStringBuilderváltoztatható osztályok, így később megváltoztathatod őket. Ha megváltoztatjukStringaz objektum tartalmát, az új karakterláncot hoz létre, így az eredetit nem módosítja. EzértStringBufferjobb a teljesítmény -val, mint -valString.A fő különbség
StringBuffera és aStringBuildermetódusok közöttStringBufferszinkronizált, mígStringBuildera metódusai nem. -
Van valami különbség abban,
Stringhogy a literal és az operátor használatával jött létrenew()?Van. Ha létrehozunk egy karakterláncot az operátorral
new(), akkor az megjelenik a kupacban és a karakterlánc-készletben (ha még nincs jelen). Ha literált használString, akkor az a karakterlánckészletben jön létre (ha még nincs jelen). A string pool egy tárolóterület a kupacban, amely karakterlánc-literálokat tárol. -
Felülírható
privatevagystaticmetódus Java-ban?Az egyik java trükkös interjúkérdés újoncoknak. Javaban tényleg nem lehet felülírni
privatevagy metódusolni.staticA metódusok nem írhatók felül,
privatemert a privát hozzáférés-meghatározó hatóköre csak az osztályon belül van. Ha felül akarsz írni valamit, akkor legyen szülői és gyermeki osztály. Ha a szuperosztály metódusaprivate, akkor a gyermekosztály nem használhatja, és a gyermekosztály metódusai új metódusként lesznek kezelve (nem felülírva).StaticA metódusokat sem lehet felülírni, mertstatica metódusok magának az osztálynak a részét képezik, és nem az osztály egyetlen objektumának sem. Természetesen ugyanazt a metódust ugyanazzal az aláírással deklarálhatjastatica gyermekosztályokban, de a rendszer új metódusként kezeli őket. -
Különbség
Abstract Classés közöttInterfaceAz egyik népszerű java fejlesztői interjúkérdés, amely az OOP elvein alapul. Először is, a Java-ban
interfaceviselkedést határoz meg ésabstract classhierarchiát hoz létre.Absztrakt osztály Felület Lehetséges egy metódustörzs (nem absztrakt metódusok) az absztrakt osztályban Az interfésznek csak absztrakt metódusai lehetnek. A Java 8-ban vagy újabb verziókban lehetővé vált az alapértelmezett metódusok meghatározása és közvetlenül a felületen való implementálása. Ezenkívül a Java 8 interfészei statikus metódusokkal rendelkezhetnek. A példányváltozók lehetnek absztrakt osztályban Egy interfész nem tartalmazhat példányváltozókat. A kivitelezők engedélyezettek A felületnek nem lehet konstruktora. A statikus módszerek megengedettek A statikus módszerek nem megengedettek Az osztálynak csak egy absztrakt szülője lehet Egy interfész különböző osztályokat valósíthat meg Az absztrakt osztály biztosíthatja az interfész megvalósítását. Az interfész nem tudja biztosítani az absztrakt osztály megvalósítását. Egy absztrakt osztály kiterjesztheti a többi Java osztályt és több Java interfészt implementálhat. Egy interfész csak a másik Java interfészt bővítheti. Egy absztrakt Java osztálynak lehetnek privát és védett osztálytagjai A Java felület tagjai alapértelmezés szerint nyilvánosak -
Deklarálhatunk-e
staticváltozókat és metódusokat egyabstractosztályban?Igen, lehet
staticváltozókat és metódusokat deklarálni aabstractmetódusban. A statikus kontextus eléréséhez nincs szükség objektum létrehozására.abstractÍgy az osztály nevének használatával hozzáférhetünk az osztályon belül deklarált statikus kontextushozabstract. -
Milyen típusú memóriaterületeket foglal le a JVM?
Az osztályterület osztályonkénti struktúrákat tárol, például futásidejű állandó készletet, mezőket, metódusadatokat és a metódusokhoz tartozó összes kódot.
A kupac egy futásidejű adatterület, ahol memória van lefoglalva az objektumokhoz.
Stack üzletek kereteket. Lokális változókat és részeredményeket tartalmaz, részt vesz a metódusok meghívásában és visszatérésében. Minden szálhoz tartozik egy privát JVM-verem, amely a szállal egy időben jön létre. Minden alkalommal új keret jön létre, amikor egy metódust meghívnak. Egy keret megsemmisül, amikor a metódushívása befejeződik.
A Program Counter Register az éppen végrehajtott Java virtuálisgép-utasítás címét tartalmazza.
A Native Method Stack tartalmazza az alkalmazásban használt összes natív metódust.
-
Miért nem engedélyezett a többszörös öröklődés a Java-ban?
Tényleg bonyolult lenne. Képzeljünk el három osztályt
A,B, ésCésCörökliAésB. Nos,AésBaz osztályoknak ugyanaz a metódusuk van, és egy gyermek osztály objektumból hívod meg... Melyik?A's vagyB's? Itt van kétértelműség.Ha két osztályt próbál örökölni, a Java fordítási idő hibát jelez.
-
Túlterhelhetjük a
main()módszert?Természetesen sok módszert használhatunk
mainJava programokban metódus túlterhelés használatával. Próbáld ki! -
Deklarálhatunk-e konstruktort nek
final?Dehogy. Egy konstruktor nem deklarálható a-nak,
finalmert nem örökölhető. Tehát értelmetlen a konstruktorokat nek nyilvánítanifinal. Ha azonban megpróbálja megtenni, a Java fordító hibát jelez. -
Deklarálhatunk egy interfészt mint
final?Nem, ezt nem tehetjük meg. Interfész nem lehet
finalazért, mert az interfészt valamilyen osztálynak kellene megvalósítania a definíciója szerint. Ezért nincs értelme interfészt készítenifinal. Ha azonban megpróbálja ezt megtenni, a fordító hibát jelez. -
Mi a különbség
static bindinga és közöttdynamic binding?A
bindingfordítási időben a fordító által feloldhatótstatickorai kötésnek nevezzük.Bindingaz összesstatic,privateésfinalmetódus közül fordítási időben történik.A fordítóprogramban
Dynamic bindingnem lehet kiválasztani a meghívandó metódust. A felülírás tökéletes példa arra , hogydynamic binding. A felülbírálásban mind a szülő, mind a gyermek osztályok ugyanazt a módszert alkalmazzák.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(); } } -
Hogyan készítsünk csak olvasható osztályt Java-ban?
Ezt úgy teheti meg, hogy az osztály összes mezőjét priváttá teszi. A csak olvasható osztálynak csak getter metódusai vannak, amelyek visszaadják az osztály privát tulajdonát a metódusnak
main. Ezt a tulajdonságot nem tudja módosítani, ennek oka a setters metódus hiánya.public class HockeyPlayer{ private String team ="Maple leaf"; public String getTeam(){ return team; } } -
Hogyan készítsünk csak írható osztályt Java-ban?
Ismét be kell töltenie az osztály összes mezőjét
private. Most a csak írható osztálynak csak setter metódusokat kell tartalmaznia, gettereket nem. Ezért nem tudjuk elolvasni az osztály tulajdonságait.public class HockeyPlayer{ private String team; public void setTeam(String college){ this.team = team; } } -
Minden
tryblokkot egy blokknak kell követniecatch, nem?Dehogy. Ez nem létszükséglet. Mindegyik
tryblokk lehetcatchblokk nélkül. Utána jöhet akár a catchblock, akár a végleges blokk, vagy akár ezek nélkül is.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..."); } } }Kimenet:
Exception in thread main java.lang.ArithmeticException:/ by zero the other part of the program...
Még egy példa: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"); } } }Kimenet:
test
PS: A Java 8 előtt az interfészek metódusai csak absztraktak lehettek. A Java 8-ban vagy újabb verziókban lehetővé vált az alapértelmezett metódusok meghatározása és közvetlenül a felületen való implementálása. -
Mi a különbség a kulcsszavak
throwés athrowskulcsszavak között?Throwskivétel deklarálására szolgál, így atry-catchblokkhoz hasonlóan működik.ThrowA kulcsszó kifejezetten kivételt dob egy metódusból vagy bármely más kódblokkból.Throwután következik az osztály példányaException, a dobásokat pedig kivétel osztálynevek követik.Throwa metódus törzsében egy kivétel dobására szolgál.Throwsmetódus aláírásban használatos a metódusban jelenlévő utasításokban előforduló kivételek deklarálására.Egyszerre egy kivételt lehet dobni, de több kivételt is kezelhet
throwa kulcsszó használatával deklarálva. Több kivételt is deklarálhat, pl.public void method()throws IOException,SQLException.
GO TO FULL VERSION