Top 100+ Kern Java Sollicitatievragen

Kern-Java-interviewvragen helpen je bij het voorbereiden op op Java gebaseerde interviews. Of je nu een nieuwkomer bent of een zeer ervaren professional, kern-Java speelt een cruciale rol in elk Java/JEE-interview.

Kern-Java is het favoriete gebied in de meeste interviews en speelt een belangrijke rol bij het bepalen van de uitkomst van je interview.

Deze post komt rechtstreeks uit mijn 14+ jaar Java-programmering en veel interviewervaring. Java 16 is onlangs uitgebracht en ik heb de post bijgewerkt om enkele vragen uit de nieuwste releases op te nemen.

Kern-Java Interviewvragen en Antwoorden

I have already written a lot about java interview questions for specific topics such as String, Collections, and Multithreading.

  1. Java String Interviewvragen
  2. Java Thread Interviewvragen
  3. Java Collecties Interviewvragen
  4. Java Uitzonderingsinterviewvragen

Hier geef ik enkele belangrijke kernvragen voor een Java-interview met antwoorden die je zou moeten kennen. Je kunt dit bericht markeren om je kennis op te frissen voordat je naar een interview gaat.

1. Noem enkele belangrijke kenmerken van de Java 14-release?

Java 14 werd uitgebracht op 17 maart 2020. Het is een Non-LTS-versie. Enkele van de specifieke ontwikkelaarsgerichte Java 14-functies zijn:

  1. Switch Expressions – JEP 361
  2. Verbeteringen in patroonherkenning van de instanceof-operator – Preview-functie, JEP 305
  3. Behulpzame NullPointerException-berichten – JEP 358
  4. Tekstblokken – Tweede preview, JEP 368
  5. Records – gegevensklasse, preview-functie, JEP 359.

2. Noem enkele belangrijke kenmerken van de Java 13-release?

Java 13 werd gelanceerd op 17 september 2019. Het is een Non-LTS-versie. Enkele van de specifieke ontwikkelaarsgerichte Java 13-functies zijn:

  1. Tekstblokken – Preview-functie, JEP 355
  2. Switch Expressions – Voorbeeldfunctie, JEP 354
  3. Herimplementatie van de Java Sockets API – JEP 353
  4. Dynamisch CDS-archief – JEP 350
  5. FileSystems.newFileSystem() Methode
  6. DOM en SAX-fabrieken met Namespace-ondersteuning
  7. Ondersteuning voor Unicode 12.1
  8. ZGC-verbeteringen om Ongebruikt Geheugen terug te geven – JEP 351

3. Noem enkele belangrijke functies van de Java 12-release?

Java 12 werd gelanceerd op 19 maart 2019. Het is een non-LTS-versie. Enkele van de Java 12-functies zijn:

  1. JVM-wijzigingen – JEP 189, JEP 346, JEP 344 en JEP 230.
  2. Voorbeeldfuncties
  3. Bestandsmismatch() Methode
  4. Compacte Nummeropmaak
  5. Teeing Collectors in Stream API
  6. Nieuwe Methoden in String-klasse
  7. JEP 334: JVM Constants API
  8. JEP 305: Patroonmatching voor instanceof
  9. Raw String Literals is Verwijderd uit JDK 12.

4. Wat zijn de belangrijke kenmerken van de Java 11-release?

Java 11 is de tweede LTS-release na Java 8. Ze hebben het licentiemodel en het ondersteuningsmodel gewijzigd, wat betekent dat als je de Java 11 Oracle JDK downloadt, dit betaald is voor commercieel gebruik. Als je een gratis versie wilt gebruiken, kun je deze downloaden van de OpenJDK-website.

Enkele belangrijke kenmerken van Java 11 zijn:

  • We kunnen een Java-programma rechtstreeks uitvoeren via het java-commando. Het bronbestand wordt impliciet gecompileerd en uitgevoerd. Het maakt deel uit van de implementatie van het JEP 330-functie.
  • Er zijn 6 nieuwe methoden toegevoegd aan de String-klasse – isBlank(), lines(), strip(), stripLeading(), stripTrailing() en repeat(). Je kunt er alles over lezen in ons artikel over de Java String-klasse.
  • De Files-klasse heeft twee nieuwe methoden gekregen om te lezen/schrijven met stringgegevens – readString() en writeString().
  • We kunnen “var” ook gebruiken met lambda-expressies. Het maakt deel uit van de implementatie van JEP 323.
  • Epsilon: een No-Op Garbage Collector voor testomgevingen. Het is een experimentele functie en maakt deel uit van JEP 318.
  • Java EE- en CORBA-modules zijn verwijderd uit de standaard JDK-build. De Nashorn JavaScript Engine is ook verouderd.
  • Nieuwe HTTP-client (JEP 321) en Flight Recorder (JEP 328)

Voor een volledig overzicht, lees alstublieft Java 11 Functies.

