logo

300 základných otázok na pohovor Java | Set 1

90% istota otázok na pohovore

Tu je zoznam 300 základných otázok na pohovor v jazyku Java. Ak vám bola položená nejaká základná otázka na pohovor v jazyku Java, zverejnite ju v sekcii s otázkami. Uisťujeme vás, že tu nájdete 90 % často kladených otázok a odpovedí na pohovor.

Odpovede na otázky týkajúce sa Core Java rozhovoru sú krátke a vecné. Základné otázky rozhovorov v jazyku Java sú kategorizované v otázkach Základy rozhovorov v jazyku Java, otázky týkajúce sa rozhovoru OOP, otázky týkajúce sa rozhovoru s reťazcom, otázky rozhovorov s viacerými vláknami, otázky týkajúce sa zberu pohovorov, otázky týkajúce sa rozhovoru JDBC atď.


1 2 3 4 5

Core Java: Základy Java Interview Otázky


1) Čo je Java?

Java je na vysokej úrovni, objektovo orientovaný , robustný, bezpečný programovací jazyk, platformovo nezávislý, vysoko výkonný, viacvláknový a prenosný programovací jazyk. Bol vyvinutý spoločnosťou James Gosling v júni 1991. Môže byť tiež známa ako platforma, pretože poskytuje svoje vlastné JRE a API.


2) Aké sú rozdiely medzi C++ a Java?

Rozdiely medzi C++ a Java sú uvedené v nasledujúcej tabuľke.

Porovnávací index C++Java
Platformovo nezávislé C++ je závislé od platformy.Java je nezávislá na platforme.
Používa sa hlavne na C++ sa používa hlavne na programovanie systémov.Java sa používa hlavne na programovanie aplikácií. Je široko používaný v okenných, webových, podnikových a mobilných aplikáciách.
Cieľ dizajnu C++ bol navrhnutý pre programovanie systémov a aplikácií. Išlo o rozšírenie C programovací jazyk .Java bola navrhnutá a vytvorená ako interpret pre tlačové systémy, ale neskôr bola rozšírená ako podpora sieťových výpočtov. Bol navrhnutý s cieľom byť ľahko použiteľný a dostupný pre širšie publikum.
Ísť do C++ podporuje príkaz goto.Java nepodporuje príkaz goto.
Viacnásobné dedičstvo C++ podporuje viacnásobnú dedičnosť.Java nepodporuje viacnásobné dedenie prostredníctvom triedy. Dá sa to dosiahnuť tým rozhrania v jazyku Java .
Preťaženie operátora C++ podporuje preťaženie operátora .Java nepodporuje preťaženie operátora.
Ukazovatele C++ podporuje ukazovatele . Ukazovateľový program môžete napísať v C++.Java interne podporuje ukazovateľ. Ukazovací program však nemôžete napísať v jazyku Java. Znamená to, že java má obmedzenú podporu ukazovateľov v jazyku Java.
Kompilátor a tlmočník C++ používa iba kompilátor. C++ sa kompiluje a spúšťa pomocou kompilátora, ktorý prevádza zdrojový kód na strojový kód, takže C++ je závislý od platformy.Java používa kompilátor aj tlmočník. Zdrojový kód Java sa v čase kompilácie skonvertuje na bajtový kód. Interpret vykoná tento bajtový kód za behu a vytvorí výstup. Java je interpretovaná preto, že je nezávislá na platforme.
Call by Value a Call podľa referencie C++ podporuje volanie podľa hodnoty aj volanie podľa odkazu.Java podporuje len volanie podľa hodnoty. V jave nie je žiadne volanie odkazom.
Štruktúra a únia C++ podporuje štruktúry a zväzky.Java nepodporuje štruktúry a odbory.
Podpora vlákien C++ nemá vstavanú podporu pre vlákna. Pri podpore vlákien sa spolieha na knižnice tretích strán.Java má vstavaný niť podpora.
Komentár k dokumentácii C++ nepodporuje komentár k dokumentácii.Java podporuje komentár k dokumentácii (/** ... */) na vytvorenie dokumentácie pre zdrojový kód Java.
Virtuálne kľúčové slovo C++ podporuje virtuálne kľúčové slovo, takže sa môžeme rozhodnúť, či funkciu prepíšeme alebo nie.Java nemá žiadne virtuálne kľúčové slovo. Všetky nestatické metódy môžeme štandardne prepísať. Inými slovami, nestatické metódy sú štandardne virtuálne.
posun vpravo bez znamienka >>> C++ nepodporuje operátor >>>.Java podporuje operátor posunu vpravo >>> bez znamienka, ktorý vyplní nulu hore pre záporné čísla. Pre kladné čísla to funguje rovnako ako operátor >>.
Strom dedičstva C++ vždy vytvorí nový strom dedičnosti.Java vždy používa jeden strom dedičnosti, pretože všetky triedy sú potomkami triedy Object v jazyku Java. Trieda objektov je koreňom dedičstvo strom v jave.
Hardvér C++ je bližšie k hardvéru.Java nie je taká interaktívna s hardvérom.
Objektovo orientovaný C++ je objektovo orientovaný jazyk. V jazyku C však nie je možná hierarchia jedného koreňového adresára.Java je tiež objektovo orientovaný Jazyk. Všetko (okrem základných typov) je však v Jave objekt. Je to jediná koreňová hierarchia, pretože všetko je odvodené od java.lang.Object.

3) Uveďte vlastnosti programovacieho jazyka Java.

Programovací jazyk Java obsahuje nasledujúce funkcie.

    jednoduché:Java sa dá ľahko naučiť. Syntax jazyka Java je založená na jazyku C++, čo uľahčuje písanie programu v ňom.
    Objektovo orientovaný:Java sa riadi objektovo orientovanou paradigmou, ktorá nám umožňuje udržiavať náš kód ako kombináciu rôznych typov objektov, ktoré zahŕňajú údaje aj správanie.
    Prenosné:Java podporuje prístup typu čítanie raz, zápis a kdekoľvek. Java program môžeme spustiť na každom stroji. Java program (.java) je konvertovaný na bajtový kód (.class), ktorý možno ľahko spustiť na každom počítači.
    Nezávislé od platformy:Java je platformovo nezávislý programovací jazyk. Líši sa od iných programovacích jazykov, ako sú C a C++, ktoré potrebujú platformu na spustenie. Java prichádza so svojou platformou, na ktorej sa spúšťa jej kód. Java nezávisí od operačného systému, ktorý sa má spustiť.
    Zabezpečené:Java je zabezpečená, pretože nepoužíva explicitné ukazovatele. Java tiež poskytuje koncepciu spracovania ByteCode a výnimiek, vďaka čomu je bezpečnejšia.
    Robustný:Java je silný programovací jazyk, pretože využíva silnú správu pamäte. Koncepty ako automatický zber odpadu, spracovanie výnimiek atď. ho robia robustnejším.
    Neutrálna architektúra:Java je architektonicky neutrálna, pretože nie je závislá od architektúry. V C sa veľkosť dátových typov môže líšiť v závislosti od architektúry (32-bitová alebo 64-bitová), ktorá v Jave neexistuje.
    Vykladané:Java používa na spustenie programu interpret Just-in-time (JIT) spolu s kompilátorom.
    Vysoký výkon:Java je rýchlejšia ako iné tradičné interpretované programovacie jazyky, pretože bajtový kód Java je „blízko“ natívnemu kódu. Je stále o niečo pomalší ako kompilovaný jazyk (napr. C++).
    Viacvláknové:Môžeme písať Java programy, ktoré sa zaoberajú mnohými úlohami naraz definovaním viacerých vlákien. Hlavnou výhodou multi-threadingu je, že nezaberá pamäť pre každé vlákno. Zdieľa spoločnú pamäťovú oblasť. Vlákna sú dôležité pre multimédiá, webové aplikácie atď.
    Distribuované:Java je distribuovaná, pretože používateľom uľahčuje vytváranie distribuovaných aplikácií v jazyku Java. RMI a EJB sa používajú na vytváranie distribuovaných aplikácií. Táto funkcia Java nám umožňuje pristupovať k súborom volaním metód z akéhokoľvek počítača na internete.
    Dynamický:Java je dynamický jazyk. Podporuje dynamické načítanie tried. To znamená, že triedy sú načítané na požiadanie. Podporuje tiež funkcie z jeho rodných jazykov, t. j. C a C++.

