Heim  >  Artikel  >  Java  >  Grundlegende Fragen zu Java-Hochfrequenzinterviews——(2)

Grundlegende Fragen zu Java-Hochfrequenzinterviews——(2)

王林
王林nach vorne
2020-08-29 16:18:262262Durchsuche

Grundlegende Fragen zu Java-Hochfrequenzinterviews——(2)

Der Inhalt der Interviewfragen lautet wie folgt:

(Empfohlene verwandte Interviewfragen: Java-Interviewfragen und -antworten)

1. String s = new String("xyz"); Wie viele StringObjects haben erstellt worden? Ist es möglich, die String-Klasse zu erben?

Es ist möglich, dass „xyz“ einem Objekt entspricht, egal wie oft die Konstante „xyz“ vorkommt immer derjenige im Puffer sein. Jedes Mal, wenn NewString geschrieben wird, wird ein neues Objekt erstellt, das den Inhalt des konstanten „xyz“-Objekts verwendet, um ein neues String-Objekt zu erstellen.

Wenn „xyz“ bereits verwendet wurde, wird „xyz“ hier nicht erstellt. Zu diesem Zeitpunkt wird ein StringObject erstellt , dann wird zu diesem Zeitpunkt ein Objekt erstellt und in den Puffer gelegt. In diesem Fall werden zwei Objekte erstellt. Die Antwort auf die Frage, ob die String-Klasse vererbt wird, lautet „Nein“, da String standardmäßig endgültig geändert wird und nicht vererbbar ist.

2. Der Unterschied zwischen String und StringBuffer

Die JAVA-Plattform bietet zwei Klassen: String und StringBuffer, die Zeichenfolgen, also Zeichendaten mit mehreren Zeichen, speichern und verarbeiten können. Die String-Klasse stellt numerisch unveränderliche Strings bereit. Die von dieser StringBuffer-Klasse bereitgestellte Zeichenfolge kann geändert werden. Sie können StringBuffer verwenden, wenn Sie wissen, dass sich die Zeichendaten ändern werden. Normalerweise verwenden Sie StringBuffers, um Zeichendaten dynamisch zu erstellen.

3. Wie viele Objekte werden insgesamt durch die folgende Anweisung erstellt: String s="a"+"b"+"c"+"d";

Für den folgenden Code:

String s1 = "a";
String s2 = s1 + "b";
String s3 = "a" + "b";
System.out.println(s2 == "ab");
System.out.println(s3 == "ab");

Der erste Anweisung Das gedruckte Ergebnis ist falsch und die zweite Anweisung gibt wahr aus. Dies zeigt, dass die Javac-Kompilierung den Ausdruck des direkten Hinzufügens von Zeichenfolgenkonstanten optimieren kann. Es ist nicht erforderlich, bis zur Laufzeit zu warten, sondern im Kompilierungsprozess . Wenn Sie das Pluszeichen entfernen, kompilieren Sie es direkt in ein Ergebnis der Verbindung dieser Konstanten.

Die erste Codezeile in der Frage wird vom Compiler zur Kompilierungszeit optimiert, was der direkten Definition einer Zeichenfolge von „abcd“ entspricht. Daher sollte der obige Code nur ein String-Objekt erstellen. Schreiben Sie die folgenden zwei Codezeilen:

String s ="a" + "b" +"c" + "d";
System.out.println(s== "abcd");

Das gedruckte Endergebnis sollte wahr sein.

4. In try {} gibt es eine Return-Anweisung. Wird der Code in „finally“ also unmittelbar nach diesem Versuch ausgeführt?

Wir kennen die Anweisung in „final“. {} wird auf jeden Fall ausgeführt, daher wird dies normalerweise vor der Rückgabe ausgegeben, und diese Methode wird möglicherweise nach der Rückgabe angezeigt, aber es sollte genauer sein, sie mitten in der Rückgabe auszuführen Das laufende Ergebnis des Programmcodes unten:

public classTest {
    public static void main(String[]args) {
       System.out.println(newTest().test());;
    }
    static int test()
    {
       intx = 1;
       try
       {
          returnx;
       }
       finally
       {
          ++x;
       }
    }
  
}
---------执行结果 ---------
1

