Kern-Java-Vorstellungsgesprächsfragen helfen Ihnen bei der Vorbereitung auf Java-basierte Vorstellungsgespräche. Ob Sie ein Anfänger oder ein hoch erfahrener Fachmann sind, Kern-Java spielt eine entscheidende Rolle in jedem Java/JEE-Vorstellungsgespräch.
Kern-Java ist der bevorzugte Bereich in den meisten Vorstellungsgesprächen und spielt eine entscheidende Rolle bei der Festlegung des Ergebnisses Ihres Vorstellungsgesprächs.
Dieser Beitrag stammt direkt aus meinen 14+ Jahren Java-Programmierung und zahlreichen Erfahrungen im Vorstellungsgespräch. Java 16 wurde kürzlich veröffentlicht, und ich habe den Beitrag aktualisiert, um einige Fragen aus den neuesten Versionen einzubeziehen.
Kern-Java-Vorstellungsgesprächsfragen und Antworten
I have already written a lot about java interview questions for specific topics such as String, Collections, and Multithreading.
- Java String Vorstellungsgesprächsfragen
- Java Thread Vorstellungsgesprächsfragen
- Java Collections Vorstellungsgesprächsfragen
- Java Exception Vorstellungsgesprächsfragen
Hier sind einige wichtige Kern-Java-Interviewfragen mit Antworten, die Sie kennen sollten. Sie können diesen Beitrag als Lesezeichen speichern, um Ihr Wissen vor einem Vorstellungsgespräch aufzufrischen.
1. Nennen Sie einige wichtige Funktionen des Java 14-Releases?
Java 14 wurde am 17. März 2020 veröffentlicht. Es ist eine Nicht-LTS-Version. Einige der entwicklerspezifischen Java 14-Funktionen sind:
- Switch-Ausdrücke – JEP 361
- Verbesserungen des Musterabgleichs des instanceof-Operators – Vorschau-Funktion, JEP 305
- Hilfreiche NullPointerException-Meldungen – JEP 358
- Textblöcke – Zweite Vorschau, JEP 368
- Records – Datentyp, Vorschau-Funktion, JEP 359.
2. Nennen Sie einige wichtige Funktionen des Java 13-Releases?
Java 13 wurde am 17. September 2019 veröffentlicht. Es ist eine Nicht-LTS-Version. Einige der entwicklerspezifischen Java 13-Funktionen sind:
- Textblöcke – Vorschau-Funktion, JEP 355
- Switch-Expressions – Vorschau-Funktion, JEP 354
- Neuimplementierung der Java-Sockets-API – JEP 353
- Dynamisches CDS-Archiv – JEP 350
- FileSystems.newFileSystem() Methode
- DOM- und SAX-Fabriken mit Namespace-Unterstützung
- Unicode 12.1 Unterstützung
- ZGC-Verbesserungen zur Rückgabe von ungenutztem Speicher – JEP 351
3. Nennen Sie einige wichtige Funktionen der Java 12-Version?
Java 12 wurde am 19. März 2019 veröffentlicht. Es handelt sich um eine Non-LTS-Version. Einige der Java 12-Funktionen sind:
- JVM-Änderungen – JEP 189, JEP 346, JEP 344 und JEP 230.
- Switch-Expressions
- Datei mismatch() Methode
- Kompakte Zahlenformatierung
- Teeing-Collectors im Stream-API
- Neue Methoden in der String-Klasse
- JEP 334: JVM-Konstanten-API
- JEP 305: Pattern-Matching für instanceof
- Raw-String-Literale wurden aus JDK 12 entfernt.
4. Welche sind die wichtigen Funktionen des Java 11 Releases?
Java 11 ist das zweite LTS-Release nach Java 8. Sie haben das Lizenz- und Supportmodell geändert, was bedeutet, dass der Download des Java 11 Oracle JDK kostenpflichtig ist für kommerzielle Nutzung. Wenn Sie eine kostenlose Version verwenden möchten, können Sie sie von der OpenJDK-Website herunterladen.
Einige der wichtigen Funktionen von Java 11 sind:
- Wir können ein Java-Programm direkt über den Befehl
java
ausführen. Die Quelldatei wird implizit kompiliert und ausgeführt. Es ist Teil der Implementierung der JEP 330-Funktion. - Es wurden 6 neue Methoden zur String-Klasse hinzugefügt – isBlank(), lines(), strip(), stripLeading(), stripTrailing() und repeat(). Sie können alles darüber in unserem Artikel über die Java String-Klasse lesen.
- Die Klasse Files hat zwei neue Methoden zum Lesen/Schreiben von Zeichendaten – readString() und writeString().
- Wir können „var“ auch mit Lambda-Ausdrücken verwenden. Es ist Teil der Implementierung von JEP 323.
- Epsilon: Ein No-Op-Garbage-Collector für Testumgebungen. Es ist ein experimentelles Feature und Teil von JEP 318.
- Die Java-EE- und CORBA-Module wurden aus dem Standard-JDK-Build entfernt. Der Nashorn-JavaScript-Engine wurde ebenfalls deprecated.
- Neuer HTTP-Client (JEP 321) und Flight Recorder (JEP 328)
Für eine vollständige Übersicht lesen Sie bitte Java 11 Features.
5. Welche wichtigen Funktionen bietet die Java-10-Version?
Java 10 ist die erste halbjährliche Veröffentlichung von Oracle Corporation, daher handelt es sich nicht um eine Hauptversion wie frühere Versionen. Einige der wichtigen Funktionen von Java 10 sind jedoch:
- Lokale Typinferenz
- Verbesserung von java.util.Locale und verwandten APIs zur Implementierung zusätzlicher Unicode-Erweiterungen von BCP 47-Sprachtags.
- Aktivieren Sie den HotSpot-VM, um den Java-Objektheap auf einem alternativen Speichergerät wie einem NV-DIMM zu allokieren, das vom Benutzer angegeben wurde.
- Stellen Sie einen Standardsatz von Stammzertifikaten von Zertifizierungsstellen (CA) im JDK bereit.
Java 10 ist größtenteils ein Wartungsrelease, jedoch hat mir die Funktion der lokalen Variablentypinferenz wirklich gut gefallen. Für eine detaillierte Übersicht über Java 10 lesen Sie bitte Java 10 Features.
6. Was sind die wichtigen Funktionen des Java 9 Releases?
Java 9 war ein großes Release und brachte viele Funktionen mit sich. Einige der wichtigen Funktionen sind:
- Java 9 REPL (JShell)
- Java 9 Modulsystem
- Factory-Methoden für unveränderliche Liste, Set, Map und Map.Entry
- Private Methoden in Interfaces
- Reaktive Streams
- GC (Garbage Collector)-Verbesserungen
Weitere Details finden Sie unter Java 9 Features.
7. Was sind die wichtigen Funktionen des Java 8 Releases?
Java 8 wurde im März 2014 veröffentlicht, daher ist es eines der aktuellen Themen in Java-Interviewfragen. Wenn Sie diese Frage klar beantworten, zeigt dies, dass Sie sich gerne mit den neuesten Technologien auf dem Laufenden halten.
Java 8 war eines der größten Releases nach den Java 5-Annotationen und Generics. Einige der wichtigen Funktionen von Java 8 sind:
- Schnittstellenänderungen mit Standard- und statischen Methoden
- Funktionale Schnittstellen und Lambda-Ausdrücke
- Java Stream API für Sammlungsklassen
- Java-Datum-Zeit-API
I strongly recommend to go through above links to get proper understanding of each one of them, also read Java 8 Features.
8. Nennen Sie einige OOPS-Konzepte in Java?
Java basiert auf objektorientierten Programmierkonzepten. Hier sind einige der in der Java-Programmierung implementierten OOPS-Konzepte.
- Abstraktion
- Informationsschutz
- Polymorphismus
- Vererbung
- Assoziation
- Aggregation
- Komposition
Mehr über sie erfahren Sie unter OOPS-Konzepte in Java.
9. Was bedeutet Plattformunabhängigkeit von Java?
Plattformunabhängigkeit bedeutet, dass Sie dasselbe Java-Programm in jedem Betriebssystem ausführen können. Zum Beispiel können Sie ein Java-Programm in Windows schreiben und es in macOS ausführen.
10. Was ist JVM und ist sie plattformunabhängig?
Die Java Virtual Machine (JVM) ist das Herzstück der Java-Programmiersprache. Die JVM ist dafür verantwortlich, den Bytecode in maschinenlesbaren Code umzuwandeln. Die JVM ist nicht plattformunabhängig, daher gibt es unterschiedliche JVMs für verschiedene Betriebssysteme. Wir können die JVM mit Java-Optionen anpassen, wie z. B. die Zuweisung von minimalen und maximalen Speichern an die JVM. Sie wird virtuell genannt, weil sie eine Schnittstelle bereitstellt, die nicht vom zugrunde liegenden Betriebssystem abhängt.
11. Was ist der Unterschied zwischen JDK und JVM?
Das Java Development Kit (JDK) ist für Entwicklungszwecke gedacht und die JVM ist ein Teil davon, um die Java-Programme auszuführen.
JDK stellt alle Werkzeuge, Ausführbaren Dateien und Binärdateien bereit, die zum Kompilieren, Debuggen und Ausführen eines Java-Programms erforderlich sind. Der Ausführungsteil wird von JVM behandelt, um Maschinenunabhängigkeit zu bieten.
12. Was ist der Unterschied zwischen JVM und JRE?
Die Java-Laufzeitumgebung (JRE) ist die Implementierung von JVM. JRE besteht aus JVM und Java-Binärdateien sowie anderen Klassen, um jedes Programm erfolgreich auszuführen. JRE enthält keine Entwicklungstools wie Java-Compiler, Debugger usw. Wenn Sie ein Java-Programm ausführen möchten, sollte JRE installiert sein.
13. Welche Klasse ist die Superklasse aller Klassen?
java.lang.Object
ist die Stammklasse für alle Java-Klassen, und wir müssen sie nicht erweitern.
14. Warum unterstützt Java keine Mehrfachvererbung?
Java unterstützt keine Mehrfachvererbung in Klassen aufgrund des „Diamond Problems“. Um mehr über das Diamond Problem mit einem Beispiel zu erfahren, lesen Sie Mehrfachvererbung in Java.
Jedoch wird die Mehrfachvererbung in Schnittstellen unterstützt. Eine Schnittstelle kann mehrere Schnittstellen erweitern, da sie nur die Methoden deklarieren und die Implementierung in der implementierenden Klasse vorhanden sein wird. Daher gibt es bei Schnittstellen kein Problem mit dem Diamond-Problem.
15. Warum ist Java keine reine objektorientierte Sprache?
Java wird nicht als reine objektorientierte Sprache bezeichnet, weil sie primitive Typen wie int, byte, short, long usw. unterstützt. Ich glaube, dass es die Sprache vereinfacht, wenn wir unseren Code schreiben. Java könnte Wrapper-Objekte für die primitiven Typen haben, aber nur für die Darstellung, sie hätten keinen Nutzen bereitgestellt.
Wie wir wissen, haben wir für alle primitiven Typen Wrapper-Klassen wie Integer, Long usw., die einige zusätzliche Methoden bereitstellen.
16. Was ist der Unterschied zwischen den Variablen „path“ und „classpath“?
PATH ist eine Umgebungsvariable, die vom Betriebssystem verwendet wird, um die ausführbaren Dateien zu finden. Deshalb müssen wir, wenn wir Java installieren oder möchten, dass eine beliebige ausführbare Datei vom Betriebssystem gefunden wird, den Verzeichnisstandort in der PATH-Variable hinzufügen. Wenn Sie mit dem Windows-Betriebssystem arbeiten, lesen Sie diesen Beitrag, um zu erfahren, wie Sie die PATH-Variable unter Windows einrichten können.
Classpath ist spezifisch für Java und wird von Java-Programmen verwendet, um Klassendateien zu finden. Wir können den Classpath-Standort beim Ausführen der Java-Anwendung angeben, und er kann ein Verzeichnis, ZIP-Dateien, JAR-Dateien usw. sein.
17. Welche Bedeutung hat die main-Methode in Java?
Die main()-Methode ist der Einstiegspunkt jeder eigenständigen Java-Anwendung. Die Syntax der main-Methode lautet public static void main(String args[])
.
Die main-Methode von Java ist öffentlich und statisch, damit die Java-Laufzeitumgebung darauf zugreifen kann, ohne die Klasse zu initialisieren. Der Eingabeparameter ist ein Array von Zeichenfolgen, über das wir Laufzeitargumente an das Java-Programm übergeben können. Überprüfen Sie diesen Beitrag, um zu erfahren, wie Sie ein Java-Programm kompilieren und ausführen können.
18. Was ist Überladen und Überschreiben in Java?
Wenn wir mehr als eine Methode mit demselben Namen in einer einzigen Klasse haben, aber die Argumente unterschiedlich sind, dann spricht man von Methodenüberladung.
Das Überschreiben tritt im Zusammenhang mit Vererbung auf, wenn wir zwei Methoden mit derselben Signatur haben, eine in der Elternklasse und eine andere in der Kindklasse. Wir können die @Override Annotation in der überschriebenen Methode der Kindklasse verwenden, um sicherzustellen, dass wenn die Methode der Elternklasse geändert wird, dies auch für die Kindklasse gilt.
19. Können wir die main() Methode überladen?
Ja, wir können mehrere Methoden mit dem Namen „main“ in einer einzigen Klasse haben. Wenn wir jedoch die Klasse ausführen, sucht die Java-Laufzeitumgebung nach der main-Methode mit der Syntax public static void main(String args[])
.
20. Können wir mehrere öffentliche Klassen in einer Java-Quelldatei haben?
In einer einzelnen Java-Quelldatei können wir nicht mehr als eine öffentliche Klasse haben. Eine einzige Quelldatei kann mehrere Klassen enthalten, die nicht öffentlich sind.
21. Was ist ein Java-Paket und welches Paket wird standardmäßig importiert?
Ein Java-Paket ist der Mechanismus zur Organisation von Java-Klassen durch Gruppierung. Die Gruppierungslogik kann auf Funktionalität oder modulbasierter Logik basieren. Der vollständig klassifizierte Name einer Java-Klasse enthält Paket- und Klassenname. Zum Beispiel ist java.lang.Object
der vollständig klassifizierte Name der Klasse Object
, die Teil des Pakets java.lang
ist.
Das Paket java.lang
wird standardmäßig importiert und wir müssen keine Klasse aus diesem Paket explizit importieren.
22. Was sind Zugriffsmodifizierer in Java?
Java bietet Zugriffskontrolle durch die Schlüsselwörter public, private und protected an. Wenn keines davon verwendet wird, wird es als Standardzugriffsmarkierer bezeichnet.
A java class can only have public or default access modifier. Read Java Access Modifiers to learn more about these in detail.
23. Was ist ein final-Schlüsselwort?
Das final-Schlüsselwort wird mit Klassen verwendet, um sicherzustellen, dass keine andere Klasse sie erweitern kann. Zum Beispiel ist die String-Klasse final und wir können sie nicht erweitern.
Wir können das final-Schlüsselwort mit Methoden verwenden, um sicherzustellen, dass Unterklassen sie nicht überschreiben können.
Das finale Schlüsselwort von Java kann auch mit Variablen verwendet werden, um sicherzustellen, dass sie nur einmal zugewiesen werden können. Der Zustand der Variablen kann jedoch geändert werden, zum Beispiel können wir eine finale Variable nur einmal einem Objekt zuweisen, aber die Objektvariablen können später geändert werden.
Java-Schnittstellenvariablen sind standardmäßig final und statisch.
24. Was ist ein statisches Schlüsselwort?
Das statische Schlüsselwort kann mit Klassenvariablen verwendet werden, um sie global zu machen, d.h. alle Objekte werden dieselbe Variable teilen.
Wir können das statische Schlüsselwort auch mit Methoden verwenden. Eine statische Methode kann nur auf statische Variablen der Klasse zugreifen und nur statische Methoden der Klasse aufrufen.
Lesen Sie mehr im Detail unter java static Schlüsselwort.
25. Was ist finally und finalize in Java?
Der finally-Block wird mit try-catch verwendet, um den Code auszuführen, der immer ausgeführt werden soll, auch wenn eine Ausnahme vom try-catch-Block ausgelöst wird. Der finally-Block wird meistens verwendet, um Ressourcen freizugeben, die im try-Block erstellt wurden.
Die finalize()-Methode ist eine spezielle Methode in der Object-Klasse, die wir in unseren Klassen überschreiben können. Diese Methode wird vom Garbage Collector aufgerufen, wenn das Objekt eingesammelt wird. Diese Methode wird normalerweise überschrieben, um Systemressourcen freizugeben, wenn das Objekt eingesammelt wird.
26. Können wir eine Klasse als static deklarieren?
Wir können eine Top-Level-Klasse nicht als static deklarieren, jedoch kann eine innere Klasse als static deklariert werden. Wenn die innere Klasse als static deklariert ist, wird sie als statische innere Klasse bezeichnet.
Die statische innere Klasse ist wie jede andere Top-Level-Klasse und ist nur aus Verpackungsgründen verschachtelt.
Lesen Sie mehr über innere Klassen unter java innere Klasse.
Was ist eine statische Importierung?
Wenn wir eine statische Variable oder Methode aus einer anderen Klasse verwenden müssen, importieren wir normalerweise die Klasse und verwenden dann die Methode/Variable mit dem Klassennamen.
Wir können dasselbe tun, indem wir nur die statische Methode oder Variable importieren und sie dann in der Klasse verwenden, als ob sie dazu gehören würde.
Die Verwendung von statischer Importierung kann zu Verwirrung führen, daher ist es besser, sie zu vermeiden. Übermäßiger Gebrauch von statischer Importierung kann Ihr Programm unlesbar und nicht wartbar machen.
Was ist ein Try-with-Resources in Java?
Eines der Java-7-Merkmale ist die Try-with-Resources-Anweisung für die automatische Ressourcenverwaltung. Vor Java 7 gab es keine automatische Ressourcenverwaltung, und wir sollten die Ressource explizit schließen. Üblicherweise wurde dies im finally
-Block einer Try-Catch-Anweisung durchgeführt. Dieser Ansatz führte zu Speicherlecks, wenn wir vergaßen, die Ressource zu schließen.
Ab Java 7 können wir Ressourcen innerhalb des Try-Blocks erstellen und verwenden. Java kümmert sich darum, sie sofort zu schließen, sobald der Try-Catch-Block beendet ist. Lesen Sie mehr unter Java Automatic Resource Management.
29. Was ist ein Multi-Catch-Block in Java?
Java 7 brachte eine Verbesserung mit sich: den Multi-Catch-Block, in dem wir mehrere Ausnahmen in einem einzigen Catch-Block abfangen können. Dadurch wird unser Code kürzer und sauberer, wenn jeder Catch-Block ähnlichen Code enthält.
Wenn ein Catch-Block mehrere Ausnahmen behandelt, können Sie sie mit einem senkrechten Strich (|) trennen. In diesem Fall ist der Ausnahmeparameter (ex) final, sodass Sie ihn nicht ändern können.
Weitere Informationen finden Sie unter Java Multi-Catch-Block.
30. Was ist ein statischer Block?
Java-Static-Block ist die Gruppe von Anweisungen, die ausgeführt wird, wenn die Klasse vom Java ClassLoader in den Speicher geladen wird. Es wird verwendet, um statische Variablen der Klasse zu initialisieren. Meistens wird es verwendet, um statische Ressourcen zu erstellen, wenn die Klasse geladen wird.
31. Was ist eine Schnittstelle?
Schnittstellen sind Kernkonzepte der Java-Programmiersprache und werden nicht nur in der JDK, sondern auch in Java-Designmustern, den meisten Frameworks und Tools verwendet. Schnittstellen bieten eine Möglichkeit, Abstraktion in Java zu erreichen, und werden verwendet, um den Vertrag für die Unterklassen zu definieren.
Schnittstellen sind guter Ausgangspunkt, um Typen zu definieren und eine oberste Hierarchie in unserem Code zu erstellen. Da eine Java-Klasse mehrere Schnittstellen implementieren kann, ist es in den meisten Fällen besser, Schnittstellen als Oberklasse zu verwenden. Lesen Sie mehr unter java Schnittstelle.
32. Was ist eine abstrakte Klasse?
Abstrakte Klassen werden in Java verwendet, um eine Klasse mit einigen Standardmethodenimplementierungen für Unterklassen zu erstellen. Eine abstrakte Klasse kann eine abstrakte Methode ohne Rumpf haben und sie kann auch Methoden mit Implementierung haben.
Das Schlüsselwort abstract wird verwendet, um eine abstrakte Klasse zu erstellen. Abstrakte Klassen können nicht instanziiert werden und werden hauptsächlich verwendet, um die Grundlage für Unterklassen zu bilden, um abstrakte Methoden zu erweitern und zu implementieren sowie die implementierten Methoden in der abstrakten Klasse zu überschreiben oder zu verwenden. Lesen Sie wichtige Punkte über abstrakte Klassen unter java abstrakte Klasse.
33. Was ist der Unterschied zwischen abstrakter Klasse und Schnittstelle?
- Das Schlüsselwort abstract wird verwendet, um eine abstrakte Klasse zu erstellen, während interface das Schlüsselwort für Schnittstellen ist.
- Abstrakte Klassen können Methodenimplementierungen haben, während Schnittstellen das nicht können.
- A class can extend only one abstract class but it can implement multiple interfaces.
- Wir können eine abstrakte Klasse ausführen, wenn sie eine main() Methode hat, während wir eine Schnittstelle nicht ausführen können.
Weitere Unterschiede im Detail finden Sie unter Unterschied zwischen abstrakter Klasse und Schnittstelle.
34. Kann eine Schnittstelle eine andere Schnittstelle implementieren oder erweitern?
Schnittstellen implementieren keine andere Schnittstelle, sondern erweitern sie. Da Schnittstellen keine Methodenimplementierungen haben können, besteht kein Problem mit dem Diamantenproblem. Deshalb haben wir mehrfache Vererbungen in Schnittstellen, d. h. eine Schnittstelle kann mehrere Schnittstellen erweitern.
Von Java 8 an können Schnittstellen Standardmethodenimplementierungen haben. Um das Diamantenproblem zu behandeln, wenn eine gemeinsame Standardmethode in mehreren Schnittstellen vorhanden ist, ist es obligatorisch, eine Implementierung der Methode in der Klasse bereitzustellen, die sie implementiert. Für weitere Details mit Beispielen, lesen Sie Java 8 Schnittstellenänderungen.
35. Was ist eine Marker-Schnittstelle?
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. Was sind Wrapper-Klassen?
Java-Wrapper-Klassen sind die Objektrepräsentation der acht primitiven Typen in Java. Alle Wrapper-Klassen in Java sind unveränderlich und final. Java 5 Autoboxing und Unboxing ermöglichen eine einfache Konvertierung zwischen primitiven Typen und ihren entsprechenden Wrapper-Klassen.
Erfahren Sie mehr unter Wrapper-Klassen in Java.
37. Was ist ein Enum in Java?
Enum wurde in Java 1.5 als neuer Typ eingeführt, dessen Felder aus einem festen Satz von Konstanten bestehen. Zum Beispiel können wir in Java Direction als enum mit festen Feldern wie EAST, WEST, NORTH, SOUTH erstellen.
„Enum“ ist das Schlüsselwort zur Erstellung eines Enum-Typs und ähnelt der Klasse. Enum-Konstanten sind implizit statisch und final. Lesen Sie mehr im Detail unter Java Enum.
38. Was sind Java-Annotationen?
Java-Annotationen bieten Informationen über den Code und haben keine direkte Auswirkung auf den annotierten Code. Annotationen wurden in Java 5 eingeführt. Eine Annotation ist Metadaten über das Programm, die im Programm selbst eingebettet sind. Sie kann vom Annotations-Analysetool oder vom Compiler analysiert werden. Wir können auch die Verfügbarkeit von Annotationen entweder nur zur Kompilierzeit oder bis zur Laufzeit angeben. Die eingebauten Java-Annotationen sind @Override, @Deprecated und @SuppressWarnings. Erfahren Sie mehr unter java annotations.
Was ist die Java Reflections-API und warum ist sie so wichtig? Die Java Reflections-API bietet die Möglichkeit, das Laufzeitverhalten einer Java-Anwendung zu inspizieren und zu ändern. Wir können eine Java-Klasse, ein Interface, einen Enum inspizieren und deren Methoden- und Felddetails abrufen. Die Reflections-API ist ein fortgeschrittenes Thema, das wir im normalen Programmieralltag vermeiden sollten. Die Verwendung der Reflections-API kann das Designmuster wie das Singleton-Muster brechen, indem der private Konstruktor aufgerufen wird, was die Regeln der Zugriffsmodifizierer verletzt.
Auch wenn wir die Reflection-API in der normalen Programmierung nicht verwenden, ist sie sehr wichtig. Wir können keine Frameworks wie Spring, Hibernate oder Server wie Tomcat, JBoss ohne Reflection-API haben. Sie rufen die entsprechenden Methoden auf und instanziieren Klassen über die Reflection-API und verwenden sie viel für andere Verarbeitungen.
Lesen Sie das Java-Reflexions-Tutorial, um ein tiefgreifendes Wissen über die Reflection-API zu erhalten.
40. Was ist Komposition in Java?
Komposition ist die Entwurfstechnik, um eine „hat-ein“-Beziehung in Klassen zu implementieren. Wir können die Objektkomposition zur Code-Wiederverwendung verwenden.
Java-Komposition wird durch die Verwendung von Instanzvariablen erreicht, die auf andere Objekte verweisen. Der Vorteil der Verwendung von Komposition besteht darin, dass wir die Sichtbarkeit anderer Objekte für Client-Klassen steuern können und nur das wiederverwenden, was wir benötigen. Lesen Sie mehr mit einem Beispiel unter Java-Komposition Beispiel.
41. Was ist der Vorteil von Komposition gegenüber Vererbung?
Eine der bewährten Praktiken der Java-Programmierung besteht darin, „Zusammensetzung vor Vererbung zu bevorzugen“. Einige der möglichen Gründe sind:
- Jede Änderung in der Oberklasse kann die Unterklasse beeinflussen, auch wenn wir die Methoden der Oberklasse nicht verwenden. Zum Beispiel, wenn wir eine Methode test() in der Unterklasse haben und plötzlich jemand eine Methode test() in der Oberklasse einführt, erhalten wir Kompilierungsfehler in der Unterklasse. Bei der Zusammensetzung tritt dieses Problem nie auf, weil wir nur die Methoden verwenden, die wir benötigen.
- Vererbung macht alle Methoden und Variablen der Oberklasse für den Client zugänglich, und wenn wir keine Kontrolle bei der Gestaltung der Oberklasse haben, kann dies zu Sicherheitslücken führen. Die Zusammensetzung ermöglicht es uns, den Zugriff auf die Methoden einzuschränken und ist daher sicherer.
- Bei der Zusammensetzung können wir eine Laufzeitbindung erhalten, während Vererbung die Klassen zur Kompilierzeit bindet. Die Zusammensetzung bietet daher Flexibilität bei der Aufruf von Methoden.
Weitere Informationen zu den oben genannten Vorteilen der Zusammensetzung gegenüber der Vererbung finden Sie unter java composition vs inheritance.
42. Wie kann eine Sammlung benutzerdefinierter Objekte in Java sortiert werden?
Wir müssen das Comparable-Interface implementieren, um die Sortierung benutzerdefinierter Objekte in einer Sammlung zu unterstützen. Das Comparable-Interface verfügt über die compareTo(T obj)-Methode, die von Sortiermethoden verwendet wird. Durch Bereitstellung dieser Methodenimplementierung können wir eine Standardmethode zur Sortierung benutzerdefinierter Objektsammlungen bereitstellen.
Wenn Sie jedoch nach verschiedenen Kriterien sortieren möchten, wie z.B. das Sortieren einer Mitarbeiter-Sammlung nach Gehalt oder Alter, können wir Comparator-Instanzen erstellen und diese als Sortiermethodik übergeben. Weitere Einzelheiten finden Sie unter Java Comparable und Comparator.
Was ist eine innere Klasse in Java?
Wir können eine Klasse innerhalb einer Klasse definieren, und sie werden als verschachtelte Klassen bezeichnet. Jede nicht-statische verschachtelte Klasse wird als innere Klasse bezeichnet. Innere Klassen sind mit dem Objekt der Klasse verbunden und können auf alle Variablen und Methoden der äußeren Klasse zugreifen. Da innere Klassen mit der Instanz verbunden sind, können wir keine statischen Variablen in ihnen haben.
Wir können lokale innere Klassen oder anonyme innere Klassen innerhalb einer Klasse haben. Weitere Einzelheiten finden Sie unter Java-Innere Klasse.
44. Was ist eine anonyme innere Klasse?
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.
Weil eine anonyme Klasse keinen Namen hat, ist es nicht möglich, einen Konstruktor für eine anonyme Klasse zu definieren. Anonyme innere Klassen sind nur an dem Punkt zugänglich, an dem sie definiert werden.
45. Was ist ein Classloader in Java?
Ein Java Classloader ist das Programm, das Bytecode in den Speicher lädt, wenn wir auf eine Klasse zugreifen möchten. Wir können unseren eigenen Classloader erstellen, indem wir die Klasse ClassLoader erweitern und die Methode loadClass(String name) überschreiben. Erfahren Sie mehr unter Java Classloader.
46. Welche verschiedenen Arten von Classloadern gibt es?
Es gibt drei Arten von integrierten Class Loadern in Java.
- Bootstrap ClassLoader – Es lädt interne JDK-Klassen, lädt typischerweise rt.jar und andere Kernklassen.
- Extensions Class Loader – Es lädt Klassen aus dem JDK-Erweiterungsverzeichnis, normalerweise das Verzeichnis $JAVA_HOME/lib/ext.
- System Class Loader – Es lädt Klassen vom aktuellen Klassenpfad, der beim Aufrufen eines Programms mit den Befehlszeilenoptionen -cp oder -classpath festgelegt werden kann.
47. Was ist der ternäre Operator in Java?
Der Java-Ternäroperator ist der einzige bedingte Operator, der drei Operanden annimmt. Er ist ein Einzeiler-Ersatz für die if-then-else-Anweisung und wird in der Java-Programmierung häufig verwendet. Wir können den ternären Operator für if-else-Bedingungen oder sogar für Schaltbedingungen mit verschachtelten ternären Operatoren verwenden. Ein Beispiel finden Sie unter java ternary operator.
48. Was macht das Schlüsselwort super?
Das Schlüsselwort super kann verwendet werden, um auf die Methode der Superklasse zuzugreifen, wenn Sie die Methode in der Kindklasse überschrieben haben.
Wir können das Schlüsselwort super verwenden, um Konstruktoren der Superklasse im Konstruktor der Kindklasse aufzurufen, aber in diesem Fall sollte es die erste Anweisung im Konstruktor sein.
Die Verwendung des Schlüsselworts super ist in der folgenden Implementierung der Kindklasse zu sehen.
49. Was ist die break- und continue-Anweisung?
Mit der break-Anweisung können wir eine for-, while- oder do-while-Schleife beenden. Wir können eine break-Anweisung in der switch-Anweisung verwenden, um den switch-Fall zu verlassen. Ein Beispiel für die break-Anweisung finden Sie unter java break. Wir können ein break mit dem Label verwenden, um die verschachtelten Schleifen zu beenden.
Die continue-Anweisung überspringt die aktuelle Iteration einer for-, while- oder do-while-Schleife. Wir können die continue-Anweisung mit dem Label verwenden, um die aktuelle Iteration der äußersten Schleife zu überspringen.
50. Was ist das Schlüsselwort this in Java?
Das Schlüsselwort this liefert einen Verweis auf das aktuelle Objekt und wird hauptsächlich verwendet, um sicherzustellen, dass Objektvariablen verwendet werden, nicht die lokalen Variablen mit demselben Namen.
Wir können auch dieses Schlüsselwort verwenden, um andere Konstruktoren von einem Konstruktor aufzurufen.
51. Was ist ein Standardkonstruktor?
Ein Standardkonstruktor einer Klasse wird als Standardkonstruktor bezeichnet. Wenn wir keinen Konstruktor für die Klasse definieren, erstellt der Java-Compiler automatisch den Standardkonstruktor ohne Argumente für die Klasse. Wenn andere Konstruktoren definiert sind, erstellt der Compiler keinen Standardkonstruktor für uns.
52. Können wir ein try ohne catch-Block haben?
Ja, wir können eine try-finally-Anweisung haben und somit einen catch-Block vermeiden.
53. Was ist Garbage Collection?
Die Garbage Collection ist der Prozess, bei dem der Heap-Speicher überprüft wird, um festzustellen, welche Objekte verwendet werden und welche nicht, und die nicht verwendeten Objekte zu löschen. In Java wird der Prozess der Speicherfreigabe automatisch vom Garbage Collector verwaltet.
Wir können den Garbage Collector mit dem Code Runtime.getRuntime().gc()
ausführen oder die Hilfsmethode System.gc()
verwenden. Für eine detaillierte Analyse des Heap-Speichers und der Garbage Collection lesen Sie bitte Java Garbage Collection.
54. Was ist Serialisierung und Deserialisierung?
Wir können ein Java-Objekt in einen Stream konvertieren, der als Serialisierung bezeichnet wird. Sobald ein Objekt in einen Stream konvertiert wurde, kann es in einer Datei gespeichert, über das Netzwerk gesendet oder in Socket-Verbindungen verwendet werden.
Das Objekt sollte ein Serializable-Interface implementieren, und wir können java.io.ObjectOutputStream verwenden, um Objekte in eine Datei oder in ein beliebiges OutputStream-Objekt zu schreiben. Lesen Sie mehr unter Java Serialisierung.
Der Prozess der Umwandlung von Stream-Daten, die durch Serialisierung erstellt wurden, in ein Objekt wird als Deserialisierung bezeichnet. Lesen Sie mehr unter Java Deserialisierung.
Wie führt man eine JAR-Datei über die Befehlszeile aus?
Wir können eine JAR-Datei mit dem Java-Befehl ausführen, aber es erfordert einen Main-Class-Eintrag in der JAR-Manifestdatei. Main-Class ist der Einstiegspunkt der JAR und wird vom Java-Befehl verwendet, um die Klasse auszuführen. Erfahren Sie mehr unter Java-JAR-Datei.
Was ist die Verwendung der Systemklasse?
Die Java-Systemklasse ist eine der Kernklassen. Eine der einfachsten Möglichkeiten, Informationen zum Debuggen zu protokollieren, ist die Methode System.out.print().
Die Systemklasse ist final, sodass wir ihr Verhalten nicht durch Vererbung unterklassen und überschreiben können. Die Systemklasse bietet keine öffentlichen Konstruktoren, sodass wir diese Klasse nicht instanziieren können und deshalb alle ihre Methoden statisch sind.
Einige der Hilfsmethoden der Systemklasse sind für Arraykopien, das Abrufen der aktuellen Zeit, das Lesen von Umgebungsvariablen. Lesen Sie mehr unter Java-Systemklasse.
57. Was ist das instanceof-Schlüsselwort?
Wir können das instanceof-Schlüsselwort verwenden, um zu überprüfen, ob ein Objekt zu einer Klasse gehört oder nicht. Wir sollten seine Verwendung so weit wie möglich vermeiden. Beispielhafte Verwendung ist:
Da str zur Laufzeit vom Typ String ist, wird die erste if-Anweisung als wahr und die zweite als falsch ausgewertet.
58. Können wir String mit switch case verwenden?
Eine der Funktionen von Java 7 war die Verbesserung der switch-case-Anweisungen, um Strings zu erlauben. Wenn Sie Java 7 oder eine höhere Version verwenden, können Sie String in switch-case-Anweisungen verwenden. Lesen Sie mehr unter Java switch-case String Beispiel.
59. Ist Java Pass by Value oder Pass by Reference?
Dies ist eine sehr verwirrende Frage, wir wissen, dass Objektvariablen den Verweis auf die Objekte im Heap-Speicher enthalten. Wenn wir eine Methode aufrufen, wird eine Kopie dieser Variablen übergeben und im Stack-Speicher der Methode gespeichert. Wir können jede Sprache testen, ob sie per Referenz oder per Wert übergeben wird, durch eine einfache generische Tauschmethode, um mehr zu erfahren, lesen Sie Java ist Wert und nicht Referenz übergeben.
60. Was ist der Unterschied zwischen Heap- und Stack-Speicher?
Die wichtigsten Unterschiede zwischen Heap- und Stack-Speicher sind wie folgt:
- Heap-Speicher wird von allen Teilen der Anwendung verwendet, während Stack-Speicher nur von einem Ausführungsthread verwendet wird.
- Immer wenn ein Objekt erstellt wird, wird es immer im Heap-Speicher gespeichert und der Stack-Speicher enthält den Verweis darauf. Der Stack-Speicher enthält nur lokale primitive Variablen und Verweisvariablen auf Objekte im Heap-Speicher.
- Die Speicherverwaltung im Stack erfolgt nach dem LIFO-Prinzip, während sie im Heap-Speicher aufgrund der globalen Verwendung komplexer ist.
Für eine ausführliche Erklärung mit einem Beispielsprogramm lesen Sie Java Heap vs Stack-Speicher.
61. Java Compiler ist in JDK, JRE oder JVM gespeichert?
Die Aufgabe des Java-Compilers besteht darin, ein Java-Programm in Bytecode umzuwandeln. Dafür haben wir die ausführbare Datei javac
. Daher muss es in JDK gespeichert sein. Wir benötigen es nicht in JRE, und JVM sind nur die Spezifikationen.
62. Was wird der Ausgabe der folgenden Programme sein?
Kontext: Statische Methode in Klasse
Antwort: Der Code wird nicht kompiliert, weil wir keine statische Methode in der Object-Klasse mit dem Schlüsselwort static haben können. Beachten Sie, dass die Object-Klasse die Methode toString()
hat. Sie erhalten einen Kompilierungsfehler mit der Meldung „Diese statische Methode kann die Instanzmethode von Object nicht verdecken“. Der Grund dafür ist, dass die statische Methode zur Klasse gehört und da jede Klasse auf der Klasse Object basiert, können wir dieselbe Methode nicht sowohl in der Instanz als auch in der Klasse haben. Sie erhalten diesen Fehler nicht, wenn Sie den Methodennamen von toString() in etwas anderes ändern, das in der Superklasse Object
nicht vorhanden ist.
Kontext: Aufruf einer statischen Methode
Antwort: Nun, das ist eine merkwürdige Situation. Wir haben alle schon einmal eine NullPointerException
gesehen, wenn wir eine Methode auf einem Objekt aufrufen, das NULL ist. Aber hier wird das Programm funktionieren und „Test foo aufgerufen“ ausgeben.
Der Grund dafür ist die Java-Compiler-Codeoptimierung. Wenn der Java-Code in Bytecode kompiliert wird, erkennt er, dass foo() eine statische Methode ist und über die Klasse aufgerufen werden sollte. Daher ändert er den Methodenaufruf obj.foo()
in Test.foo()
und daher keine NullPointerException
.
I must admit that it’s a very tricky question and if you are interviewing someone, this will blow his mind off. ?
Das ist alles für Kern-Java-Interviewfragen und Antworten. Ich werde weiterhin weitere Fragen zur Liste hinzufügen. Wenn Sie denken, dass ich eine wichtige Frage verpasst habe, lassen Sie es mich bitte in den Kommentaren wissen.
Source:
https://www.digitalocean.com/community/tutorials/core-java-interview-questions-and-answers