4) Čo rozumiete pod pojmom Java virtual machine?

Java Virtual Machine je virtuálny stroj, ktorý umožňuje počítaču spúšťať program Java. JVM funguje ako run-time engine, ktorý volá hlavnú metódu prítomnú v kóde Java. JVM je špecifikácia, ktorá musí byť implementovaná do počítačového systému. Java kód je kompilovaný JVM ako Bytecode, ktorý je nezávislý od stroja a je blízky natívnemu kódu.


5) Aký je rozdiel medzi JDK, JRE a JVM?

JVM

JVM je skratka pre Java Virtual Machine; je to abstraktný stroj, ktorý poskytuje runtime prostredie, v ktorom je možné spustiť bajtový kód Java. Je to špecifikácia, ktorá špecifikuje fungovanie Java Virtual Machine. Jeho implementáciu zabezpečila spoločnosť Oracle a ďalšie spoločnosti. Jeho implementácia je známa ako JRE.

JVM sú dostupné pre mnoho hardvérových a softvérových platforiem (takže JVM je závislé od platformy). Je to runtime inštancia, ktorá sa vytvorí, keď spustíme triedu Java. Existujú tri pojmy JVM: špecifikácia, implementácia a inštancia.

JRE

JRE je skratka pre Java Runtime Environment. Ide o implementáciu JVM. Java Runtime Environment je sada softvérových nástrojov, ktoré sa používajú na vývoj Java aplikácií. Používa sa na poskytovanie runtime prostredia. Ide o implementáciu JVM. Fyzicky existuje. Obsahuje sadu knižníc + ďalšie súbory, ktoré JVM používa za behu.

JDK

JDK je skratka pre Java Development Kit. Je to softvérové ​​vývojové prostredie, ktoré sa používa na vývoj Java aplikácií a apletov. Fyzicky existuje. Obsahuje JRE + vývojové nástroje. JDK je implementácia ktorejkoľvek z nižšie uvedených platforiem Java vydaných spoločnosťou Oracle Corporation:

  • Platforma Java Standard Edition
  • Platforma Java Enterprise Edition
  • Platforma Java Micro Edition
Viac informácií.

6) Koľko typov pamäťových oblastí prideľuje JVM?

Mnoho typov:

    Oblasť triedy (metódy):Oblasť triedy ukladá štruktúry podľa triedy, ako je napríklad oblasť konštantných oblastí, pole, údaje metódy a kód pre metódy.halda:Je to dátová oblasť runtime, v ktorej je pamäť pridelená objektomStoh:Java Stack ukladá snímky. Obsahuje lokálne premenné a čiastkové výsledky a hrá úlohu pri vyvolaní a návrate metódy. Každé vlákno má súkromný zásobník JVM vytvorený v rovnakom čase ako vlákno. Pri každom vyvolaní metódy sa vytvorí nový rámec. Rám sa zničí, keď sa dokončí vyvolanie jeho metódy.Registrácia programového pultu:Register PC (počítadlo programov) obsahuje adresu aktuálne vykonávanej inštrukcie virtuálneho stroja Java.Zásobník natívnych metód:Obsahuje všetky natívne metódy používané v aplikácii.
Viac informácií.

7) Čo je kompilátor JIT?

Kompilátor Just-In-Time (JIT): Používa sa na zlepšenie výkonu. JIT kompiluje časti bajtkódu, ktoré majú podobnú funkčnosť v rovnakom čase, a tým znižuje množstvo času potrebného na kompiláciu. Pojem kompilátor sa tu vzťahuje na prekladač z inštrukčnej sady virtuálneho stroja Java (JVM) do inštrukčnej sady konkrétneho CPU.


8) Čo je to platforma?

Platforma je hardvérové ​​alebo softvérové ​​prostredie, v ktorom sa softvér spúšťa. Existujú dva typy platforiem, softvérové ​​a hardvérové. Java poskytuje softvérovú platformu.


9) Aké sú hlavné rozdiely medzi platformou Java a inými platformami?

Medzi platformou Java a inými platformami existujú nasledujúce rozdiely.

  • Java je platforma založená na softvéri, zatiaľ čo iné platformy môžu byť hardvérové ​​platformy alebo platformy založené na softvéri.
  • Java sa spúšťa na vrchole iných hardvérových platforiem, zatiaľ čo iné platformy môžu mať iba hardvérové ​​komponenty.

10) Čo dáva Jave jej povahu „napíš raz a spusti kdekoľvek“?

Bytový kód. Kompilátor Java konvertuje programy Java do súboru triedy (Byte Code), ktorý je prostredným jazykom medzi zdrojovým kódom a strojovým kódom. Tento bajtový kód nie je špecifický pre platformu a môže byť spustený na akomkoľvek počítači.


11) Čo je classloader?

Classloader je podsystém JVM, ktorý sa používa na načítanie súborov tried. Kedykoľvek spustíme java program, najprv ho načíta classloader. V Jave sú tri vstavané classloadery.

    Bootstrap ClassLoader: Toto je prvý classloader, ktorý je nadtriedou Extension classloader. Načítava to rt.jar súbor, ktorý obsahuje všetky súbory tried Java Standard Edition, ako sú triedy balíkov java.lang, triedy balíkov java.net, triedy balíkov java.util, triedy balíkov java.io, triedy balíkov java.sql atď.Rozšírenie ClassLoader: Toto je podriadený classloader Bootstrapu a rodičovský classloader System classloader. Načítava súbory jar umiestnené vo vnútri $JAVA_HOME/jre/lib/ext adresár.System/Application ClassLoader: Toto je podriadený classloader rozšírenia classloader. Načítava súbory triedy z cesty k triede. V predvolenom nastavení je cesta k triede nastavená na aktuálny adresár. Cestu triedy môžete zmeniť pomocou prepínača „-cp“ alebo „-classpath“. Je tiež známy ako Application classloader.