Das laufende Ergebnis ist 1, warum? Der Prozess, bei dem die Hauptfunktion die Unterfunktion aufruft und das Ergebnis erhält, ähnelt der Vorbereitung eines leeren Glases durch die Hauptfunktion. Wenn die Unterfunktion das Ergebnis zurückgeben möchte, legt sie das Ergebnis zuerst im Glas ab und gibt dann das Programm zurück Logik zur Hauptfunktion hinzufügen. Die sogenannte Rückgabe bedeutet, dass die Unterfunktion sagt: „Ich werde sie nicht mehr ausführen. Lassen Sie Ihre Hauptfunktion weiterlaufen. Es gibt überhaupt kein Ergebnis. Das Ergebnis wird in das Glas gegeben, bevor dies gesagt wird.“

(Video-Tutorial-Empfehlung:

Java-Kurs)

5. Der Unterschied zwischen „final“, „finally“ und „finalize“.

final wird zum Deklarieren von Attributen, Methoden und Klassen verwendet. Dies bedeutet, dass Attribute unveränderlich sind, Methoden nicht überschrieben werden können und Klassen nicht vererbt werden können. Damit innere Klassen auf lokale Variablen zugreifen können, müssen lokale Variablen als endgültiger Typ definiert werden.

finally ist Teil der Struktur der Ausnahmebehandlungsanweisung, was bedeutet, dass sie immer ausgeführt wird.

finalize ist eine Methode der Object-Klasse. Diese Methode des recycelten Objekts wird aufgerufen, wenn der Garbage Collector ausgeführt wird. Diese Methode kann überschrieben werden, um während der Garbage Collection andere Ressourcen wie das Schließen von Dateien bereitzustellen. Aber die JVM garantiert nicht, dass diese Methode immer aufgerufen wird

6 Was sind die Gemeinsamkeiten und Unterschiede zwischen Laufzeitausnahmen und allgemeinen Ausnahmen?

Ausnahmen stellen abnormale Bedingungen dar, die während der Programmausführung auftreten können. Laufzeitausnahmen stellen Ausnahmen dar, die im normalen Betrieb einer virtuellen Maschine auftreten können und ein häufiger Betriebsfehler sind. Der Java-Compiler erfordert, dass Methoden deklariert werden müssen, um möglicherweise auftretende Nicht-Laufzeitausnahmen auszulösen. Es ist jedoch nicht erforderlich, dass Methoden deklariert werden, um nicht abgefangene Laufzeitausnahmen auszulösen.

7. Was ist der Unterschied zwischen Fehler und Ausnahme?

Fehler stellen ein ernstes Problem dar, wenn eine Wiederherstellung nicht unmöglich, aber schwierig ist. Zum Beispiel Speicherüberlauf. Es ist unmöglich, von einem Programm zu erwarten, dass es mit einer solchen Situation zurechtkommt. Ausnahme stellt ein Design- oder Implementierungsproblem dar. Das heißt, es stellt eine Situation dar, die bei normaler Ausführung des Programms niemals eintreten würde.

8. Sprechen Sie kurz über die einfachen Prinzipien und Anwendungen des Ausnahmebehandlungsmechanismus in Java.

Ausnahmen beziehen sich auf ungewöhnliche Situationen oder Fehler, die auftreten, wenn ein Java-Programm ausgeführt wird (nicht kompiliert). Ereignisse im wirklichen Leben können Informationen wie Zeit, Ort, Charakter, Handlung usw. enthalten . des Ereignisses. Es kann durch ein Objekt dargestellt werden, um Ausnahmen zu behandeln. Es kapselt jede im Programm auftretende Ausnahme ein.

Java klassifiziert Ausnahmen. Die Stammklasse aller Ausnahmen ist java.lang. Zwei Unterklassen sind von Throwable abgeleitet:

Error und Exception Die Anwendung selbst kann Probleme wie Speicherüberlauf und Thread-Deadlock nicht überwinden und beheben, und das Programm kann nur abstürzen.