5. Wat zijn de belangrijke functies van de Java 10-release?

Java 10 is de eerste zesmaandelijkse release van Oracle Corporation, dus het is geen belangrijke release zoals eerdere versies. Enkele van de belangrijke functies van Java 10 zijn echter:

  • Lokale variabele type-inferentie
  • Verbeter java.util.Locale en gerelateerde API’s om aanvullende Unicode-extensies van BCP 47 taaltags te implementeren.
  • Mogelijk maken dat de HotSpot VM de Java-objectheap toewijst op een alternatief geheugenapparaat, zoals een NV-DIMM, gespecificeerd door de gebruiker.
  • Stel een standaardset van root-certificeringsinstanties (CA’s) beschikbaar in de JDK.

Java 10 is grotendeels een onderhoudsrelease, maar ik vond de functie voor lokale variabele type-inferentie echt leuk. Voor een gedetailleerd overzicht van Java 10, bekijk alstublieft Java 10 Functies.

6. Wat zijn de belangrijke kenmerken van de Java 9-release?

Java 9 was een belangrijke release en bracht veel functies met zich mee. Enkele van de belangrijke functies zijn:

  • Java 9 REPL (JShell)
  • Java 9-modulesysteem
  • Factory-methoden voor onwijzigbare lijst, set, map en map.Entry
  • Privémethoden in interfaces
  • Reactive Streams
  • GC (Garbage Collector)-verbeteringen

U vindt meer details hierover op Java 9-functies.

7. Wat zijn de belangrijke kenmerken van de Java 8-release?

Java 8 is uitgebracht in maart 2014, dus het is een van de populaire onderwerpen in Java-interviewvragen. Als u deze vraag duidelijk beantwoordt, laat dit zien dat u zich graag op de hoogte houdt van de nieuwste technologieën.

Java 8 is een van de grootste releases geweest na Java 5-annotaties en generics. Enkele belangrijke kenmerken van Java 8 zijn:

  1. Interface wijzigingen met standaard- en statische methoden
  2. Functionele interfaces en Lambda Expressies
  3. Java Stream API voor verzamelingsklassen
  4. Java Date Time API

I strongly recommend to go through above links to get proper understanding of each one of them, also read Java 8 Features.

8. Noem enkele OOPS-concepten in Java?

Java is gebaseerd op Object Georiënteerde Programmeerconcepten. Hier zijn enkele van de OOPS-concepten geïmplementeerd in Java-programmering.

  • Abstractie
  • Encapsulatie
  • Polymorfisme
  • Overerving
  • Associatie
  • Aggregatie
  • Compositie

Lees meer over hen op OOPS Concepts in Java.

9. Wat wordt bedoeld met platformonafhankelijkheid van Java?

Platformonafhankelijkheid betekent dat je hetzelfde Java-programma kunt uitvoeren op elk besturingssysteem. Bijvoorbeeld, je kunt een Java-programma schrijven in Windows en het uitvoeren in macOS.

10. Wat is JVM en is het platformonafhankelijk?

Java Virtual Machine (JVM) is het hart van de Java-programmeertaal. JVM is verantwoordelijk voor het omzetten van bytecode naar machinaal leesbare code. JVM is niet platformonafhankelijk, daarom heb je verschillende JVM’s voor verschillende besturingssystemen. We kunnen JVM aanpassen met Java-opties, zoals het toewijzen van minimum- en maximumgeheugen aan JVM. Het wordt ‘virtueel’ genoemd omdat het een interface biedt die niet afhankelijk is van het onderliggende besturingssysteem.

11. Wat is het verschil tussen JDK en JVM?

Java Development Kit (JDK) is bedoeld voor ontwikkelingsdoeleinden en JVM is er een onderdeel van om de Java-programma’s uit te voeren.

JDK biedt alle tools, uitvoerbare bestanden en binaries die nodig zijn om een Java-programma te compileren, debuggen en uitvoeren. Het uitvoeringsgedeelte wordt afgehandeld door de JVM om machinafhhankelijkheid te bieden.

12. Wat is het verschil tussen JVM en JRE?

Java Runtime Environment (JRE) is de implementatie van JVM. JRE bestaat uit JVM en Java-binaries en andere klassen om elk programma succesvol uit te voeren. JRE bevat geen ontwikkeltools zoals een Java-compiler, debugger, enz. Als je een Java-programma wilt uitvoeren, moet je JRE geïnstalleerd hebben.

13. Welke klasse is de superklasse van alle klassen?

java.lang.Object is de hoofdklasse voor alle Java-klassen en we hoeven deze niet uit te breiden.

14. Waarom ondersteunt Java geen meervoudige overerving?

Java ondersteunt geen meervoudige overerving in klassen vanwege het “Diamond-probleem”. Voor meer informatie over het diamond-probleem met een voorbeeld, lees Meervoudige Overerving in Java.

Echter, meervoudige overerving wordt ondersteund in interfaces. Een interface kan meerdere interfaces uitbreiden omdat ze alleen de methoden declareren en de implementatie aanwezig zal zijn in de implementerende klasse. Dus er is geen probleem van het diamond-probleem met interfaces.

15. Waarom is Java geen puur objectgeoriënteerde taal?

Java wordt niet beschouwd als puur objectgeoriënteerd omdat het primitieve typen zoals int, byte, short, long, enz. ondersteunt. Ik geloof dat dit eenvoud brengt in de taal bij het schrijven van onze code. Java had wel wrapper-objecten kunnen hebben voor de primitieve typen, maar alleen voor de representatie, ze zouden geen voordeel hebben geboden.

Zoals we weten, hebben we voor alle primitieve typen wrapperklassen zoals Integer, Long, enz. die enkele aanvullende methoden bieden.

16. Wat is het verschil tussen de pad- en classpath-variabelen?

PATH is een omgevingsvariabele die door het besturingssysteem wordt gebruikt om de uitvoerbare bestanden te lokaliseren. Daarom moeten we bij het installeren van Java of het willen vinden van een uitvoerbaar bestand door het besturingssysteem, de locatie van de map toevoegen aan de PATH-variabele. Als u werkt met het Windows-besturingssysteem, lees dan dit bericht om te leren hoe u de PATH-variabele op Windows instelt.

Classpath is specifiek voor Java en wordt gebruikt door java-uitvoerbare bestanden om klassebestanden te lokaliseren. We kunnen de classpath-locatie opgeven bij het uitvoeren van de java-toepassing en het kan een map, ZIP-bestanden, JAR-bestanden, enz. zijn.

De main() methode is het startpunt van elke op zichzelf staande Java-toepassing. De syntaxis van de main methode is public static void main(String args[]).

Java’s main methode is public en static zodat de Java-runtime er toegang toe kan krijgen zonder de klasse te initialiseren. Het invoerparameter is een array van String waarmee we runtime-argumenten aan het Java-programma kunnen doorgeven. Bekijk dit bericht om te leren hoe u een Java-programma kunt compileren en uitvoeren.

18. Wat is overbelasting en overschrijving in Java?

Wanneer we meer dan één methode met dezelfde naam hebben in een enkele klasse, maar de argumenten verschillend zijn, wordt dit method overloading genoemd.

Het overschrijvingsconcept komt naar voren bij overerving wanneer we twee methoden met dezelfde handtekening hebben, één in de ouderklasse en een andere in de kindklasse. We kunnen de @Override annotatie gebruiken in de overschreven methode van de kindklasse om ervoor te zorgen dat als de methode van de ouderklasse wordt gewijzigd, dit ook geldt voor de kindklasse.

19. Kunnen we de main() methode overbelasten?

Ja, we kunnen meerdere methoden hebben met de naam “main” in een enkele klasse. Echter, als we de klasse uitvoeren, zal de Java-runtimeomgeving zoeken naar de main-methode met de syntaxis als public static void main(String args[]).

20. Kunnen we meerdere openbare klassen hebben in een Java-bronbestand?

We kunnen niet meer dan één openbare klasse hebben in een enkel Java-bronbestand. Een enkel bronbestand kan meerdere klassen bevatten die niet openbaar zijn.

21. Wat is een Java-pakket en welk pakket wordt standaard geïmporteerd?

Een Java-pakket is het mechanisme om Java-klassen te organiseren door ze te groeperen. De groeperingslogica kan gebaseerd zijn op functionaliteit of modules. De volledig gekwalificeerde naam van een Java-klasse bevat pakket- en klassenaam. Bijvoorbeeld, java.lang.Object is de volledig gekwalificeerde naam van de klasse Object die deel uitmaakt van het pakket java.lang.

Het pakket java.lang wordt standaard geïmporteerd en we hoeven geen enkele klasse uit dit pakket expliciet te importeren.

22. Wat zijn toegangsmodificatoren in Java?

Java biedt toegangscontrole via de sleutelwoorden public, private en protected. Wanneer geen van deze wordt gebruikt, wordt dit de standaardtoegangsmodificator genoemd.

A java class can only have public or default access modifier. Read Java Access Modifiers to learn more about these in detail.

23. Wat is een definitief sleutelwoord?

Het definitieve sleutelwoord wordt gebruikt met een klasse om ervoor te zorgen dat geen andere klasse het kan uitbreiden. Bijvoorbeeld, de String klasse is definitief en we kunnen deze niet uitbreiden.

We kunnen het definitieve sleutelwoord met methoden gebruiken om ervoor te zorgen dat kindklassen het niet kunnen overschrijven.

Het definitieve sleutelwoord van Java kan worden gebruikt met variabelen om ervoor te zorgen dat deze slechts één keer kan worden toegewezen. Echter, de toestand van de variabele kan veranderen, bijvoorbeeld, we kunnen een definitieve variabele slechts één keer aan een object toewijzen, maar de objectvariabelen kunnen later veranderen.