12) Je prázdny názov súboru .java platný názov zdrojového súboru?

Áno, Java umožňuje uložiť náš java súbor pomocou .java len ho musíme skompilovať javac .java a prebehnúť názov triedy java Uveďme si jednoduchý príklad:

 //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 

zostaviť to podľa javac .java

spustiť to java A


13) Je v jazyku Java kľúčové slovo delete, next, main, exit alebo null?

Nie


14) Ak na príkazovom riadku neuvediem žiadne argumenty, aká bude hodnota uložená v poli String odovzdaná do metódy main(), prázdna alebo NULL?

Je prázdna, ale nie nulová.


15) Čo ak napíšem static public void namiesto public static void?

Program sa skompiluje a beží správne, pretože na poradí špecifikátorov v Jave nezáleží.


16) Aká je predvolená hodnota lokálnych premenných?

Lokálne premenné nie sú inicializované na žiadnu predvolenú hodnotu, ani primitívy, ani odkazy na objekty.


17) Aké sú rôzne špecifikátory prístupu v jazyku Java?

V jazyku Java sú špecifikátory prístupu kľúčové slová, ktoré sa používajú na definovanie rozsahu prístupu metódy, triedy alebo premennej. V jazyku Java sú nižšie uvedené štyri špecifikátory prístupu.

    VerejnéK triedam, metódam alebo premenným, ktoré sú definované ako verejné, je možné pristupovať akoukoľvek triedou alebo metódou.ChránenéK chránenému môže pristupovať trieda toho istého balíka alebo podtrieda tejto triedy alebo v rámci rovnakej triedy.PredvolenéPredvolené sú dostupné iba v rámci balíka. Štandardne majú všetky triedy, metódy a premenné predvolený rozsah.SúkromnéSúkromná trieda, metódy alebo premenné definované ako súkromné ​​sú prístupné iba v rámci triedy.

18) Aký je účel statických metód a premenných?

Metódy alebo premenné definované ako statické sú zdieľané medzi všetkými objektmi triedy. Statika je súčasťou triedy a nie objektu. Statické premenné sú uložené v oblasti triedy a na prístup k takýmto premenným nemusíme vytvárať objekt. Preto sa statika používa v prípade, keď potrebujeme definovať premenné alebo metódy, ktoré sú spoločné pre všetky objekty triedy.

Napríklad v triede simulujúcej zhromaždenie študentov na vysokej škole je názov vysokej školy spoločným atribútom pre všetkých študentov. Preto bude názov vysokej školy definovaný ako statické .


19) Aké sú výhody balíkov v jazyku Java?

Definovanie balíkov v Jave má rôzne výhody.

  • Balíčky sa vyhýbajú stretom mien.
  • Balík poskytuje jednoduchšiu kontrolu prístupu.
  • Môžeme mať aj skryté triedy, ktoré nie sú viditeľné vonku a používané balíkom.
  • Je ľahšie nájsť súvisiace triedy.

20) Aký je výstup nasledujúceho programu Java?

 class Test { public static void main (String args[]) { System.out.println(10 + 20 + 'Javatpoint'); System.out.println('Javatpoint' + 10 + 20); } } 

Výstupom vyššie uvedeného kódu bude

 30Javatpoint Javatpoint1020 

Vysvetlenie

V prvom prípade sa 10 a 20 považujú za čísla a pripočítajú sa k 30. Teraz sa ich súčet 30 považuje za reťazec a spája sa s reťazcom Javatpoint . Preto bude výstup 30Javatpoint .

V druhom prípade je reťazec Javatpoint zreťazený s 10, aby bol reťazcom Javatpoint10 ktorý bude potom zreťazený s 20 byť Javatpoint1020 .


21) Aký je výstup nasledujúceho programu Java?

 class Test { public static void main (String args[]) { System.out.println(10 * 20 + 'Javatpoint'); System.out.println('Javatpoint' + 10 * 20); } } 

Výstupom vyššie uvedeného kódu bude

 200Javatpoint Javatpoint200 

Vysvetlenie

V prvom prípade sa najprv vynásobia čísla 10 a 20 a potom sa výsledok 200 považuje za reťazec a spojí sa s reťazcom. Javatpoint na výrobu výstupu 200Javatpoint .

V druhom prípade sa najprv vynásobia čísla 10 a 20 na 200, pretože priorita násobenia je vyššia ako sčítanie. Výsledok 200 bude považovaný za reťazec a zreťazený s reťazcom Javatpoint produkovať výstup ako Javatpoint200 .


22) Aký je výstup nasledujúceho programu Java?

 class Test { public static void main (String args[]) { for(int i=0; 0; i++) { System.out.println('Hello Javatpoint'); } } } 

Vyššie uvedený kód poskytne chybu pri kompilácii, pretože cyklus for vyžaduje boolovskú hodnotu v druhej časti a my poskytujeme celočíselnou hodnotu, t. j. 0.


Jadro Java - koncepty OOP: Úvodné otázky na rozhovor s OOP

Existuje viac ako 50 otázok na pohovor OOP (Object-Oriented Programming and System). Boli však rozdelené do mnohých sekcií, ako sú otázky na rozhovor s konštruktérom, otázky statického rozhovoru, otázky na rozhovor o dedičstve, otázka na rozhovor s abstrakciou, otázky na rozhovor s polymorfizmom atď.


23) Čo je objektovo orientovaná paradigma?

Ide o programovaciu paradigmu založenú na objektoch, ktoré majú údaje a metódy definované v triede, do ktorej patria. Objektovo orientovaná paradigma má za cieľ začleniť výhody modularity a opätovnej použiteľnosti. Objekty sú inštancie tried, ktoré sa navzájom ovplyvňujú pri navrhovaní aplikácií a programov. Objektovo orientovaná paradigma má nasledujúce vlastnosti.

  • Pri navrhovaní programu sa riadi prístupom zdola nahor.
  • Zamerajte sa na údaje pomocou metód na prácu s údajmi objektu
  • Zahŕňa koncept ako zapuzdrenie a abstrakciu, ktorý pred používateľom skrýva zložitosť a zobrazuje iba funkčnosť.
  • Implementuje prístup v reálnom čase, ako je dedičnosť, abstrakcia atď.
  • Príkladmi objektovo orientovanej paradigmy sú C++, Simula, Smalltalk, Python, C# atď.

24) Čo je to predmet?

Objekt je entita v reálnom čase, ktorá má určitý stav a správanie. V jazyku Java je Object inštanciou triedy, ktorá má premenné inštancie ako stav objektu a metódy ako správanie objektu. Objekt triedy možno vytvoriť pomocou Nový kľúčové slovo.