Eine Ausnahme stellt ein Problem dar, das das Programm noch überwinden und beheben kann. Es ist in Systemausnahmen und gewöhnliche Ausnahmen unterteilt:

Systemausnahmen sind Probleme, die durch Fehler in der Software selbst verursacht werden, dh Probleme, die durch die Armen der Softwareentwickler verursacht werden Softwarebenutzer können dieses Problem nicht überwinden und beheben, aber sie können trotzdem zulassen, dass das Softwaresystem weiterläuft oder die Software unter diesem Problem hängen bleibt, z. B. Array-Skript außerhalb der Grenzen (ArrayIndexOutOfBoundsException), Klasse NullPointerException Konvertierungsausnahme (ClassCastException);

Häufige Ausnahmen sind Probleme, die durch Änderungen oder Ausnahmen in der laufenden Umgebung verursacht werden, wie z. B. Netzwerkunterbrechung und unzureichender Festplattenspeicher sterben.

Java bietet verschiedene Lösungen für Systemausnahmen und gewöhnliche Ausnahmen. Der Compiler erzwingt die Verarbeitung gewöhnlicher Ausnahmen durch try..catch oder die Weiterleitung an die aufrufende Methode der oberen Ebene mit einer throws-Anweisung, sodass gewöhnliche Ausnahmen auch als geprüfte Ausnahmen bezeichnet werden , während Systemausnahmen auch als geprüfte Ausnahmen bezeichnet werden. Ausnahmen können behandelt werden oder nicht. Daher erzwingt der Compiler keine try..catch-Verarbeitung oder löst eine Deklaration aus, daher werden Systemausnahmen auch als ungeprüfte Ausnahmen bezeichnet.

(Empfohlenes Tutorial: Java-Einführungs-Tutorial)

9 Was ist der Unterschied zwischen Heap und Stack in Java?

Heap und Stack in JVM gehören zu unterschiedlichen Speicherbereichen und werden für unterschiedliche Zwecke verwendet. Der Stapel wird häufig zum Speichern von Methodenrahmen und lokalen Variablen verwendet, während Objekte immer auf dem Heap zugewiesen werden. Der Stapel ist normalerweise kleiner als der Heap und wird nicht von mehreren Threads gemeinsam genutzt, wohingegen der Heap von allen Threads in der gesamten JVM gemeinsam genutzt wird.

Stack: Einige in der Funktion definierte Grundtypen von Variablen und Objektreferenzvariablen werden im Stapelspeicher der Funktion zugewiesen. Wenn eine Variable in einem Codeblock definiert wird, weist Java dieser Variablen Speicherplatz zu. Wenn der Gültigkeitsbereich der Variablen überschritten wird, gibt Java automatisch den für die Variable zugewiesenen Speicherplatz frei und der Speicherplatz kann sofort für andere Zwecke verwendet werden.

Heap: Heap-Speicher wird zum Speichern von neu erstellten Objekten und Arrays verwendet. Der im Heap zugewiesene Speicher wird vom automatischen Garbage Collector der Java Virtual Machine verwaltet. Nachdem ein Array oder Objekt im Heap generiert wurde, können Sie auch eine spezielle Variable im Stapel definieren, sodass der Wert der Variablen im Stapel der ersten Adresse des Arrays oder Objekts im Heap-Speicher entspricht im Stapel wird Nachdem Sie die Referenzvariable des Arrays oder Objekts erhalten haben, können Sie die Referenzvariable im Stapel verwenden, um auf das Array oder Objekt im Heap im Programm zuzugreifen. Die Referenzvariable entspricht der Angabe eines Namens für das Array oder Objekt.

10. Kann int in eine Variable vom Typ Byte umgewandelt werden? Was passiert, wenn der Wert größer als der Bereich des Bytetyps ist?

Wir können eine Umwandlung durchführen, aber int in Java beträgt 32 Bit und Byte 8 Bit. Bei der Umwandlung werden also die hohen 24 Bit des Typs int verworfen, da der Bereich des Bytetyps zwischen -128 und liegt 127.

Das obige ist der detaillierte Inhalt vonGrundlegende Fragen zu Java-Hochfrequenzinterviews——(2). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen