logo

300 kernvragen over Java-interviews | Set 1

90% zekerheid van interviewvragen

Er is een lijst met 300 kernvragen over Java-interviews. Als er een belangrijke Java-interviewvraag aan u is gesteld, kunt u deze in de sectie Stel vragen plaatsen. Wij verzekeren u dat u hier de 90% veelgestelde interviewvragen en antwoorden zult vinden.

De antwoorden op de Core Java-interviewvragen zijn kort en bondig. De belangrijkste Java-interviewvragen zijn onderverdeeld in Basisprincipes van Java-interviewvragen, OOPs-interviewvragen, String Handling-interviewvragen, Multithreading-interviewvragen, collectie-interviewvragen, JDBC-interviewvragen, enz.


1 2 3 4 5

Kern-Java: basisprincipes van Java-interviewvragen


1) Wat is Java?

Java is het hoogste niveau, objectgeoriënteerd , robuuste, veilige programmeertaal, platformonafhankelijk, krachtige, multithreaded en draagbare programmeertaal. Het is ontwikkeld door James Gosling in juni 1991. Het kan ook bekend staan ​​als het platform omdat het zijn eigen JRE en API biedt.


2) Wat zijn de verschillen tussen C++ en Java?

De verschillen tussen C++ en Java worden gegeven in de volgende tabel.

Vergelijkingsindex C++Java
Platform-onafhankelijk C++ is platformafhankelijk.Java is platformonafhankelijk.
Hoofdzakelijk gebruikt voor C++ wordt voornamelijk gebruikt voor systeemprogrammering.Java wordt voornamelijk gebruikt voor het programmeren van applicaties. Het wordt veel gebruikt in venster-, webgebaseerde, zakelijke en mobiele applicaties.
Ontwerpdoel C++ is ontworpen voor het programmeren van systemen en applicaties. Het was een verlengstuk van C-programmeertaal .Java is ontworpen en gemaakt als tolk voor afdruksystemen, maar werd later uitgebreid als ondersteunend netwerkcomputergebruik. Het is ontworpen met als doel eenvoudig te gebruiken en toegankelijk te zijn voor een breder publiek.
Ga naar C++ ondersteunt de goto-instructie.Java ondersteunt de goto-instructie niet.
Meerdere erfenissen C++ ondersteunt meervoudige overerving.Java ondersteunt geen meervoudige overerving via klasse. Het kan worden bereikt door interfaces in Java .
Overbelasting van de machinist C++ ondersteunt overbelasting van de operator .Java ondersteunt geen overbelasting van operators.
Wijzers C++ ondersteunt verwijzingen. U kunt een pointerprogramma schrijven in C++.Java ondersteunt pointer intern. U kunt het pointerprogramma echter niet in Java schrijven. Het betekent dat Java beperkte pointer-ondersteuning heeft in Java.
Samensteller en tolk C++ gebruikt alleen een compiler. C++ wordt gecompileerd en uitgevoerd met behulp van de compiler die de broncode omzet in machinecode. C++ is dus platformafhankelijk.Java gebruikt zowel compiler als interpreter. De Java-broncode wordt tijdens het compileren omgezet in bytecode. De tolk voert deze bytecode tijdens runtime uit en produceert uitvoer. Java wordt geïnterpreteerd en is daarom platformonafhankelijk.
Oproep op waarde en Oproep op referentie C++ ondersteunt zowel call by value als call by reference.Java ondersteunt alleen bellen op waarde. Er is geen call by reference in Java.
Structuur en Unie C++ ondersteunt structuren en vakbonden.Java ondersteunt geen structuren en vakbonden.
Draadondersteuning C++ heeft geen ingebouwde ondersteuning voor threads. Het is afhankelijk van bibliotheken van derden voor threadondersteuning.Java is ingebouwd draad steun.
Documentatie commentaar C++ ondersteunt geen documentatiecommentaar.Java ondersteunt documentatiecommentaar (/** ... */) om documentatie voor de Java-broncode te maken.
Virtueel trefwoord C++ ondersteunt een virtueel trefwoord, zodat we kunnen beslissen of een functie al dan niet wordt overschreven.Java heeft geen virtueel trefwoord. We kunnen standaard alle niet-statische methoden overschrijven. Met andere woorden: niet-statische methoden zijn standaard virtueel.
niet-ondertekende rechterverschuiving >>> C++ ondersteunt de operator >>> niet.Java ondersteunt een niet-ondertekende rechtse shift >>>-operator die bovenaan nul vult voor de negatieve getallen. Voor positieve getallen werkt het hetzelfde als de operator >>.
Erfenisboom C++ creëert altijd een nieuwe overervingsboom.Java gebruikt altijd één enkele overervingsboom omdat alle klassen het kind zijn van de Object-klasse in Java. De objectklasse is de root van de erfenis boom in Java.
Hardware C++ staat dichter bij hardware.Java is niet zo interactief met hardware.
Object-georiënteerd C++ is een objectgeoriënteerde taal. In de C-taal is een enkele roothiërarchie echter niet mogelijk.Java is ook een objectgeoriënteerd taal. Alles (behalve fundamentele typen) is echter een object in Java. Het is een enkele hoofdhiërarchie, omdat alles wordt afgeleid van java.lang.Object.

3) Maak een lijst van de kenmerken van de Java-programmeertaal.

Er zijn de volgende functies in Java-programmeertaal.

    Eenvoudig:Java is gemakkelijk te leren. De syntaxis van Java is gebaseerd op C++, wat het gemakkelijker maakt om het programma erin te schrijven.
    Objectgericht:Java volgt het objectgeoriënteerde paradigma dat ons in staat stelt onze code te behouden als de combinatie van verschillende soorten objecten die zowel gegevens als gedrag bevatten.
    Draagbaar:Java ondersteunt een read-once-write-anywhere-aanpak. Wij kunnen het Java-programma op iedere machine uitvoeren. Het Java-programma (.java) wordt geconverteerd naar bytecode (.class) die eenvoudig op elke machine kan worden uitgevoerd.
    Platformonafhankelijk:Java is een platformonafhankelijke programmeertaal. Het verschilt van andere programmeertalen zoals C en C++, waarvoor een platform nodig is om te worden uitgevoerd. Java wordt geleverd met een platform waarop de code wordt uitgevoerd. Java is niet afhankelijk van het uit te voeren besturingssysteem.
    Beveiligd:Java is beveiligd omdat het geen expliciete verwijzingen gebruikt. Java biedt ook het concept van ByteCode- en Exception-afhandeling, waardoor het veiliger wordt.
    Robuust:Java is een sterke programmeertaal omdat het gebruik maakt van krachtig geheugenbeheer. De concepten zoals automatische afvalinzameling, afhandeling van uitzonderingen, enz. maken het robuuster.
    Architectuur Neutraal:Java is architectonisch neutraal omdat het niet afhankelijk is van de architectuur. In C kan de grootte van gegevenstypen variëren afhankelijk van de architectuur (32 bit of 64 bit) die in Java niet bestaat.
    geïnterpreteerd:Java gebruikt de Just-in-time (JIT)-interpreter samen met de compiler voor de programma-uitvoering.
    Hoge performantie:Java is sneller dan andere traditioneel geïnterpreteerde programmeertalen, omdat Java-bytecode 'dicht' bij de native code ligt. Het is nog steeds een beetje langzamer dan een gecompileerde taal (bijvoorbeeld C++).
    Meerdradig:We kunnen Java-programma's schrijven die veel taken tegelijk kunnen uitvoeren door meerdere threads te definiëren. Het belangrijkste voordeel van multi-threading is dat het niet voor elke thread geheugen in beslag neemt. Het deelt een gemeenschappelijk geheugengebied. Threads zijn belangrijk voor multimedia, webapplicaties, enz.
    Gedistribueerd:Java wordt gedistribueerd omdat het gebruikers in staat stelt gedistribueerde applicaties in Java te maken. RMI en EJB worden gebruikt voor het maken van gedistribueerde applicaties. Met deze functie van Java hebben we toegang tot bestanden door de methoden vanaf elke machine op internet aan te roepen.
    Dynamisch:Java is een dynamische taal. Het ondersteunt het dynamisch laden van klassen. Het betekent dat lessen op aanvraag worden geladen. Het ondersteunt ook functies uit de moedertalen, d.w.z. C en C++.

4) Wat versta je onder Java virtuele machine?

Java virtuele machine is een virtuele machine waarmee de computer het Java-programma kan uitvoeren. JVM fungeert als een runtime-engine die de hoofdmethode aanroept die aanwezig is in de Java-code. JVM is de specificatie die in het computersysteem moet worden geïmplementeerd. De Java-code wordt door JVM gecompileerd als een bytecode die machine-onafhankelijk is en dicht bij de native code ligt.


5) Wat is het verschil tussen JDK, JRE en JVM?

JVM

JVM is een acroniem voor Java Virtual Machine; het is een abstracte machine die de runtime-omgeving biedt waarin Java-bytecode kan worden uitgevoerd. Het is een specificatie die de werking van Java Virtual Machine specificeert. De implementatie ervan is verzorgd door Oracle en andere bedrijven. De implementatie ervan staat bekend als JRE.

JVM's zijn beschikbaar voor veel hardware- en softwareplatforms (JVM is dus platformafhankelijk). Het is een runtime-instantie die wordt gemaakt wanneer we de Java-klasse uitvoeren. Er zijn drie begrippen van de JVM: specificatie, implementatie en instance.

JRE

JRE staat voor Java Runtime Environment. Het is de implementatie van JVM. De Java Runtime Environment is een set softwaretools die worden gebruikt voor het ontwikkelen van Java-applicaties. Het wordt gebruikt om de runtime-omgeving te bieden. Het is de implementatie van JVM. Het bestaat fysiek. Het bevat een reeks bibliotheken en andere bestanden die JVM tijdens runtime gebruikt.

JDK

JDK is een acroniem voor Java Development Kit. Het is een softwareontwikkelomgeving die wordt gebruikt om Java-applicaties en applets te ontwikkelen. Het bestaat fysiek. Het bevat JRE+-ontwikkeltools. JDK is een implementatie van een van de onderstaande Java-platforms, uitgegeven door Oracle Corporation:

  • Standaard editie Java-platform
  • Enterprise Edition Java-platform
  • Micro-editie Java-platform
Meer details.

6) Hoeveel soorten geheugengebieden worden door JVM toegewezen?

Vele types:

    Klasse (methode) gebied:Class Area slaat structuren per klasse op, zoals de runtime-constantepool, het veld, de methodegegevens en de code voor methoden.Hoop:Het is het runtimegegevensgebied waarin het geheugen aan de objecten wordt toegewezenStapel:Java Stack slaat frames op. Het bevat lokale variabelen en gedeeltelijke resultaten, en speelt een rol bij het aanroepen en retourneren van methoden. Elke thread heeft een privé-JVM-stack, die tegelijkertijd met de thread wordt gemaakt. Elke keer dat een methode wordt aangeroepen, wordt er een nieuw frame gemaakt. Een frame wordt vernietigd wanneer de aanroep van de methode is voltooid.Programmateller registreren:Het PC-register (programmateller) bevat het adres van de Java Virtual Machine-instructie die momenteel wordt uitgevoerd.Native methodestapel:Het bevat alle native methoden die in de applicatie worden gebruikt.
Meer details.

7) Wat is een JIT-compiler?

Just-In-Time(JIT)-compiler: Het wordt gebruikt om de prestaties te verbeteren. JIT compileert delen van de bytecode die tegelijkertijd vergelijkbare functionaliteit hebben, en vermindert daardoor de hoeveelheid tijd die nodig is voor compilatie. Hier verwijst de term compiler naar een vertaler van de instructieset van een Java virtuele machine (JVM) naar de instructieset van een specifieke CPU.


8) Wat is het platform?

Een platform is de hardware- of softwareomgeving waarin een stukje software wordt uitgevoerd. Er zijn twee soorten platforms: softwaregebaseerd en hardwaregebaseerd. Java biedt het softwaregebaseerde platform.


9) Wat zijn de belangrijkste verschillen tussen het Java-platform en andere platforms?

Er zijn de volgende verschillen tussen het Java-platform en andere platforms.

  • Java is het op software gebaseerde platform, terwijl andere platforms de hardwareplatforms of softwaregebaseerde platforms kunnen zijn.
  • Java wordt uitgevoerd bovenop andere hardwareplatforms, terwijl andere platforms alleen de hardwarecomponenten kunnen hebben.

10) Wat geeft Java zijn 'eenmalig schrijven en overal uitvoeren'-karakter?

De bytecode. De Java-compiler converteert de Java-programma's naar het klassenbestand (Byte Code), de tussentaal tussen broncode en machinecode. Deze bytecode is niet platformspecifiek en kan op elke computer worden uitgevoerd.


11) Wat is klassenlader?

Classloader is een subsysteem van JVM dat wordt gebruikt om klassebestanden te laden. Telkens wanneer we het Java-programma uitvoeren, wordt het eerst door de classloader geladen. Er zijn drie ingebouwde classloaders in Java.

    Bootstrap ClassLoader: Dit is de eerste classloader die de superklasse is van Extension classloader. Het laadt de rt.jar bestand dat alle klassebestanden van Java Standard Edition bevat, zoals java.lang pakketklassen, java.net pakketklassen, java.util pakketklassen, java.io pakketklassen, java.sql pakketklassen, enz.Extensie ClassLoader: Dit is de onderliggende klassenlader van Bootstrap en de bovenliggende klassenlader van de systeemklassenlader. Het laadt de jar-bestanden die zich daarin bevinden $JAVA_HOME/jre/lib/ext map.Systeem/Applicatie ClassLoader: Dit is de onderliggende classloader van Extension classloader. Het laadt de klassenbestanden van het klassenpad. Standaard is het klassenpad ingesteld op de huidige map. U kunt het klassenpad wijzigen met de schakelaar '-cp' of '-classpath'. Het is ook bekend als Application classloader.