25) Aký je rozdiel medzi objektovo orientovaným programovacím jazykom a objektovo orientovaným programovacím jazykom?

Medzi objektovo orientovaným jazykom a objektovo orientovaným jazykom existujú nasledujúce základné rozdiely.

  • Objektovo orientované jazyky sa riadia všetkými konceptmi OOP, zatiaľ čo objektový jazyk sa neriadi všetkými konceptmi OOP, ako je dedičnosť a polymorfizmus.
  • Objektovo orientované jazyky nemajú vstavané objekty, zatiaľ čo objektovo založené jazyky majú vstavané objekty, napríklad JavaScript má objekt okna.
  • Príkladmi objektovo orientovaného programovania sú Java, C#, Smalltalk atď., zatiaľ čo príkladmi objektovo orientovaných jazykov sú JavaScript, VBScript atď.

26) Aká bude počiatočná hodnota odkazu na objekt, ktorý je definovaný ako premenná inštancie?

Všetky odkazy na objekty sú v jazyku Java inicializované na hodnotu null.


Core Java - OOPs Concepts: Constructor Interview Questions


27) Čo je to konštruktér?

Konštruktor môže byť definovaný ako špeciálny typ metódy, ktorá sa používa na inicializáciu stavu objektu. Vyvolá sa, keď sa vytvorí inštancia triedy a pamäť sa pridelí objektu. Zakaždým sa objekt vytvorí pomocou Nový kľúčové slovo, zavolá sa predvolený konštruktor triedy. Názov konštruktora musí byť podobný názvu triedy. Konštruktor nesmie mať explicitný návratový typ.

Viac informácií.

28) Koľko typov konštruktorov sa používa v Jave?

Na základe parametrov odovzdaných v konštruktoroch existujú v Jave dva typy konštruktorov.

    Predvolený konštruktor:predvolený konštruktor je ten, ktorý neprijíma žiadnu hodnotu. Predvolený konštruktor sa používa hlavne na inicializáciu premennej inštancie s predvolenými hodnotami. Môže sa tiež použiť na vykonávanie niektorých užitočných úloh pri vytváraní objektu. Predvolený konštruktor je vyvolaný implicitne kompilátorom, ak v triede nie je definovaný žiadny konštruktor.Parametrizovaný konštruktor:Parametrizovaný konštruktor je ten, ktorý dokáže inicializovať premenné inštancie s danými hodnotami. Inými slovami, môžeme povedať, že konštruktory, ktoré môžu akceptovať argumenty, sa nazývajú parametrizované konštruktory.
Konštruktory Java

29) Aký je účel predvoleného konštruktora?

Účelom predvoleného konštruktora je priradiť predvolenú hodnotu objektom. Kompilátor java vytvorí predvolený konštruktor implicitne, ak v triede nie je žiadny konštruktor.

 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(); } } 
Vyskúšajte to

Výkon:

 0 null 0 null 

Vysvetlenie: Vo vyššie uvedenej triede nevytvárate žiadny konštruktor, takže kompilátor vám poskytuje predvolený konštruktor. Tu sú v predvolenom konštruktore poskytnuté hodnoty 0 a null.

Predvolený konštruktor Java
Viac informácií.

30) Vráti konštruktor nejakú hodnotu?

Roky: áno, Konštruktor implicitne vracia aktuálnu inštanciu triedy (s konštruktorom nemôžete použiť explicitný návratový typ). Viac informácií.


31) Je konštruktor zdedený?

Nie, konštruktor sa nededí.


32) Môžete urobiť konštruktér konečné?

Nie, konštruktor nemôže byť konečný.

ukazovateľ v c

33) Môžeme preťažiť konštruktory?

Áno, konštruktory môžu byť preťažené zmenou počtu argumentov akceptovaných konštruktorom alebo zmenou dátového typu parametrov. Zvážte nasledujúci príklad.

 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); } } 

Vo vyššie uvedenom programe je Test konštruktora preťažený iným konštruktorom. V prvom volaní konštruktora sa zavolá konštruktor s jedným argumentom a i sa inicializuje s hodnotou 10. Pri druhom volaní konštruktora sa však zavolá konštruktor s 2 argumentmi a bude inicializované s hodnotou 15.


34) Čo rozumiete pod pojmom kopírovací konštruktor v jazyku Java?

V jave nie je žiadny kopírovací konštruktor. Môžeme však kopírovať hodnoty z jedného objektu do druhého ako kopírovací konštruktor v C++.

Existuje mnoho spôsobov, ako skopírovať hodnoty jedného objektu do druhého v jazyku Java. Oni sú:

  • Podľa konštruktéra
  • Priraďovaním hodnôt jedného objektu k druhému
  • Metódou clone() triedy Object

V tomto príklade budeme kopírovať hodnoty jedného objektu do druhého pomocou java konštruktora.

 //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(); } } 
Vyskúšajte to

Výkon:

 111 Karan 111 Karan 

35) Aké sú rozdiely medzi konštruktérmi a metódami?

Medzi konštruktérmi a metódami je veľa rozdielov. Sú uvedené nižšie.

Java ConstructorJava metóda
Konštruktor sa používa na inicializáciu stavu objektu.Metóda sa používa na odhalenie správania objektu.
Konštruktor nesmie mať návratový typ.Metóda musí mať návratový typ.
Konštruktor je vyvolaný implicitne.Metóda sa volá explicitne.
Kompilátor Java poskytuje predvolený konštruktor, ak v triede nemáte žiadny konštruktor.Metódu v žiadnom prípade neposkytuje kompilátor.
Názov konštruktora musí byť rovnaký ako názov triedy.Názov metódy môže alebo nemusí byť rovnaký ako názov triedy.

Java konštruktory vs metódy

36) Aký je výstup nasledujúceho programu 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); } } 

Výstupom nasledujúceho programu je:

 a = 10 b = 15 

Tu sa dátový typ premenných a a b, t.j. bajt, povýši na int a zavolá sa prvý parametrizovaný konštruktor s dvoma celočíselnými parametrami.


37) Aký je výstup nasledujúceho programu Java?

 class Test { int i; } public class Main { public static void main (String args[]) { Test test = new Test(); System.out.println(test.i); } } 

Výstup programu je 0, pretože premenná i je interne inicializovaná na 0. Keďže vieme, že predvolený konštruktor je vyvolaný implicitne, ak v triede nie je žiadny konštruktor, premenná i je inicializovaná na 0, pretože v triede nie je žiadny konštruktor.


38) Aký je výstup nasledujúceho programu 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); } } 

Existuje a chyba kompilátora v programe, pretože v hlavnej metóde existuje volanie predvoleného konštruktora, ktorý sa v triede nenachádza. V triede Test je však len jeden parametrizovaný konštruktor. Preto konštruktor implicitne nevyvolá žiadny predvolený konštruktor.