Java-interfacevariabelen zijn standaard definitief en statisch.

24. Wat is een statisch sleutelwoord?

Het statische sleutelwoord kan worden gebruikt met klassevariabelen om het globaal te maken, d.w.z. alle objecten zullen dezelfde variabele delen.

We kunnen het statische sleutelwoord ook met methoden gebruiken. Een statische methode kan alleen toegang krijgen tot statische variabelen van de klasse en alleen statische methoden van de klasse oproepen.

Lees meer in detail op java static keyword.

25. Wat is finally en finalize in java?

Het finally-blok wordt gebruikt met try-catch om de code te plaatsen die je altijd wilt uitvoeren, zelfs als er een uitzondering wordt gegenereerd door het try-catch-blok. Het finally-blok wordt meestal gebruikt om resources vrij te geven die zijn gemaakt in het try-blok.

De finalize() is een speciale methode in de Object-klasse die we kunnen overschrijven in onze klassen. Deze methode wordt opgeroepen door de garbage collector wanneer het object wordt opgeruimd. Deze methode wordt meestal overschreven om systeembronnen vrij te geven wanneer het object wordt opgeruimd.

26. Kunnen we een klasse als statisch declareren?

We kunnen geen top-level klasse als statisch declareren, echter kan een innerlijke klasse als statisch worden gedeclareerd. Als de innerlijke klasse als statisch is gedeclareerd, wordt het een statische geneste klasse genoemd.

De statische geneste klasse is hetzelfde als elke andere top-level klasse en is genest alleen voor verpakkingsgemak.

Lees meer over innerlijke klassen op java inner class.

27. Wat is een statische import?

Als we een statische variabele of methode van een andere klasse moeten gebruiken, importeren we meestal de klasse en gebruiken we vervolgens de methode/variabele met de klassenaam.

import java.lang.Math;

//binnen klasse
double test = Math.PI * 5;

We kunnen hetzelfde doen door alleen de statische methode of variabele te importeren en deze vervolgens in de klasse te gebruiken alsof het erbij hoort.

import static java.lang.Math.PI;

//geen verwijzing naar klasse nodig
double test = PI * 5;

Het gebruik van een statische import kan verwarring veroorzaken, dus het is beter om het te vermijden. Overmatig gebruik van statische import kan uw programma onleesbaar en ononderhoudbaar maken.

28. Wat is try-with-resources in Java?

Een van de Java 7-functies is de try-with-resources-verklaring voor automatisch resourcebeheer. Vóór Java 7 was er geen automatisch resourcebeheer en moesten we de resource expliciet sluiten. Meestal werd dit gedaan in het finally-blok van een try-catch-verklaring. Deze aanpak veroorzaakte geheugenlekken wanneer we vergaten de resource te sluiten.

Vanaf Java 7 kunnen we bronnen binnen de try-blok maken en gebruiken. Java zorgt ervoor dat het wordt gesloten zodra de try-catch-blok is voltooid. Lees meer op Java Automatisch Bronnenbeheer.

29. Wat is een multi-catch-blok in Java?

Java 7 was een van de verbeteringen waarbij een multi-catch-blok werd geïntroduceerd, waar we meerdere uitzonderingen in één catch-blok kunnen afhandelen. Dit maakt onze code korter en schoner wanneer elk catch-blok vergelijkbare code heeft.

Als een catch-blok meerdere uitzonderingen afhandelt, kun je ze scheiden met een streepje (|) en in dit geval is de uitzonderingsparameter (ex) definitief, dus je kunt deze niet wijzigen.

Lees meer op Java multi-catch-blok.

30. Wat is een statisch blok?

Een Java statisch blok is de groep instructies die wordt uitgevoerd wanneer de klasse in het geheugen wordt geladen door de Java ClassLoader. Het wordt gebruikt om statische variabelen van de klasse te initialiseren. Meestal wordt het gebruikt om statische resources te maken wanneer de klasse wordt geladen.

31. Wat is een interface?

Interfaces zijn kernconcepten van de Java-programmeertaal en worden veel gebruikt, niet alleen in de JDK maar ook in Java-ontwerppatronen, de meeste frameworks en tools. Interfaces bieden een manier om abstractie te bereiken in Java en worden gebruikt om het contract te definiëren voor de subklassen om te implementeren.

Interfaces zijn goed als startpunt om het type te definiëren en een hiërarchie van het hoogste niveau in onze code te maken. Aangezien een Java-klasse meerdere interfaces kan implementeren, is het beter om interfaces als superklasse te gebruiken in de meeste gevallen. Meer informatie op java interface.

32. Wat is een abstracte klasse?