12) Is de lege .java-bestandsnaam een ​​geldige bronbestandsnaam?

Ja, Java maakt het mogelijk om ons Java-bestand op te slaan door .Java alleen, we moeten het compileren door javac .java en voorbij rennen Java-klassenaam Laten we een eenvoudig voorbeeld nemen:

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

compileer het door javac .java

voer het door Java A


13) Is het trefwoord delete, next, main, exit of null in Java?

Nee.


14) Als ik geen argumenten op de opdrachtregel geef, wat wordt dan de waarde die is opgeslagen in de String-array doorgegeven aan de methode main(), leeg of NULL?

Het is leeg, maar niet nul.


15) Wat moet ik doen als ik statische openbare leegte schrijf in plaats van openbare statische leegte?

Het programma wordt correct gecompileerd en uitgevoerd, omdat de volgorde van de specificaties er niet toe doet in Java.


16) Wat is de standaardwaarde van de lokale variabelen?

De lokale variabelen worden op geen enkele standaardwaarde geïnitialiseerd, noch primitieven, noch objectreferenties.


17) Wat zijn de verschillende toegangsspecificaties in Java?

In Java zijn toegangsspecificaties de trefwoorden die worden gebruikt om het toegangsbereik van de methode, klasse of een variabele te definiëren. In Java worden hieronder vier toegangsspecificaties gegeven.

    OpenbaarDe klassen, methoden of variabelen die als openbaar zijn gedefinieerd, zijn toegankelijk voor elke klasse of methode.BeschermdProtected is toegankelijk voor de klasse van hetzelfde pakket, of voor de subklasse van deze klasse, of binnen dezelfde klasse.StandaardStandaard zijn alleen toegankelijk binnen het pakket. Standaard hebben alle klassen, methoden en variabelen een standaardbereik.PrivaatDe privéklasse, methoden of variabelen die als privé zijn gedefinieerd, zijn alleen binnen de klasse toegankelijk.

18) Wat is het doel van statische methoden en variabelen?

De methoden of variabelen die als statisch zijn gedefinieerd, worden gedeeld door alle objecten van de klasse. De static is het deel van de klasse en niet van het object. De statische variabelen worden opgeslagen in het klassengebied en we hoeven het object niet te maken om toegang te krijgen tot dergelijke variabelen. Daarom wordt statisch gebruikt in het geval dat we variabelen of methoden moeten definiëren die gemeenschappelijk zijn voor alle objecten van de klasse.

In de klas die bijvoorbeeld de verzameling studenten van een hogeschool simuleert, is de naam van de hogeschool het gemeenschappelijke attribuut voor alle studenten. Daarom wordt de naam van de universiteit gedefinieerd als statisch .


19) Wat zijn de voordelen van pakketten in Java?

Er zijn verschillende voordelen verbonden aan het definiëren van pakketten in Java.

  • Pakketten vermijden naamconflicten.
  • Het pakket biedt eenvoudiger toegangscontrole.
  • We kunnen ook de verborgen klassen hebben die buiten niet zichtbaar zijn en door het pakket worden gebruikt.
  • Het is gemakkelijker om de gerelateerde klassen te vinden.

20) Wat is de uitvoer van het volgende Java-programma?

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

De uitvoer van de bovenstaande code zal zijn

 30Javatpoint Javatpoint1020 

Uitleg

In het eerste geval worden 10 en 20 behandeld als getallen en opgeteld tot 30. Nu wordt hun som 30 behandeld als de string en samengevoegd met de string Javapunt . Daarom zal de uitvoer zijn 30Javatpunt .

In het tweede geval wordt de string Javatpoint samengevoegd met 10 om de string te zijn Javatpoint10 die dan wordt samengevoegd met 20 to be Javatpoint1020 .


21) Wat is de uitvoer van het volgende Java-programma?

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

De uitvoer van de bovenstaande code zal zijn

 200Javatpoint Javatpoint200 

Uitleg

In het eerste geval worden de getallen 10 en 20 eerst vermenigvuldigd en vervolgens wordt het resultaat 200 behandeld als de string en samengevoegd met de string Javapunt om de uitvoer te produceren 200Javatpunt .

In het tweede geval worden de getallen 10 en 20 eerst vermenigvuldigd tot 200, omdat de prioriteit van de vermenigvuldiging hoger is dan de optelling. Het resultaat 200 wordt behandeld als de tekenreeks en samengevoegd met de tekenreeks Javapunt om de uitvoer te produceren als Javatpoint200 .


22) Wat is de uitvoer van het volgende Java-programma?

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

De bovenstaande code geeft een compileerfout omdat de for-lus in het tweede deel een Booleaanse waarde vereist en we een geheel getal opgeven, d.w.z. 0.


Kern Java - OOPs-concepten: initiële OOPs-interviewvragen

Er worden meer dan 50 OOPs-interviewvragen (Object-Oriented Programming and System) gegeven. Voor een beter begrip zijn ze echter in veel secties gecategoriseerd, zoals constructor-interviewvragen, statische interviewvragen, erfenis-interviewvragen, abstractie-interviewvragen, polymorfisme-interviewvragen, enz.


23) Wat is objectgeoriënteerd paradigma?

Het is een programmeerparadigma gebaseerd op objecten waarvan de gegevens en methoden zijn gedefinieerd in de klasse waartoe het behoort. Het objectgeoriënteerde paradigma heeft tot doel de voordelen van modulariteit en herbruikbaarheid te integreren. Objecten zijn de instanties van klassen die met elkaar samenwerken om applicaties en programma's te ontwerpen. Er zijn de volgende kenmerken van het objectgeoriënteerde paradigma.

  • Volgt de bottom-up benadering bij het ontwerpen van programma's.
  • Focus op gegevens met methoden om met de gegevens van het object te werken
  • Omvat het concept zoals inkapseling en abstractie, waardoor de complexiteit voor de gebruiker wordt verborgen en alleen functionaliteit wordt getoond.
  • Implementeert de real-time benadering zoals overerving, abstractie, enz.
  • De voorbeelden van het objectgeoriënteerde paradigma zijn C++, Simula, Smalltalk, Python, C#, enz.

24) Wat is een voorwerp?

Het object is de realtime entiteit met een bepaalde status en gedrag. In Java is Object een instantie van de klasse met de instantievariabelen als de toestand van het object en de methoden als het gedrag van het object. Het object van een klasse kan worden gemaakt met behulp van de nieuw trefwoord.