Core Java - OOPs Concepts: statické kľúčové slovo Otázky na rozhovor


39) Čo je to statická premenná?

Statická premenná sa používa na odkazovanie na spoločnú vlastnosť všetkých objektov (ktorá nie je jedinečná pre každý objekt), napr. názov spoločnosti zamestnancov, meno študentov na vysokej škole atď. Statická premenná získa pamäť iba raz v oblasti triedy na adrese čas načítania triedy. Použitie statickej premennej zefektívňuje pamäť vášho programu (šetrí pamäť). Statická premenná patrí skôr do triedy ako do objektu.

 //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(); } } 
Vyskúšajte to
 Output:111 Karan ITS 222 Aryan ITS 

Viac informácií.

40) Čo je to statická metóda?

  • Statická metóda patrí skôr do triedy ako do objektu.
  • Na volanie statických metód nie je potrebné vytvárať objekt.
  • Statická metóda môže pristupovať a meniť hodnotu statickej premennej.
Viac informácií.

41) Aké sú obmedzenia, ktoré sa vzťahujú na statické metódy Java?

Na statické metódy sa vzťahujú dve hlavné obmedzenia.

  • Statická metóda nemôže používať nestatický dátový člen alebo priamo volať nestatickú metódu.
  • toto a super nemožno použiť v statickom kontexte, pretože sú nestatické.

42) Prečo je hlavná metóda statická?

Pretože objekt nie je povinný volať statickú metódu. Ak urobíme hlavnú metódu nestatickou, JVM bude musieť najprv vytvoriť svoj objekt a potom zavolať metódu main(), čo povedie k prideleniu extra pamäte. Viac informácií.


43) Môžeme prepísať statické metódy?

Nie, nemôžeme prepísať statické metódy.

44) Čo je to statický blok?

Statický blok sa používa na inicializáciu člena statických údajov. Vykonáva sa pred hlavnou metódou v čase načítania triedy.

 class A2{ static{System.out.println('static block is invoked');} public static void main(String args[]){ System.out.println('Hello main'); } } 
Vyskúšajte to
 Output: static block is invoked Hello main 

Viac informácií.

45) Môžeme spustiť program bez metódy main()?

Odpoveď) Nie, pred JDK 1.7 to bolo možné pomocou statického bloku. Od JDK 1.7 to nie je možné. Viac informácií.


46) Čo ak sa z podpisu hlavnej metódy odstráni statický modifikátor?

Program sa skompiluje. Počas behu však vyhodí chybu „NoSuchMethodError“.


47) Aký je rozdiel medzi statickou (triednou) metódou a inštanciou?

statická alebo triedna metódainštancia metóda
1) Metóda, ktorá je deklarovaná ako statická, je známa ako statická metóda.Metóda, ktorá nie je deklarovaná ako statická, je známa ako metóda inštancie.
2) Na volanie statických metód nepotrebujeme vytvárať objekty.Od objektu sa vyžaduje volanie metód inštancie.
3) K nestatickým (inštanciám) členom nie je možné pristupovať priamo v statickom kontexte (statická metóda, statický blok a statická vnorená trieda).V metódach inštancie je možné pristupovať k statickým aj nestatickým premenným.
4) Napríklad: public static int cube (int n){ return n*n*n;}Napríklad: public void msg(){...}.

48) Môžeme urobiť konštruktérov statickými?

Ako vieme, statický kontext (metóda, blok alebo premenná) patrí do triedy, nie do objektu. Keďže konštruktory sa vyvolávajú iba pri vytvorení objektu, nemá zmysel robiť konštruktory statické. Ak sa však o to pokúsite, kompilátor zobrazí chybu kompilátora.


49) Môžeme urobiť abstraktné metódy statické v Jave?

Ak v Jave urobíme abstraktné metódy statické, stane sa súčasťou triedy a môžeme ju priamo nazvať, čo je zbytočné. Volanie nedefinovanej metódy je úplne zbytočné, preto nie je povolené.


50) Môžeme deklarovať statické premenné a metódy v abstraktnej triede?

Áno, statické premenné a metódy môžeme deklarovať v abstraktnej metóde. Keďže vieme, že nie je potrebné, aby objekt mal prístup k statickému kontextu, môžeme teda pristupovať k statickému kontextu deklarovanému v abstraktnej triede pomocou názvu abstraktnej triedy. Zvážte nasledujúci príklad.

 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); } } 

Výkon

 hi !! I am good !! i = 102 

Jadro Java - koncepty OOPs: Otázky týkajúce sa pohovoru o dedičstve


51) Čo je toto kľúčové slovo v jave?

The toto kľúčové slovo je referenčná premenná, ktorá odkazuje na aktuálny objekt. V Jave existujú rôzne použitia tohto kľúčového slova. Môže sa použiť na odkazovanie na aktuálne vlastnosti triedy, ako sú metódy inštancie, premenná, konštruktory atď. Môže sa tiež odovzdať ako argument do metód alebo konštruktorov. Môže sa tiež vrátiť z metódy ako aktuálna inštancia triedy.

java toto kľúčové slovo
Viac informácií.

52) Aké sú hlavné použitia tohto kľúčového slova?

Existujú nasledujúce použitia toto kľúčové slovo.

    totomožno použiť na odkazovanie na aktuálnu premennú inštancie triedy.totomožno použiť na vyvolanie aktuálnej metódy triedy (implicitne)toto ()možno použiť na vyvolanie konštruktora aktuálnej triedy.totomožno odovzdať ako argument vo volaní metódy.totomožno odovzdať ako argument vo volaní konštruktora.totomožno použiť na vrátenie aktuálnej inštancie triedy z metódy.

53) Môžeme priradiť odkaz na toto variabilná?

Nie, toto nemožno priradiť k žiadnej hodnote, pretože vždy ukazuje na aktuálny objekt triedy a toto je konečná referencia v jazyku Java. Ak sa však o to pokúsime, zobrazí sa chyba kompilátora. Zvážte nasledujúci príklad.

 public class Test { public Test() { this = null; System.out.println('Test class constructor called'); } public static void main (String args[]) { Test t = new Test(); } } 

Výkon

 Test.java:5: error: cannot assign a value to final variable this this = null; ^ 1 error 

54) Can toto kľúčové slovo použiť na odkazovanie statických členov?

Áno, toto kľúčové slovo je možné použiť na odkazovanie na statické členy, pretože je to len referenčná premenná, ktorá odkazuje na aktuálny objekt triedy. Ako však vieme, nie je potrebné pristupovať k statickým premenným prostredníctvom objektov, preto nie je najlepším postupom používať to na odkazovanie na statické členy. Zvážte nasledujúci príklad.

 public class Test { static int i = 10; public Test () { System.out.println(this.i); } public static void main (String args[]) { Test t = new Test(); } } 

Výkon

 10 

55) Ako možno vykonať reťazenie konštruktorov pomocou tohto kľúčového slova?