Abstracte klassen worden gebruikt in Java om een klasse te maken met een aantal standaard methode-implementaties voor subklassen. Een abstracte klasse kan een abstracte methode hebben zonder lichaam en het kan ook methoden met implementatie hebben.

Het trefwoord abstract wordt gebruikt om een abstracte klasse te creëren. Abstracte klassen kunnen niet geïnstantieerd worden en worden meestal gebruikt om een basis te bieden voor subklassen om uit te breiden en abstracte methoden te implementeren en geïmplementeerde methoden te overschrijven of te gebruiken in de abstracte klasse. Lees belangrijke punten over abstracte klassen op java abstracte klasse.

33. Wat is het verschil tussen een abstracte klasse en een interface?

  • Het trefwoord abstract wordt gebruikt om een abstracte klasse te creëren, terwijl interface het trefwoord is voor interfaces.
  • Abstracte klassen kunnen methoden implementaties hebben, terwijl interfaces dat niet kunnen.
  • A class can extend only one abstract class but it can implement multiple interfaces.
  • We kunnen een abstracte klasse uitvoeren als deze een main() methode heeft, terwijl we geen interface kunnen uitvoeren.

Enkele meer gedetailleerde verschillen zijn te vinden op Verschil tussen Abstracte Klasse en Interface.

34. Kan een interface een andere interface implementeren of uitbreiden?

Interfaces implementeren geen andere interface, ze breiden deze uit. Omdat interfaces geen methodimplementaties kunnen hebben, is er geen sprake van het diamantprobleem. Daarom hebben we meervoudige overervingen in interfaces, d.w.z. een interface kan meerdere interfaces uitbreiden.

Vanaf Java 8 kunnen interfaces standaard methoden bevatten. Om het diamantprobleem op te lossen wanneer een gemeenschappelijke standaardmethode aanwezig is in meerdere interfaces, is het verplicht om een implementatie van de methode te leveren in de klasse die ze implementeert. Voor meer details met voorbeelden, lees Wijzigingen in Java 8-interface.

35. Wat is een Marker-interface?

A marker interface is an empty interface without any method but used to force some functionality in implementing classes by Java. Some of the well known marker interfaces are Serializable and Cloneable.

36. Wat zijn Wrapper-klassen?

Java wrapper-klassen zijn de objectrepresentatie van acht primitieve typen in Java. Alle wrapper-klassen in Java zijn onveranderlijk en finaal. Java 5 autoboxing en unboxing maken eenvoudige conversie mogelijk tussen primitieve typen en hun overeenkomstige wrapper-klassen.

Lees meer op Wrapper-klassen in Java.

37. Wat is Enum in Java?

Enum werd geïntroduceerd in Java 1.5 als een nieuw type waarvan de velden bestaan uit een vast set van constanten. Bijvoorbeeld, in Java kunnen we Richting creëren als een enum met vaste velden als OOST, WEST, NOORD, ZUID.

enum is het trefwoord om een enum type te creëren en vergelijkbaar met de klasse. Enum-constanten zijn impliciet statisch en definitief. Lees meer in detail op java enum.

38. Wat zijn Java-annotaties?

Java-annotaties bieden informatie over de code en hebben geen direct effect op de gecodeerde functies. Annotations werden geïntroduceerd in Java 5. Een annotatie is metadata over het programma ingebed in het programma zelf. Het kan worden verwerkt door het annotatie-analysetool of de compiler. We kunnen ook specificeren dat een annotatie alleen beschikbaar is tijdens compilatie of tot runtime. Ingebouwde Java-annotaties zijn @Override, @Deprecated en @SuppressWarnings. Meer informatie vindt u op java annotations.

39. Wat is de Java Reflection API en waarom is deze zo belangrijk?

De Java Reflection API biedt de mogelijkheid om het runtime-gedrag van Java-toepassingen te inspecteren en te wijzigen. We kunnen een Java-klasse, interface, enum inspecteren en hun methoden en veldgegevens verkrijgen. De Reflection API is een geavanceerd onderwerp en we moeten het vermijden bij normale programmering. Het gebruik van de Reflection API kan het ontwerppatroon, zoals het Singleton-patroon, breken door de private constructor aan te roepen, d.w.z. de regels van toegangsmodificatoren te schenden.

Hoewel we Reflection API niet gebruiken in normaal programmeren, is het erg belangrijk om te hebben. We kunnen geen frameworks zoals Spring, Hibernate of servers zoals Tomcat, JBoss hebben zonder Reflection API. Ze roepen de juiste methoden aan en instantiëren klassen via Reflection API en gebruiken het veel voor andere verwerkingen.

Lees de Java Reflection Tutorial om diepgaande kennis van reflection api te krijgen.

40. Wat is Compositie in Java?

Compositie is de ontwerptechniek om een heeft-een relatie te implementeren in klassen. We kunnen objectcompositie gebruiken voor codehergebruik.