25) Wat is het verschil tussen een objectgeoriënteerde programmeertaal en een objectgebaseerde programmeertaal?

Er zijn de volgende fundamentele verschillen tussen de objectgeoriënteerde taal en de objectgebaseerde taal.

  • Objectgeoriënteerde talen volgen alle concepten van OOP's, terwijl de objectgebaseerde taal niet alle concepten van OOP's volgt, zoals overerving en polymorfisme.
  • Objectgeoriënteerde talen hebben niet de ingebouwde objecten, terwijl objectgebaseerde talen de ingebouwde objecten hebben, JavaScript heeft bijvoorbeeld een vensterobject.
  • Voorbeelden van objectgeoriënteerd programmeren zijn Java, C#, Smalltalk, enz. Terwijl de voorbeelden van objectgebaseerde talen JavaScript, VBScript, enz. zijn.

26) Wat zal de initiële waarde zijn van een objectreferentie die is gedefinieerd als een instantievariabele?

Alle objectreferenties worden in Java geïnitialiseerd op null.


Kern Java - OOPs-concepten: interviewvragen voor constructeurs


27) Wat is de constructor?

De constructor kan worden gedefinieerd als het speciale type methode dat wordt gebruikt om de toestand van een object te initialiseren. Het wordt aangeroepen wanneer de klasse wordt geïnstantieerd en het geheugen wordt toegewezen aan het object. Elke keer wordt er een object gemaakt met behulp van de nieuw trefwoord, wordt de standaardconstructor van de klasse aangeroepen. De naam van de constructor moet vergelijkbaar zijn met de klassenaam. De constructor mag geen expliciet retourtype hebben.

Meer details.

28) Hoeveel soorten constructors worden er in Java gebruikt?

Op basis van de parameters die in de constructors worden doorgegeven, zijn er twee typen constructors in Java.

    Standaardconstructeur:de standaardconstructor is degene die geen enkele waarde accepteert. De standaardconstructor wordt voornamelijk gebruikt om de instantievariabele te initialiseren met de standaardwaarden. Het kan ook worden gebruikt voor het uitvoeren van een nuttige taak bij het maken van objecten. Een standaardconstructor wordt impliciet aangeroepen door de compiler als er geen constructor in de klasse is gedefinieerd.Geparametriseerde constructor:De geparametriseerde constructor is degene die de instantievariabelen met de gegeven waarden kan initialiseren. Met andere woorden, we kunnen zeggen dat de constructors die de argumenten kunnen accepteren, geparametriseerde constructors worden genoemd.
Java-constructeurs

29) Wat is het doel van een standaardconstructor?

Het doel van de standaardconstructor is om de standaardwaarde aan de objecten toe te wijzen. De Java-compiler maakt impliciet een standaardconstructor als er geen constructor in de klasse aanwezig is.

 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(); } } 
Test het nu

Uitgang:

 0 null 0 null 

Uitleg: In de bovenstaande klasse maak je geen constructor, dus de compiler biedt je een standaardconstructor. Hier worden 0- en null-waarden geleverd door de standaardconstructor.

Java-standaardconstructor
Meer details.

30) Geeft de constructor een waarde terug?

Jaren: ja, de constructor retourneert impliciet de huidige instantie van de klasse (u kunt geen expliciet retourtype gebruiken met de constructor). Meer details.


31) Wordt de constructor geërfd?

Nee, de constructor wordt niet overgenomen.


32) Kun je een constructorfinale maken?

Nee, de constructor kan niet definitief zijn.

wachtrij in Java

33) Kunnen we de constructeurs overbelasten?

Ja, de constructors kunnen overbelast raken door het aantal door de constructor geaccepteerde argumenten te wijzigen of door het gegevenstype van de parameters te wijzigen. Beschouw het volgende voorbeeld.

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

In het bovenstaande programma wordt de constructor Test overbelast met een andere constructor. Bij de eerste aanroep van de constructor wordt de constructor met één argument aangeroepen, en ik zal worden geïnitialiseerd met de waarde 10. Bij de tweede aanroep van de constructor wordt echter de constructor met de 2 argumenten aangeroepen, en ik zal worden geïnitialiseerd met de waarde 15.


34) Wat versta je onder kopieerconstructor in Java?

Er is geen kopieerconstructor in Java. We kunnen de waarden echter van het ene object naar het andere kopiëren, zoals de kopieerconstructor in C++.

Er zijn veel manieren om de waarden van het ene object naar het andere te kopiëren in Java. Zij zijn:

  • Door constructeur
  • Door de waarden van het ene object aan het andere toe te wijzen
  • Via de clone()-methode van de objectklasse

In dit voorbeeld gaan we de waarden van het ene object naar het andere kopiëren met behulp van de Java-constructor.

 //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(); } } 
Test het nu

Uitgang:

 111 Karan 111 Karan 

35) Wat zijn de verschillen tussen de constructors en methoden?

Er zijn veel verschillen tussen constructors en methoden. Ze worden hieronder gegeven.

Java-constructeurJava-methode
Een constructor wordt gebruikt om de toestand van een object te initialiseren.Er wordt een methode gebruikt om het gedrag van een object bloot te leggen.
Een constructor mag geen retourtype hebben.Een methode moet een retourtype hebben.
De constructor wordt impliciet aangeroepen.De methode wordt expliciet aangeroepen.
De Java-compiler biedt een standaardconstructor als er geen constructor in een klasse aanwezig is.De methode wordt in ieder geval niet door de compiler geleverd.
De constructornaam moet hetzelfde zijn als de klassenaam.De naam van de methode kan al dan niet hetzelfde zijn als de klassenaam.

Java-constructeurs versus methoden

36) Wat is de uitvoer van het volgende Java-programma?

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

De uitvoer van het volgende programma is:

 a = 10 b = 15 

Hier wordt het gegevenstype van de variabelen a en b, d.w.z. byte, gepromoveerd naar int, en wordt de eerste geparametriseerde constructor met de twee integer-parameters aangeroepen.


37) Wat is de uitvoer van het volgende Java-programma?

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

De uitvoer van het programma is 0 omdat de variabele i intern op 0 is geïnitialiseerd. Omdat we weten dat een standaardconstructor impliciet wordt aangeroepen als er geen constructor in de klasse is, wordt de variabele i geïnitialiseerd op 0 omdat er geen constructor in de klasse is.


38) Wat is de uitvoer van het volgende Java-programma?

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

Er is een compilerfout in het programma omdat er een aanroep is naar de standaardconstructor in de hoofdmethode die niet aanwezig is in de klasse. Er is echter slechts één geparametriseerde constructor in de klasse Test. Daarom wordt er impliciet geen standaardconstructor aangeroepen door de constructor.