Reťazenie konštruktorov nám umožňuje volať jeden konštruktor z iného konštruktora triedy vzhľadom na aktuálny objekt triedy. Toto kľúčové slovo môžeme použiť na vykonanie reťazenia konštruktora v rámci rovnakej triedy. Zvážte nasledujúci príklad, ktorý ilustruje, ako môžeme použiť toto kľúčové slovo na dosiahnutie reťazenia konštruktorov.

 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); } } 

Výkon

 ID: 105 Name:Vikas age:22 address: Delhi 

56) Aké sú výhody odovzdania tohto do metódy namiesto samotného objektu aktuálnej triedy?

Ako vieme, toto sa vzťahuje na aktuálny objekt triedy, preto musí byť podobný objektu aktuálnej triedy. Prenesenie tohto do metódy namiesto aktuálneho objektu triedy však môže mať dve hlavné výhody.

  • toto je posledná premenná. Preto to nemôže byť priradené žiadnej novej hodnote, zatiaľ čo aktuálny objekt triedy nemusí byť konečný a možno ho zmeniť.
  • toto je možné použiť v synchronizovanom bloku.

57) Čo je dedičstvo?

Dedičnosť je mechanizmus, ktorým jeden objekt získava všetky vlastnosti a správanie iného objektu inej triedy. Používa sa na opätovné použitie kódu a prepísanie metódy. Myšlienka dedenia v Jave je, že môžete vytvárať nové triedy, ktoré sú postavené na existujúcich triedach. Keď dedíte z existujúcej triedy, môžete znova použiť metódy a polia nadradenej triedy. Okrem toho môžete do svojej aktuálnej triedy pridať aj nové metódy a polia. Dedičnosť predstavuje vzťah IS-A, ktorý je známy aj ako vzťah rodič-dieťa.

V Jave existuje päť typov dedičnosti.

  • Jednoúrovňová dedičnosť
  • Viacúrovňové dedičstvo
  • Viacnásobné dedičstvo
  • Hierarchické dedičstvo
  • Hybridné dedičstvo

Viacnásobné dedenie nie je v jazyku Java podporované prostredníctvom triedy.

Viac informácií.

58) Prečo sa v Jave používa dedičnosť?

Používanie dedičnosti v jazyku Java má rôzne výhody, ktoré sú uvedené nižšie.

  • Dedičnosť poskytuje opätovnú použiteľnosť kódu. Odvodená trieda nemusí predefinovať metódu základnej triedy, pokiaľ nepotrebuje poskytnúť špecifickú implementáciu metódy.
  • Runtime polymorfizmus nemožno dosiahnuť bez použitia dedičnosti.
  • Môžeme simulovať dedenie tried pomocou objektov v reálnom čase, vďaka čomu sú OOP realistickejšie.
  • Dedičnosť poskytuje skrytie údajov. Základná trieda môže skryť niektoré údaje z odvodenej triedy tak, že bude súkromná.
  • Prepísanie metódy nie je možné dosiahnuť bez dedenia. Prepísaním metódy môžeme poskytnúť špecifickú implementáciu nejakej základnej metódy obsiahnutej v základnej triede.

59) Ktorá trieda je nadtriedou pre všetky triedy?

Trieda objektu je nadtriedou všetkých ostatných tried v Jave.


60) Prečo nie je v jave podporované viacnásobné dedičstvo?

Kvôli zníženiu zložitosti a zjednodušeniu jazyka nie je v jave podporované viacnásobné dedenie. Zvážte scenár, kde A, B a C sú tri triedy. Trieda C dedí triedy A a B. Ak triedy A a B majú rovnakú metódu a voláte ju z objektu triedy podriadenej triedy, volanie metódy triedy A alebo B bude nejednoznačné.

Keďže chyby v čase kompilácie sú lepšie ako chyby pri behu, Java vykreslí chybu v čase kompilácie, ak zdedíte 2 triedy. Či už teda máte rovnakú alebo inú metódu, dôjde k chybe v čase kompilácie.

 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? } } 
Vyskúšajte to
 Compile Time Error 

61) Čo je to agregácia?

Agregáciu možno definovať ako vzťah medzi dvoma triedami, kde agregovaná trieda obsahuje odkaz na triedu, ktorú vlastní. Agregácia je najlepšie opísaná ako a vzťah. Napríklad súhrnná trieda Zamestnanec, ktorá má rôzne polia, ako je vek, meno a plat, obsahuje aj objekt triedy Adresa s rôznymi poľami, ako je 1. riadok adresy, Mesto, Štát a kód PIN. Inými slovami, môžeme povedať, že Zamestnanec (trieda) má objekt triedy Adresa. Zvážte nasledujúci príklad.

Adresa.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; } } 

Zamestnanec.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(); } } 

Výkon

 111 varun gzb UP india 112 arun gno UP india 

62) Čo je zloženie?

Držanie odkazu na triedu v rámci inej triedy je známe ako kompozícia. Keď objekt obsahuje druhý objekt, ak obsiahnutý objekt nemôže existovať bez existencie kontajnerového objektu, potom sa to nazýva kompozícia. Inými slovami, môžeme povedať, že kompozícia je konkrétnym prípadom agregácie, ktorá predstavuje silnejší vzťah medzi dvoma objektmi. Príklad: Trieda obsahuje študentov. Študent nemôže existovať bez triedy. Medzi triedou a žiakmi existuje zloženie.


63) Aký je rozdiel medzi agregáciou a kompozíciou?

Agregácia predstavuje slabý vzťah, zatiaľ čo zloženie predstavuje silný vzťah. Napríklad bicykel má indikátor (agregácia), ale bicykel má motor (zloženie).


64) Prečo Java nepodporuje ukazovatele?

Ukazovateľ je premenná, ktorá odkazuje na adresu pamäte. V Jave sa nepoužívajú, pretože sú nebezpečné (nezabezpečené) a zložité na pochopenie.


65) Čo je super v jave?

The Super Kľúčové slovo v jazyku Java je referenčná premenná, ktorá sa používa na odkazovanie na objekt bezprostrednej nadradenej triedy. Kedykoľvek vytvoríte inštanciu podtriedy, implicitne sa vytvorí inštancia nadradenej triedy, na ktorú odkazuje superreferenčná premenná. Funkciu super() volá v konštruktore triedy implicitne kompilátor, ak neexistuje žiadne super alebo toto.

 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(); } } 
Vyskúšajte to

Výkon:

 animal is created dog is created 
Viac informácií.

66) Ako možno vykonať reťazenie konštruktorov pomocou kľúčového slova 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); } } 

Výkon

 Name: Mukesh Salary: 90000.0 Age: 22 Address: Delhi 

67) Aké sú hlavné použitia super kľúčového slova?

Existujú nasledujúce použitia super kľúčového slova.

  • super možno použiť na odkazovanie na premennú inštancie bezprostrednej nadradenej triedy.
  • super možno použiť na vyvolanie metódy bezprostrednej rodičovskej triedy.
  • super() možno použiť na vyvolanie konštruktora bezprostrednej rodičovskej triedy.