Java-compositie wordt bereikt door het gebruik van instantievariabelen die verwijzen naar andere objecten. Het voordeel van het gebruik van compositie is dat we de zichtbaarheid van andere objecten voor clientklassen kunnen controleren en alleen hergebruiken wat we nodig hebben. Lees meer met voorbeeld op Java Compositie voorbeeld.

41. Wat is het voordeel van Compositie boven Erfenis?

Een van de beste praktijken van Java-programmering is “compositie boven overerving verkiezen”. Enkele mogelijke redenen zijn:

  • Elke wijziging in de superklasse kan van invloed zijn op de subklasse, zelfs als we de methoden van de superklasse niet gebruiken. Bijvoorbeeld, als we een methode test() hebben in de subklasse en plotseling iemand een methode test() introduceert in de superklasse, zullen we compilatiefouten krijgen in de subklasse. Compositie zal nooit dit probleem tegenkomen omdat we alleen gebruiken welke methoden we nodig hebben.
  • Overerving blootstelt alle methoden en variabelen van de superklasse aan de client, en als we geen controle hebben bij het ontwerpen van de superklasse, kan dit leiden tot beveiligingslekken. Compositie stelt ons in staat om beperkte toegang tot de methoden te bieden en dus veiliger te zijn.
  • We kunnen runtime binding krijgen in compositie waar overerving de klassen bij compileertijd bindt. Dus compositie biedt flexibiliteit bij het aanroepen van methoden.

Je kunt meer lezen over de bovengenoemde voordelen van compositie boven overerving op java compositie vs overerving.

42. Hoe sorteer je een collectie van aangepaste objecten in Java?

We moeten de Comparable-interface implementeren om het sorteren van aangepaste objecten in een collectie te ondersteunen. De Comparable-interface heeft de compareTo(T obj)-methode die wordt gebruikt door sorteermethoden. Door deze methode-implementatie te bieden, kunnen we een standaard manier bieden om aangepaste objectencollecties te sorteren.

Als je echter wilt sorteren op verschillende criteria, zoals het sorteren van een collectie van werknemers op basis van salaris of leeftijd, dan kunnen we Comparator-instanties maken en deze doorgeven als sorteermethodologie. Voor meer details, lees Java Comparable and Comparator.

43. Wat is een innerlijke klasse in Java?

We kunnen een klasse binnen een klasse definiëren en ze worden genoemd als geneste klassen. Elke niet-statische geneste klasse staat bekend als een innerlijke klasse. Innerlijke klassen zijn geassocieerd met het object van de klasse en ze kunnen alle variabelen en methoden van de buitenklasse benaderen. Aangezien innerlijke klassen zijn geassocieerd met de instantie, kunnen we geen statische variabelen in hen hebben.

We kunnen een lokale innerlijke klasse of anonieme innerlijke klasse binnen een klasse hebben. Voor meer details, lees java inner class.

Wat is een anonieme binnenklasse?

A local inner class without a name is known as an anonymous inner class. An anonymous class is defined and instantiated in a single statement. Anonymous inner class always extend a class or implement an interface.

Omdat een anonieme klasse geen naam heeft, is het niet mogelijk om een constructor te definiëren voor een anonieme klasse. Anonieme binnenklassen zijn alleen toegankelijk op het punt waar ze worden gedefinieerd.

Wat is een Classloader in Java?

Java Classloader is het programma dat het bytecodeprogramma in het geheugen laadt wanneer we toegang willen krijgen tot een klasse. We kunnen onze eigen classloader maken door de ClassLoader-klasse uit te breiden en de methode loadClass(String name) te overschrijven. Meer informatie op java classloader.

Wat zijn de verschillende typen classloaders?

Er zijn drie soorten ingebouwde Class Loaders in Java.

  1. Bootstrap ClassLoader – Het laadt interne JDK-klassen, laadt typisch rt.jar en andere kernklassen.
  2. Extensions Class Loader – Het laadt klassen uit de JDK-uitbreidingsdirectory, meestal de $JAVA_HOME/lib/ext-directory.
  3. System Class Loader – Het laadt klassen uit het huidige classpath dat kan worden ingesteld bij het aanroepen van een programma met behulp van de -cp- of -classpath-opdrachtregelopties.

47. Wat is de ternaire operator in Java?

De Java ternaire operator is de enige conditionele operator die drie operanden gebruikt. Het is een enkelregelvervanging voor de if-then-else-verklaring en wordt veel gebruikt in de Java-programmering. We kunnen de ternaire operator gebruiken voor if-else-voorwaarden of zelfs schakelvoorwaarden met behulp van geneste ternaire operators. Een voorbeeld is te vinden op java ternary operator.

48. Wat doet het super-woord?

Het super-woord kan worden gebruikt om de methode van de superklasse aan te roepen wanneer je de methode hebt overschreven in de kindklasse.

We kunnen het super-woord gebruiken om superklasse-constructors aan te roepen in de constructor van de kindklasse, maar in dit geval moet het de eerste verklaring zijn in de constructiemethode.