Core Java - OOPs-concepten: statische trefwoordinterviewvragen


39) Wat is de statische variabele?

De statische variabele wordt gebruikt om te verwijzen naar de gemeenschappelijke eigenschap van alle objecten (die niet uniek is voor elk object), bijvoorbeeld de bedrijfsnaam van werknemers, de naam van de universiteit van studenten, enz. De statische variabele krijgt slechts één keer geheugen in het klasgebied op het tijdstip waarop de les wordt geladen. Het gebruik van een statische variabele maakt uw programma geheugenefficiënter (het bespaart geheugen). Statische variabele behoort tot de klasse en niet tot het object.

 //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(); } } 
Test het nu
 Output:111 Karan ITS 222 Aryan ITS 

Meer details.

40) Wat is de statische methode?

  • Een statische methode behoort tot de klasse en niet tot het object.
  • Het is niet nodig om het object te maken om de statische methoden aan te roepen.
  • Een statische methode kan toegang krijgen tot de waarde van de statische variabele en deze wijzigen.
Meer details.

41) Wat zijn de beperkingen die worden toegepast op de statische Java-methoden?

Er worden twee belangrijke beperkingen toegepast op de statische methoden.

  • De statische methode kan geen niet-statisch gegevenslid gebruiken of de niet-statische methode rechtstreeks aanroepen.
  • this en super kunnen niet in een statische context worden gebruikt, omdat ze niet-statisch zijn.

42) Waarom is de hoofdmethode statisch?

Omdat het object de statische methode niet hoeft aan te roepen. Als we de main-methode niet-statisch maken, zal JVM eerst zijn object moeten maken en vervolgens de main()-methode moeten aanroepen, wat zal leiden tot de extra geheugentoewijzing. Meer details.


43) Kunnen we de statische methoden terzijde schuiven?

Nee, we kunnen statische methoden niet negeren.

44) Wat is het statische blok?

Statisch blok wordt gebruikt om het statische gegevenslid te initialiseren. Het wordt vóór de hoofdmethode uitgevoerd, op het moment van het laden van de klasse.

 class A2{ static{System.out.println('static block is invoked');} public static void main(String args[]){ System.out.println('Hello main'); } } 
Test het nu
 Output: static block is invoked Hello main 

Meer details.

45) Kunnen we een programma uitvoeren zonder de methode main()?

Ans) Nee, vóór JDK 1.7 was het mogelijk om het statische blok te gebruiken. Sinds JDK 1.7 is dit niet meer mogelijk. Meer details.


46) Wat als de statische modifier wordt verwijderd uit de handtekening van de hoofdmethode?

Programma compileert. Tijdens runtime genereert het echter de foutmelding 'NoSuchMethodError.'


47) Wat is het verschil tussen de statische (klasse)methode en de instancemethode?

statische of klassenmethodeinstantie methode
1) Een methode die als statisch wordt gedeclareerd, staat bekend als de statische methode.Een methode die niet als statisch is gedeclareerd, staat bekend als de instancemethode.
2) We hoeven de objecten niet te maken om de statische methoden aan te roepen.Het object is vereist om de instantiemethoden aan te roepen.
3) Niet-statische (instance) leden zijn niet rechtstreeks toegankelijk in de statische context (statische methode, statisch blok en statisch geneste klasse).Statische en niet-statische variabelen zijn beide toegankelijk in instantiemethoden.
4)Bijvoorbeeld: public static int cube(int n){ return n*n*n;}Bijvoorbeeld: public void msg(){...}.

48) Kunnen we constructeurs statisch maken?

Zoals we weten, behoort de statische context (methode, blok of variabele) tot de klasse, niet tot het object. Omdat constructors alleen worden aangeroepen wanneer het object wordt gemaakt, heeft het geen zin om de constructors statisch te maken. Als u dit echter probeert, geeft de compiler de compilerfout weer.


49) Kunnen we de abstracte methoden statisch maken in Java?

Als we in Java de abstracte methoden statisch maken, wordt het onderdeel van de klasse en kunnen we het direct noemen, wat niet nodig is. Het aanroepen van een ongedefinieerde methode is volkomen nutteloos en daarom niet toegestaan.


50) Kunnen we de statische variabelen en methoden in een abstracte klasse declareren?

Ja, we kunnen statische variabelen en methoden declareren in een abstracte methode. Omdat we weten dat er geen vereiste is om het object toegang te geven tot de statische context, kunnen we daarom toegang krijgen tot de statische context die binnen de abstracte klasse is gedeclareerd door de naam van de abstracte klasse te gebruiken. Beschouw het volgende voorbeeld.

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

Uitvoer

 hi !! I am good !! i = 102 

Kern Java - OOPs-concepten: interviewvragen over erfenis


51) Wat is dit trefwoord in java?

De dit trefwoord is een referentievariabele die verwijst naar het huidige object. Er zijn verschillende toepassingen van dit trefwoord in Java. Het kan worden gebruikt om te verwijzen naar huidige klasse-eigenschappen, zoals instantiemethoden, variabelen, constructors, enz. Het kan ook als argument worden doorgegeven aan de methoden of constructors. Het kan ook vanuit de methode worden geretourneerd als de huidige klasse-instantie.

java dit zoekwoord
Meer details.

52) Wat zijn de belangrijkste toepassingen van dit zoekwoord?

Er zijn de volgende toepassingen van dit trefwoord.

    ditkan worden gebruikt om naar de huidige klasse-instantievariabele te verwijzen.ditkan worden gebruikt om de huidige klassenmethode aan te roepen (impliciet)dit()kan worden gebruikt om de huidige klassenconstructor aan te roepen.ditkan als argument worden doorgegeven in de methodeaanroep.ditkan als argument worden doorgegeven in de constructoraanroep.ditkan worden gebruikt om de huidige klasse-instantie van de methode te retourneren.

53) Kunnen we de verwijzing toewijzen aan dit variabel?

Nee, dit kan aan geen enkele waarde worden toegewezen, omdat het altijd verwijst naar het huidige klasseobject en dit de laatste referentie is in Java. Als we dit echter proberen, wordt de compilerfout weergegeven. Beschouw het volgende voorbeeld.

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

Uitvoer

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

54) Kan dit trefwoord worden gebruikt om statische leden te verwijzen?

Ja, het is mogelijk om dit trefwoord te gebruiken om naar statische leden te verwijzen, omdat dit slechts een referentievariabele is die naar het huidige klasseobject verwijst. Zoals we echter weten, is het niet nodig om toegang te krijgen tot statische variabelen via objecten. Daarom is het niet de beste praktijk om dit te gebruiken om statische leden te verwijzen. Beschouw het volgende voorbeeld.

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

Uitvoer

 10 

55) Hoe kan constructor-chaining worden gedaan met behulp van dit trefwoord?