68) Aké sú rozdiely medzi týmto a super kľúčovým slovom?

Medzi týmto a super kľúčovým slovom sú nasledujúce rozdiely.

  • Kľúčové slovo super vždy ukazuje na kontext nadradenej triedy, zatiaľ čo toto kľúčové slovo vždy ukazuje na kontext aktuálnej triedy.
  • Kľúčové slovo super sa primárne používa na inicializáciu premenných základnej triedy v rámci konštruktora odvodenej triedy, zatiaľ čo toto kľúčové slovo sa primárne používa na rozlíšenie medzi lokálnymi a inštanciami premenných pri odovzdaní v konštruktore triedy.
  • Super a toto musí byť prvý príkaz v konštruktore, inak kompilátor vyvolá chybu.

69) Aký je výstup nasledujúceho programu 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(); } } 

Výkon

 Person class constructor called Employee class constructor called 

Vysvetlenie

Super() je implicitne vyvolané kompilátorom, ak žiadne super() alebo this() nie je explicitne zahrnuté v konštruktore odvodenej triedy. Preto sa v tomto prípade najprv zavolá konštruktor triedy Osoba a potom sa zavolá konštruktor triedy Zamestnanec.


70) Môžete použiť this() aj super() v konštruktore?

Nie, pretože this() a super() musia byť prvým príkazom v konštruktore triedy.

Príklad:

 public class Test{ Test() { super(); this(); System.out.println('Test class object is created'); } public static void main(String []args){ Test t = new Test(); } } 

Výkon:

 Test.java:5: error: call to this must be first statement in constructor 

71)Čo je klonovanie objektov?

Klonovanie objektu sa používa na vytvorenie presnej kópie objektu. Na klonovanie objektu sa používa metóda clone() triedy Object. The java.lang.Klonovateľné rozhranie musí byť implementované triedou, ktorej objektový klon chceme vytvoriť. Ak neimplementujeme rozhranie Cloneable, metóda clone() vygeneruje CloneNotSupportedException.

 protected Object clone() throws CloneNotSupportedException 
Viac informácií.

Core Java - OOPs Concepts: Method Overloading Interview Questions


72) Čo je preťaženie metódy?

Preťažovanie metódami je technika polymorfizmu, ktorá nám umožňuje vytvárať viaceré metódy s rovnakým názvom, ale odlišným podpisom. Preťaženie metódy môžeme dosiahnuť dvoma spôsobmi.

  • Zmenou počtu argumentov
  • Zmenou dátového typu argumentov

Preťaženie metódy zvyšuje čitateľnosť programu. Preťaženie metódy sa vykonáva, aby sa program rýchlo zistil.

Viac informácií.

73) Prečo nie je možné preťaženie metódy zmenou typu návratu v jave?

V Jave nie je možné preťaženie metódy zmenou návratového typu programu, aby sa predišlo nejednoznačnosti.

 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 }} 
Vyskúšajte to

Výkon:

 Compile Time Error: method add(int, int) is already defined in class Adder 
Viac informácií.

74) Môžeme preťažiť metódy tým, že ich urobíme statickými?

Nie, nemôžeme preťažiť metódy tým, že na ne použijeme statické kľúčové slovo (počet parametrov a typov je rovnaký). Zvážte nasledujúci príklad.

 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); } } 

Výkon

 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) Môžeme preťažiť metódu main()?

Áno, pomocou preťaženia metód môžeme mať v programe Java ľubovoľný počet hlavných metód.

Viac informácií.

76) Čo je preťaženie metódy propagáciou typu?

Pod pojmom propagácia typu je preťaženie metódy, čo znamená, že jeden typ údajov môže byť implicitne povýšený na iný, ak sa nenájde presná zhoda.

Preťaženie metódy Java s podporou typu

Ako je znázornené vo vyššie uvedenom diagrame, bajt môže byť povýšený na krátky, int, dlhý, pohyblivý alebo dvojitý. Krátky dátový typ môže byť povýšený na int, long, float alebo double. Dátový typ char môže byť povýšený na int, long, float alebo double a tak ďalej. Zvážte nasledujúci príklad.

 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); } } 
Vyskúšajte to

Výkon

 40 60 

77) Aký je výstup nasledujúceho programu 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 } } 

Výkon

 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 

Vysvetlenie

Existujú dve metódy definované s rovnakým názvom, t. j. súčet. Prvá metóda akceptuje celé číslo a typ long, zatiaľ čo druhá metóda akceptuje typ long a celé číslo. Odovzdaný parameter, ktorý je a = 20, b = 20. Nemôžeme povedať, ktorá metóda sa bude volať, pretože neexistuje jasné rozlíšenie medzi celočíselným literálom a dlhým literálom. Toto je prípad nejednoznačnosti. Preto kompilátor vyvolá chybu.


Core Java - OOPs Concepts: Method Overriding Questions


78) Čo je prepísanie metódy:

Ak podtrieda poskytuje špecifickú implementáciu metódy, ktorá je už poskytovaná jej nadradenou triedou, je známa ako prepísanie metódy. Používa sa na polymorfizmus za behu a na implementáciu metód rozhrania.

Pravidlá pre prepísanie metódy

  • Metóda musí mať rovnaký názov ako v rodičovskej triede.
  • Metóda musí mať rovnaký podpis ako v rodičovskej triede.
  • Dve triedy musia mať medzi sebou vzťah IS-A.
Viac informácií.


79) Môžeme prepísať statickú metódu?

Nie, statickú metódu nemôžete prepísať, pretože sú súčasťou triedy, nie objektom.


80) Prečo nemôžeme prepísať statickú metódu?

Je to preto, že statická metóda je súčasťou triedy a je viazaná na triedu, zatiaľ čo metóda inštancie je viazaná na objekt a statická získava pamäť v oblasti triedy a inštancia získava pamäť na hromade.


81) Môžeme prepísať preťaženú metódu?

Áno.


82) Rozdiel medzi metódou Overloading a Overriding.

Preťaženie metódyPrepísanie metódy
1) Preťaženie metódy zvyšuje čitateľnosť programu.Prepísanie metódy poskytuje špecifickú implementáciu metódy, ktorú už poskytuje jej nadtrieda.
2) V rámci triedy dochádza k preťaženiu metódy.Prepísanie metódy sa vyskytuje v dvoch triedach, ktoré majú medzi sebou vzťah IS-A.
3) V tomto prípade musia byť parametre odlišné.V tomto prípade musia byť parametre rovnaké.

83) Môžeme prepísať súkromné ​​metódy?

Nie, nemôžeme prepísať súkromné ​​metódy, pretože rozsah súkromných metód je obmedzený na triedu a nemôžeme k nim pristupovať mimo triedy.


84) Môžeme zmeniť rozsah prepísanej metódy v podtriede?