package com.journaldev.access;

public class SuperClass {

	public SuperClass(){
	}
	
	public SuperClass(int i){}
	
	public void test(){
		System.out.println("super class test method");
	}
}

Het gebruik van het super-woord is te zien in de onderstaande implementatie van de kindklasse.

package com.journaldev.access;

public class ChildClass extends SuperClass {

	public ChildClass(String str){
		//toegang tot superklasse constructor met super-sleutelwoord
		super();
		
		//toegang tot methode van de kindklasse
		test();
		
		//gebruik super om toegang te krijgen tot methode van superklasse
		super.test();
	}
	
	@Override
	public void test(){
		System.out.println("child class test method");
	}
}

49. Wat is de break- en continueverklaring?

We kunnen de break-verklaring gebruiken om een for-, while- of do-while-lus te beëindigen. We kunnen een break-verklaring gebruiken in de switch-verklaring om de switch case te verlaten. Je kunt het voorbeeld van de break-verklaring zien op java break. We kunnen een break met het label gebruiken om geneste lussen te beëindigen.

De continueverklaring slaat de huidige iteratie van een for-, while- of do-while-lus over. We kunnen de continueverklaring met het label gebruiken om de huidige iteratie van de buitenste lus over te slaan.

50. Wat is dit sleutelwoord in Java?

Dit sleutelwoord geeft de referentie naar het huidige object en wordt meestal gebruikt om ervoor te zorgen dat objectvariabelen worden gebruikt, niet de lokale variabelen met dezelfde naam.

//constructor
public Point(int x, int y) {
    this.x = x;
    this.y = y;
}

We kunnen ook dit trefwoord gebruiken om andere constructors vanuit een constructor aan te roepen.

public Rectangle() {
    this(0, 0, 0, 0);
}
public Rectangle(int width, int height) {
    this(0, 0, width, height);
}
public Rectangle(int x, int y, int width, int height) {
    this.x = x;
    this.y = y;
    this.width = width;
    this.height = height;
}

51. Wat is de standaardconstructor?

Een constructor zonder argumenten van een klasse staat bekend als de standaardconstructor. Als we geen enkele constructor voor de klasse definiëren, maakt de Java-compiler automatisch de standaard no-args constructor voor de klasse aan. Als er andere constructors zijn gedefinieerd, zal de compiler geen standaardconstructor voor ons maken.

52. Kunnen we een try zonder catch-blok hebben?

Ja, we kunnen een try-finally statement hebben en daardoor het catch-blok vermijden.

53. Wat is Garbage Collection?

Garbage Collection is het proces waarbij het heapgeheugen wordt bekeken, wordt geïdentificeerd welke objecten in gebruik zijn en welke niet, en de niet-gebruikte objecten worden verwijderd. In Java wordt het proces van het vrijmaken van geheugen automatisch afgehandeld door de garbage collector.

We kunnen de garbage collector uitvoeren met de code Runtime.getRuntime().gc() of de hulpmethode System.gc() gebruiken. Voor een gedetailleerde analyse van Heapgeheugen en Garbage Collection, lees alstublieft Java Garbage Collection.

54. Wat is Serialisatie en Deserialisatie?

We kunnen een Java-object converteren naar een Stream dat Serialisatie wordt genoemd. Zodra een object is geconverteerd naar een Stream, kan het worden opgeslagen in een bestand, verzonden via het netwerk of gebruikt worden in socketverbindingen.

Het object moet de Serializable-interface implementeren en we kunnen java.io.ObjectOutputStream gebruiken om objecten naar een bestand of naar een willekeurig OutputStream-object te schrijven. Lees meer op Java Serialisatie.

Het proces van het converteren van streamgegevens die zijn gemaakt via serialisatie naar een Object wordt deserialisatie genoemd. Lees meer op Java Deserialisatie.

55. Hoe voer ik een JAR-bestand uit via de opdrachtprompt?

We kunnen een JAR-bestand uitvoeren met behulp van het java-commando, maar hiervoor is een Main-Class vermelding in het jar-manifestbestand vereist. Main-Class is het instappunt van de jar en wordt door het java-commando gebruikt om de klasse uit te voeren. Meer informatie op java jar bestand.

56. Wat is het gebruik van de System-klasse?

De Java System-klasse is een van de kernklassen. Een van de eenvoudigste manieren om informatie voor debuggen te loggen, is de System.out.print() methode.

De System-klasse is definitief zodat we deze niet kunnen onderklasseen en het gedrag ervan kunnen overschrijven via overerving. De System-klasse biedt geen openbare constructeurs, dus we kunnen deze klasse niet instantiëren en daarom zijn al zijn methoden statisch.

Sommige van de hulpprogramma-methoden van de System-klasse zijn voor het kopiëren van arrays, het ophalen van de huidige tijd, het lezen van omgevingsvariabelen. Meer informatie op Java System Class.