Door constructorkoppelingen kunnen we een constructor aanroepen vanuit een andere constructor van de klasse met betrekking tot het huidige klasseobject. We kunnen dit trefwoord gebruiken om constructor-chaining binnen dezelfde klasse uit te voeren. Bekijk het volgende voorbeeld, waarin wordt geïllustreerd hoe we dit trefwoord kunnen gebruiken om constructorketens te realiseren.

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

Uitvoer

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

56) Wat zijn de voordelen als je dit in een methode doorgeeft in plaats van in het huidige klassenobject zelf?

Zoals we weten verwijst dit naar het huidige klasseobject en moet het daarom vergelijkbaar zijn met het huidige klasseobject. Er kunnen echter twee belangrijke voordelen zijn als u dit in een methode doorgeeft in plaats van in het huidige klasseobject.

  • dit is een laatste variabele. Daarom kan dit niet aan een nieuwe waarde worden toegewezen, terwijl het huidige klasseobject mogelijk niet definitief is en kan worden gewijzigd.
  • dit kan worden gebruikt in het gesynchroniseerde blok.

57) Wat is de erfenis?

Overerving is een mechanisme waarmee een object alle eigenschappen en gedrag van een ander object van een andere klasse verwerft. Het wordt gebruikt voor herbruikbaarheid van code en het overschrijven van methoden. Het idee achter overerving in Java is dat je nieuwe klassen kunt maken die voortbouwen op bestaande klassen. Wanneer u overerft van een bestaande klasse, kunt u methoden en velden van de bovenliggende klasse opnieuw gebruiken. Bovendien kunt u ook nieuwe methoden en velden aan uw huidige klasse toevoegen. Overerving vertegenwoordigt de IS-A-relatie, ook wel een ouder-kindrelatie genoemd.

Er zijn vijf soorten overerving op Java.

  • Overerving op één niveau
  • Overerving op meerdere niveaus
  • Meerdere erfenis
  • Hiërarchische erfenis
  • Hybride erfenis

Meervoudige overerving wordt niet ondersteund in Java via klasse.

Meer details.

58) Waarom wordt overerving gebruikt in Java?

Er zijn verschillende voordelen van het gebruik van overerving in Java, die hieronder worden gegeven.

  • Overerving zorgt voor herbruikbaarheid van code. De afgeleide klasse hoeft de methode van de basisklasse niet opnieuw te definiëren, tenzij deze de specifieke implementatie van de methode moet bieden.
  • Runtime-polymorfisme kan niet worden bereikt zonder gebruik te maken van overerving.
  • We kunnen de overerving van klassen simuleren met de realtime objecten, waardoor OOP's realistischer worden.
  • Overerving zorgt voor het verbergen van gegevens. De basisklasse kan bepaalde gegevens voor de afgeleide klasse verbergen door deze privé te maken.
  • Het overschrijven van methoden kan niet worden bereikt zonder overerving. Door methode te overschrijven kunnen we een specifieke implementatie geven van een basismethode die in de basisklasse zit.

59) Welke klasse is de superklasse voor alle klassen?

De objectklasse is de superklasse van alle andere klassen in Java.


60) Waarom wordt meervoudige overerving niet ondersteund in Java?

Om de complexiteit te verminderen en de taal te vereenvoudigen, wordt meervoudige overerving niet ondersteund in Java. Beschouw een scenario waarin A, B en C drie klassen zijn. De C-klasse erft de A- en B-klassen. Als klassen A en B dezelfde methode hebben en u deze aanroept vanuit een onderliggend klasseobject, zal er onduidelijkheid bestaan ​​over het aanroepen van de methode van klasse A of B.

Omdat de compileerfouten beter zijn dan runtimefouten, geeft Java een compileerfout weer als u twee klassen erft. Dus of u nu dezelfde of een andere methode gebruikt, er zal een compileerfout optreden.

 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? } } 
Test het nu
 Compile Time Error 

61) Wat is aggregatie?

Aggregatie kan worden gedefinieerd als de relatie tussen twee klassen waarbij de aggregatieklasse een verwijzing bevat naar de klasse waarvan deze eigenaar is. Aggregatie kan het beste worden omschreven als een heeft een relatie. De verzamelklasse Werknemer met verschillende velden, zoals leeftijd, naam en salaris, bevat bijvoorbeeld ook een object uit de adresklasse met verschillende velden, zoals adresregel 1, stad, staat en pincode. Met andere woorden, we kunnen zeggen dat Werknemer (klasse) een object van de klasse Adres heeft. Beschouw het volgende voorbeeld.

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

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

Uitvoer

 111 varun gzb UP india 112 arun gno UP india 

62) Wat is compositie?

Het vasthouden van de referentie van een klasse binnen een andere klasse staat bekend als compositie. Wanneer een object het andere object bevat en het ingesloten object niet kan bestaan ​​zonder het bestaan ​​van een containerobject, wordt dit compositie genoemd. Met andere woorden, we kunnen zeggen dat compositie het specifieke geval is van aggregatie, dat een sterkere relatie tussen twee objecten vertegenwoordigt. Voorbeeld: Een klas bevat studenten. Een student kan niet bestaan ​​zonder klas. Er bestaat een compositie tussen klas en leerlingen.


63) Wat is het verschil tussen aggregatie en samenstelling?

Aggregatie vertegenwoordigt de zwakke relatie, terwijl compositie de sterke relatie vertegenwoordigt. De fiets heeft bijvoorbeeld een indicator (aggregatie), maar de fiets heeft een motor (compositie).


64) Waarom ondersteunt Java geen pointers?

De pointer is een variabele die verwijst naar het geheugenadres. Ze worden niet in Java gebruikt omdat ze onveilig (onbeveiligd) en complex zijn om te begrijpen.


65) Wat is super in Java?

De super trefwoord in Java is een referentievariabele die wordt gebruikt om naar het directe bovenliggende klasseobject te verwijzen. Telkens wanneer u de instantie van de subklasse maakt, wordt er impliciet een instantie van de bovenliggende klasse gemaakt waarnaar wordt verwezen door een superreferentievariabele. De super() wordt impliciet aangeroepen in de klassenconstructor door de compiler als er geen super of dit is.

 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(); } } 
Test het nu

Uitgang:

 animal is created dog is created 
Meer details.

66) Hoe kan constructor-chaining worden gedaan met behulp van het super-trefwoord?

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

Uitvoer

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

67) Wat zijn de belangrijkste toepassingen van het superzoekwoord?

Er zijn de volgende toepassingen van het superzoekwoord.

  • super kan worden gebruikt om te verwijzen naar de instantievariabele van de directe bovenliggende klasse.
  • super kan worden gebruikt om de directe bovenliggende klassemethode aan te roepen.
  • super() kan worden gebruikt om de directe ouderklasseconstructor aan te roepen.