Áno, môžeme zmeniť rozsah prepísanej metódy v podtriede. Musíme si však uvedomiť, že nemôžeme znížiť dostupnosť metódy. Pri zmene prístupnosti metódy je potrebné dbať na nasledujúci bod.

  • Súkromné ​​je možné zmeniť na chránené, verejné alebo predvolené.
  • Chránené je možné zmeniť na verejné alebo predvolené.
  • Predvolené nastavenie je možné zmeniť na verejné.
  • Verejnosť vždy zostane verejnou.

85) Môžeme upraviť klauzulu throws metódy nadtriedy a zároveň ju prepísať v podtriede?

Áno, môžeme upraviť klauzulu throws metódy nadtriedy a zároveň ju prepísať v podtriede. Existujú však niektoré pravidlá, ktoré je potrebné dodržiavať pri prepisovaní v prípade spracovania výnimiek.

  • Ak metóda nadtriedy nedeklaruje výnimku, metóda prepísaná podtriedou nemôže deklarovať kontrolovanú výnimku, ale môže deklarovať nekontrolovanú výnimku.
  • Ak metóda nadtriedy deklaruje výnimku, metóda prepísaná podtriedou môže deklarovať to isté, výnimku podtriedy alebo žiadnu výnimku, ale nemôže deklarovať nadradenú výnimku.

86) Aký je výstup nasledujúceho programu 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); } } 

Výkon

 Base class method called with integer a = 10 

Vysvetlenie

Method() je preťažená v triede Base, zatiaľ čo je odvodená v triede Derived s parametrom double. Pri volaní metódy sa odovzdáva celé číslo.

87) Môžete mať virtuálne funkcie v Jave?

Áno, všetky funkcie v Jave sú štandardne virtuálne.


88) Čo je typ kovariantného návratu?

Teraz, od java5, je možné prepísať akúkoľvek metódu zmenou návratového typu, ak návratový typ metódy prepisovania podtriedy je typ podtriedy. Je známy ako typ kovariantného návratu. Kovariantný návratový typ určuje, že návratový typ sa môže meniť v rovnakom smere ako podtrieda.

 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(); } } 
Vyskúšajte to
 Output: welcome to covariant return type 
Viac informácií.

89) Aký je výstup nasledujúceho programu 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(); } } 

Výkon

 Derived method called ... 

Vysvetlenie

Metóda triedy Base, t.j. metóda baseMethod() je v odvodenej triede prepísaná. V triede Test odkazuje referenčná premenná b (typu Base class) na inštanciu triedy Derived. Tu sa dosiahne polymorfizmus Runtime medzi triedou Base a Derived. V čase kompilácie je skontrolovaná prítomnosť metódy baseMethod v triede Base. Ak je prítomná, program sa skompiloval, inak sa zobrazí chyba kompilátora. V tomto prípade je baseMethod prítomná v triede Base; preto je úspešne skompilovaný. Počas behu však skontroluje, či bola základná metóda prepísaná triedou Derived, ak áno, potom sa zavolá metóda triedy Derived, inak sa zavolá metóda triedy Base. V tomto prípade trieda Derived prepíše základnú metódu; preto sa volá metóda triedy Derived.


Core Java - OOPs Concepts: záverečné kľúčové slovo Otázky na rozhovor


90) Čo je konečná premenná?

V jazyku Java sa posledná premenná používa na obmedzenie aktualizácie používateľa. Ak inicializujeme konečnú premennú, nemôžeme zmeniť jej hodnotu. Inými slovami, môžeme povedať, že konečná premenná, ktorá je raz priradená k hodnote, sa už potom nemôže zmeniť. Konečná premenná, ktorá nie je priradená žiadnej hodnote, môže byť priradená iba prostredníctvom konštruktora triedy.

konečné kľúčové slovo v jazyku 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 
Vyskúšajte to
 Output:Compile Time Error 
Viac informácií.

91) Aká je konečná metóda?

Ak zmeníme akúkoľvek metódu na konečnú metódu, nemôžeme ju prepísať. Viac informácií.

 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(); } } 
Vyskúšajte to
 Output:Compile Time Error 

92) Aká je záverečná trieda?

Ak urobíme akúkoľvek triedu konečnou, nemôžeme ju zdediť do žiadnej z podtried.

 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(); } } 
Vyskúšajte to
 Output:Compile Time Error 
Viac informácií.

93) Čo je konečná prázdna premenná?

Konečná premenná, ktorá nebola inicializovaná v čase deklarácie, je známa ako konečná prázdna premenná. Finálnu prázdnu premennú nemôžeme inicializovať priamo. Namiesto toho ho musíme inicializovať pomocou konštruktora triedy. Je to užitočné v prípade, keď má používateľ nejaké údaje, ktoré nesmú byť zmenené inými, napríklad číslo PAN. Zvážte nasledujúci príklad:

 class Student{ int id; String name; final String PAN_CARD_NUMBER; ... } 
Viac informácií.

94) Môžeme inicializovať poslednú prázdnu premennú?

Áno, ak nie je statický, môžeme ho inicializovať v konštruktore. Ak je to statická prázdna konečná premenná, môže byť inicializovaná iba v statickom bloku. Viac informácií.


95) Môžete vyhlásiť hlavnú metódu za konečnú?

Áno, metódu main môžeme deklarovať ako verejnú statickú konečnú void main(String[] args){}.


96) Aký je výstup nasledujúceho programu Java?

 class Main { public static void main(String args[]){ final int i; i = 20; System.out.println(i); } } 

Výkon

 20 

Vysvetlenie

Pretože i je prázdna konečná premenná. Môže byť inicializovaný iba raz. Inicializovali sme ho na 20. Preto sa vytlačí 20.


97) Aký je výstup nasledujúceho programu 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(); } } 

Výkon

 Derived.java:11: error: getInfo() in Derived cannot override getInfo() in Base protected final void getInfo() ^ overridden method is final 1 error 

Vysvetlenie

Metóda getDetails() je konečná; preto ho nemožno v podtriede prepísať.


98) Môžeme vyhlásiť konštruktor za konečný?

Konštruktor nemôže byť nikdy vyhlásený za konečný, pretože sa nikdy nededí. Konštruktory nie sú bežné metódy; preto nemá zmysel deklarovať konštruktory ako konečné. Ak sa však o to pokúsite, kompilátor vyvolá chybu.


99) Môžeme vyhlásiť rozhranie za konečné?

Nie, nemôžeme deklarovať rozhranie ako konečné, pretože rozhranie musí byť implementované nejakou triedou, aby poskytla svoju definíciu. Preto nemá zmysel robiť konečné rozhranie. Ak sa však o to pokúsite, kompilátor zobrazí chybu.


100) Aký je rozdiel medzi konečnou metódou a abstraktnou metódou?

Hlavný rozdiel medzi konečnou metódou a abstraktnou metódou je v tom, že abstraktná metóda nemôže byť konečná, pretože ich musíme prepísať v podtriede, aby sme dali jej definíciu.