Wat is het instanceof-sleutelwoord?

We kunnen het instanceof-sleutelwoord gebruiken om te controleren of een object behoort tot een klasse of niet. We moeten het gebruik ervan zoveel mogelijk vermijden. Een voorbeeld van gebruik is:

public static void main(String args[]){
	Object str = new String("abc");
		
	if(str instanceof String){
		System.out.println("String value:"+str);
	}
		
	if(str instanceof Integer){
		System.out.println("Integer value:"+str);
	}
}

Omdat ‘str’ tijdens runtime van het type String is, evalueert de eerste if-verklaring naar waar en de tweede naar onwaar.

Kunnen we String gebruiken met switch case?

Een van de Java 7-functies was de verbetering van switch case om Strings toe te staan. Dus als je Java 7 of een nieuwere versie gebruikt, kun je String gebruiken in switch-case verklaringen. Lees meer op Java switch-case String voorbeeld.

Is Java Pass by Value of Pass by Reference?

Dit is een zeer verwarrende vraag, we weten dat objectvariabelen de referentie naar de objecten in de heapruimte bevatten. Wanneer we een methode aanroepen, wordt er een kopie van deze variabelen doorgegeven en opgeslagen in het stackgeheugen van de methode. We kunnen elke taal testen of deze passeren op basis van referentie of waarde via een eenvoudige generieke swap-methode, om meer te leren lees Java is Pass by Value and Not Pass by Reference.

60. Wat is het verschil tussen Heap en Stack-geheugen?

Het belangrijkste verschil tussen heap- en stackgeheugen is als volgt:

  • Heapgeheugen wordt gebruikt door alle delen van de toepassing, terwijl stackgeheugen alleen wordt gebruikt door één uitvoeringsthread.
  • Telkens wanneer een object wordt gemaakt, wordt het altijd opgeslagen in de heapruimte en bevat het stackgeheugen de verwijzing ernaar. Stackgeheugen bevat alleen lokale primitieve variabelen en referentievariabelen naar objecten in de heapruimte.
  • Het geheugenbeheer in de stack gebeurt op een LIFO-manier, terwijl het in de heapruimte complexer is omdat het globaal wordt gebruikt.

Voor een gedetailleerde uitleg met een voorbeeldprogramma, lees Java Heap vs Stack-geheugen.

61. Java-compiler is opgeslagen in JDK, JRE of JVM?

De taak van de Java-compiler is om een Java-programma om te zetten in bytecode, hiervoor hebben we het uitvoerbare bestand javac. Dus het moet worden opgeslagen in JDK, we hebben het niet nodig in JRE en JVM is alleen de specificatie.

62. Wat zal de uitvoer zijn van de volgende programma’s?

Context: statische methode in klasse

package com.journaldev.util;

public class Test {

	public static String toString(){
		System.out.println("Test toString called");
		return "";
	}
	
	public static void main(String args[]){
		System.out.println(toString());
	}
}

Antwoord: De code zal niet compileren omdat we geen Objectklasse methode kunnen hebben met het sleutelwoord static. Let op dat de Objectklasse de methode toString() heeft. Je krijgt een compileerfoutmelding als “Deze statische methode kan de instantiemethode van Object niet verbergen”. De reden hiervoor is dat de statische methode behoort tot de klasse en aangezien elke klasse is gebaseerd op een Object, kunnen we dezelfde methode niet hebben in de instantie en in de klasse. Je krijgt deze fout niet als je de methode-naam wijzigt van toString() naar iets anders dat niet aanwezig is in de superklasse Object.

Context: statische methode-oproep

package com.journaldev.util;

public class Test {

	public static String foo(){
		System.out.println("Test foo called");
		return "";
	}
	
	public static void main(String args[]){
		Test obj = null;
		System.out.println(obj.foo());
	}
}

Antwoord: Dit is een vreemde situatie. We hebben allemaal wel eens een `NullPointerException` gezien wanneer we een methode oproepen op een object dat NULL is. Maar hier zal dit programma werken en “Test foo called” afdrukken.

De reden hiervoor is de optimalisatie van de Java-compilercode. Wanneer de Javacode wordt gecompileerd om bytecode te produceren, realiseert het zich dat `foo()` een statische methode is en zou moeten worden aangeroepen met behulp van de klasse. Dus verandert het de methodeaanroep `obj.foo()` naar `Test.foo()` en dus geen `NullPointerException`.

I must admit that it’s a very tricky question and if you are interviewing someone, this will blow his mind off. ?

Dat is alles voor kernvragen en antwoorden over Java-interviews. Ik blijf meer vragen aan de lijst toevoegen, als je denkt dat ik er een belangrijke gemist heb, laat het me dan weten via opmerkingen.

Source:
https://www.digitalocean.com/community/tutorials/core-java-interview-questions-and-answers