68) Wat zijn de verschillen tussen dit zoekwoord en het superzoekwoord?

Er zijn de volgende verschillen tussen dit zoekwoord en het superzoekwoord.

  • Het super-trefwoord verwijst altijd naar de bovenliggende klassencontexten, terwijl dit trefwoord altijd naar de huidige klassencontext verwijst.
  • Het super trefwoord wordt voornamelijk gebruikt voor het initialiseren van de basisklassevariabelen binnen de afgeleide klasseconstructor, terwijl dit trefwoord voornamelijk wordt gebruikt om onderscheid te maken tussen lokale en instantievariabelen wanneer het wordt doorgegeven in de klassenconstructor.
  • De super en dit moeten de eerste instructie binnen de constructor zijn, anders zal de compiler een fout genereren.

69) Wat is de uitvoer van het volgende Java-programma?

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

Uitvoer

 Person class constructor called Employee class constructor called 

Uitleg

De super() wordt impliciet aangeroepen door de compiler als er geen super() of this() expliciet is opgenomen in de afgeleide klassenconstructor. Daarom wordt in dit geval eerst de klasseconstructor Person aangeroepen en vervolgens de klasseconstructor Employee.


70) Kun je this() en super() beide in een constructor gebruiken?

Nee, omdat this() en super() de eerste instructie in de klassenconstructor moeten zijn.

Voorbeeld:

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

Uitgang:

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

71)Wat is het klonen van objecten?

Het klonen van objecten wordt gebruikt om de exacte kopie van een object te maken. De methode clone() van de klasse Object wordt gebruikt om een ​​object te klonen. De java.lang.Kloonbaar interface moet worden geïmplementeerd door de klasse waarvan we de objectkloon willen maken. Als we de Cloneable-interface niet implementeren, genereert de clone()-methode CloneNotSupportedException.

 protected Object clone() throws CloneNotSupportedException 
Meer details.

Kern Java - OOPs-concepten: overbelasting van interviewvragen


72) Wat is overbelasting van methoden?

Overbelasting van methoden is de polymorfismetechniek waarmee we meerdere methoden kunnen maken met dezelfde naam maar met een verschillende signatuur. We kunnen methode-overbelasting op twee manieren bereiken.

  • Door het aantal argumenten te wijzigen
  • Door het gegevenstype van argumenten te wijzigen

Overbelasting van methoden verhoogt de leesbaarheid van het programma. Methode-overbelasting wordt uitgevoerd om het programma snel te achterhalen.

Meer details.

73) Waarom is overbelasting van de methode niet mogelijk door het retourneringstype in Java te wijzigen?

In Java is overbelasting van methoden niet mogelijk door het retourtype van het programma te wijzigen om dubbelzinnigheid te voorkomen.

 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 }} 
Test het nu

Uitgang:

 Compile Time Error: method add(int, int) is already defined in class Adder 
Meer details.

74) Kunnen we de methoden overbelasten door ze statisch te maken?

Nee, we kunnen de methoden niet overbelasten door er alleen maar het statische trefwoord op toe te passen (het aantal parameters en typen zijn hetzelfde). Beschouw het volgende voorbeeld.

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

Uitvoer

 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) Kunnen we de methode main() overbelasten?

Ja, we kunnen een willekeurig aantal hoofdmethoden in een Java-programma hebben door methode-overbelasting te gebruiken.

Meer details.

76) Wat is overbelasting van methoden bij typepromotie?

Met typepromotie is overbelasting van methoden, we bedoelen dat het ene gegevenstype impliciet naar een ander gegevenstype kan worden gepromoveerd als er geen exacte overeenkomst wordt gevonden.

Overbelasting van Java-methode met typepromotie

Zoals weergegeven in het bovenstaande diagram, kan de byte worden gepromoveerd naar short, int, long, float of double. Het korte datatype kan worden gepromoveerd tot int, long, float of double. Het char-datatype kan worden gepromoveerd naar int, long, float of double enzovoort. Beschouw het volgende voorbeeld.

 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); } } 
Test het nu

Uitvoer

 40 60 

77) Wat is de uitvoer van het volgende Java-programma?

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

Uitvoer

 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 

Uitleg

Er zijn twee methoden gedefinieerd met dezelfde naam, namelijk som. De eerste methode accepteert het type geheel getal en lang, terwijl de tweede methode lang en het type geheel getal accepteert. De doorgegeven parameters zijn a = 20, b = 20. We kunnen niet zeggen welke methode zal worden aangeroepen, omdat er geen duidelijk onderscheid wordt vermeld tussen geheel getal letterlijk en lang letterlijk. Dit is het geval van onduidelijkheid. Daarom zal de compiler een fout genereren.


Kern Java - OOPs-concepten: methode die interviewvragen overschrijft


78) Wat is methodeoverschrijving:

Als een subklasse een specifieke implementatie biedt van een methode die al door de bovenliggende klasse wordt geleverd, staat dit bekend als Method Overriding. Het wordt gebruikt voor runtime-polymorfisme en om de interfacemethoden te implementeren.

Regels voor het overschrijven van methoden

  • De methode moet dezelfde naam hebben als in de bovenliggende klasse.
  • De methode moet dezelfde handtekening hebben als in de bovenliggende klasse.
  • Er moet tussen twee klassen een IS-A-relatie bestaan.
Meer details.


79) Kunnen we de statische methode terzijde schuiven?

Nee, u kunt de statische methode niet overschrijven, omdat deze deel uitmaakt van de klasse en niet van het object.


80) Waarom kunnen we de statische methode niet terzijde schuiven?

Het komt omdat de statische methode deel uitmaakt van de klasse en gebonden is aan de klasse, terwijl de instantiemethode gebonden is aan het object, en de statische methode geheugen in het klassengebied ophaalt, en de instantie geheugen op een hoop krijgt.


81) Kunnen we de overbelaste methode terzijde schuiven?

Ja.


82) Verschil tussen methode Overbelasting en Overschrijven.

Methode OverbelastingMethode overschrijven
1) Overbelasting van de methode verhoogt de leesbaarheid van het programma.Methode-overschrijving biedt de specifieke implementatie van de methode die al door de superklasse ervan wordt geboden.
2) Overbelasting van de methode vindt plaats binnen de klasse.Het overschrijven van methoden vindt plaats in twee klassen die een IS-A-relatie tussen hen hebben.
3) In dit geval moeten de parameters verschillend zijn.In dit geval moeten de parameters hetzelfde zijn.

83) Kunnen we de privémethoden terzijde schuiven?

Nee, we kunnen de privémethoden niet overschrijven, omdat de reikwijdte van privémethoden beperkt is tot de klasse en we er buiten de klasse geen toegang toe hebben.


84) Kunnen we de reikwijdte van de overschreven methode in de subklasse wijzigen?

Ja, we kunnen het bereik van de overschreven methode in de subklasse wijzigen. We moeten echter vaststellen dat we de toegankelijkheid van de methode niet kunnen verminderen. Er moet rekening worden gehouden met het volgende punt bij het wijzigen van de toegankelijkheid van de methode.

  • Het privé kan worden gewijzigd in beveiligd, openbaar of standaard.
  • Het beschermde kan worden gewijzigd in openbaar of standaard.
  • De standaardwaarde kan worden gewijzigd in openbaar.
  • Het publiek zal altijd publiek blijven.

85) Kunnen we de throws-clausule van de superklassemethode wijzigen terwijl we deze in de subklasse overschrijven?

Ja, we kunnen de throws-clausule van de superklassemethode wijzigen terwijl deze in de subklasse wordt overschreven. Er zijn echter enkele regels die moeten worden gevolgd bij het overschrijven van uitzonderingen.

  • Als de superklassemethode geen uitzondering declareert, kan de door de subklasse overschreven methode de gecontroleerde uitzondering niet declareren, maar wel de niet-gecontroleerde uitzondering.
  • Als de superklassemethode een uitzondering declareert, kan de overschreven methode van de subklasse dezelfde uitzondering, subklasse-uitzondering of geen uitzondering declareren, maar kan geen ouderuitzondering declareren.

86) Wat is de uitvoer van het volgende Java-programma?

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

Uitvoer

 Base class method called with integer a = 10 

Uitleg

De methode() is overbelast in de klasse Base, terwijl deze is afgeleid in de klasse Derived met het dubbele type als parameter. In de methodeaanroep wordt het gehele getal doorgegeven.

87) Kun je virtuele functies hebben in Java?

Ja, alle functies in Java zijn standaard virtueel.


88) Wat is een covariant rendementstype?

Sinds Java5 is het nu mogelijk om elke methode te overschrijven door het retourneringstype te wijzigen als het retourneringstype van de subklasse-overschrijvende methode een subklasse-type is. Het staat bekend als het covariante retourtype. Het covariante retourtype specificeert dat het retourtype in dezelfde richting mag variëren als de subklasse.

 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(); } } 
Test het nu
 Output: welcome to covariant return type 
Meer details.

89) Wat is de uitvoer van het volgende Java-programma?

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

Uitvoer

 Derived method called ... 

Uitleg

De methode van de klasse Base, dat wil zeggen baseMethod(), wordt overschreven in de klasse Afgeleid. In Testklasse verwijst de referentievariabele b (van het type Basisklasse) naar de instantie van de Afgeleide klasse. Hier wordt Runtime-polymorfisme bereikt tussen klasse Base en Derived. Tijdens het compileren wordt de aanwezigheid van de methode baseMethod gecontroleerd in de Base-klasse. Als deze aanwezig is, wordt het programma gecompileerd, anders wordt de compilerfout weergegeven. In dit geval is baseMethod aanwezig in de Base-klasse; daarom is het met succes gecompileerd. Tijdens runtime controleert het echter of de baseMethod is overschreven door de klasse Afgeleid. Als dat het geval is, wordt de methode Afgeleide klasse aangeroepen, anders wordt de methode Basisklasse aangeroepen. In dit geval overschrijft de klasse Derived de baseMethod; daarom wordt de methode Afgeleide klasse aangeroepen.


Core Java - OOPs-concepten: laatste trefwoord Interviewvragen


90) Wat is de laatste variabele?

In Java wordt de laatste variabele gebruikt om te voorkomen dat de gebruiker deze bijwerkt. Als we de laatste variabele initialiseren, kunnen we de waarde ervan niet wijzigen. Met andere woorden, we kunnen zeggen dat de uiteindelijke variabele die eenmaal aan een waarde is toegewezen, daarna nooit meer kan worden gewijzigd. De laatste variabele die aan geen enkele waarde is toegewezen, kan alleen worden toegewezen via de klassenconstructor.

laatste trefwoord in 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 
Test het nu
 Output:Compile Time Error 
Meer details.

91) Wat is de uiteindelijke methode?

Als we een methode wijzigen in een definitieve methode, kunnen we deze niet overschrijven. Meer details.

 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(); } } 
Test het nu
 Output:Compile Time Error 

92) Wat is de laatste les?

Als we een klasse definitief maken, kunnen we deze niet overnemen in een van de subklassen.

 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(); } } 
Test het nu
 Output:Compile Time Error 
Meer details.

93) Wat is de laatste blanco variabele?

Een laatste variabele, die niet is geïnitialiseerd op het moment van declaratie, staat bekend als de laatste blanco variabele. We kunnen de laatste lege variabele niet rechtstreeks initialiseren. In plaats daarvan moeten we het initialiseren met behulp van de klassenconstructor. Dit is handig in het geval dat de gebruiker bepaalde gegevens heeft die niet door anderen mogen worden gewijzigd, bijvoorbeeld PAN-nummer. Beschouw het volgende voorbeeld:

 class Student{ int id; String name; final String PAN_CARD_NUMBER; ... } 
Meer details.

94) Kunnen we de laatste blanco variabele initialiseren?

Ja, als het niet statisch is, kunnen we het in de constructor initialiseren. Als het een statische blanco eindvariabele is, kan deze alleen in het statische blok worden geïnitialiseerd. Meer details.


95) Kunt u de hoofdmethode als definitief verklaren?

Ja, we kunnen de hoofdmethode declareren als public static final void main(String[] args){}.


96) Wat is de uitvoer van het volgende Java-programma?

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

Uitvoer

 20 

Uitleg

Omdat i de lege eindvariabele is. Het kan slechts één keer worden geïnitialiseerd. We hebben het op 20 geïnitialiseerd. Daarom wordt er 20 afgedrukt.


97) Wat is de uitvoer van het volgende Java-programma?

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

Uitvoer

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

Uitleg

De methode getDetails() is definitief; daarom kan het niet worden overschreven in de subklasse.


98) Kunnen we een constructor als definitief verklaren?

De constructor kan nooit definitief worden verklaard, omdat deze nooit wordt geërfd. Constructors zijn geen gewone methoden; daarom heeft het geen zin om constructors als definitief te verklaren. Als u dit echter probeert, geeft de compiler een foutmelding.


99) Kunnen we een interface definitief verklaren?

Nee, we kunnen een interface niet als definitief declareren, omdat de interface door een bepaalde klasse moet worden geïmplementeerd om de definitie ervan te kunnen geven. Daarom heeft het geen zin om een ​​interface definitief te maken. Als u dit echter probeert, geeft de compiler een foutmelding.


100) Wat is het verschil tussen de uiteindelijke methode en de abstracte methode?

Het belangrijkste verschil tussen de uiteindelijke methode en de abstracte methode is dat de abstracte methode niet definitief kan zijn, omdat we deze in de subklasse moeten overschrijven om de definitie ervan te geven.