Heim >Java >JavaInterview Fragen >Grundlegende Java-Interviewfragen (3)

Grundlegende Java-Interviewfragen (3)

(*-*)浩
(*-*)浩Original
2019-12-03 15:14:052127Durchsuche

Grundlegende Java-Interviewfragen (3)

String s = new String("xyz");Wie viele StringObjects werden erstellt? Ist es möglich, die String-Klasse zu erben? Beides oder eines ist möglich. Dieses Objekt wird im String-Konstantenpuffer platziert. xyz“ erscheint, ist es diejenige im Puffer. (Empfohlenes Lernen: Java-Interviewfragen )

Newstring Erstellen Sie jedes Mal ein neues Objekt. Es verwendet den Inhalt des „konstanten“ xyz „-Objekts, um ein neues String-Objekt zu erstellen. Wenn „xyz“ bereits verwendet wurde, wird „xyz“ hier nicht erstellt. Es wird direkt aus dem Puffer entnommen und ein StringObject erstellt. Wenn „xyz“ jedoch noch nicht verwendet wurde, dann Zu diesem Zeitpunkt wird ein Objekt erstellt und im Puffer abgelegt. 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.

Der Unterschied zwischen String und StringBuffer

Die JAVA-Plattform bietet zwei Klassen: String und StringBuffer, die Zeichenfolgen speichern und betreiben können, also mehrere enthalten Zeichendaten für Zeichen. 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.


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

Die erste Anweisung gibt ein Ergebnis von false aus und die zweite Anweisung gibt ein Ergebnis von true aus. Dies zeigt, dass die Javac-Kompilierung String-Konstanten direkt hinzufügen kann. Um den Ausdruck zu optimieren, muss nicht gewartet werden, bis die Laufzeit den Additionsvorgang ausführt. Stattdessen wird das Pluszeichen während der Kompilierung entfernt und er wird direkt in ein Ergebnis der Verbindung dieser Konstanten kompiliert. 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.

Es gibt eine Return-Anweisung in try {}. Wird der Code in final {} also unmittelbar nach dem Try ausgeführt?

Wir wissen, dass die Anweisung in „finally{}“ definitiv ausgeführt wird, daher kann es sein, dass sie vor der Rückkehr normal herausplatzt, und diese Methode kann nach der Rückkehr herauskommen, aber genauer gesagt sollte in der Mitte der Rückkehr ausgeführt werden. Bitte sehen Sie sich das Ausführungsergebnis des Programmcodes unten an:

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

---------Ausführungsergebnis---------

1

Das Operationsergebnis 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 zunächst im Glas ab und gibt dann die Programmlogik an die Hauptfunktion zurück.

Die sogenannte Rückgabe bedeutet, dass die Unterfunktion sagt: Ich werde nicht mehr ausgeführt, Ihre Hauptfunktion kann überhaupt nicht ausgeführt werden. Das Ergebnis wird in das Glas gegeben, bevor es gesagt wird Das.

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, um andere Ressourcen wiederherzustellen Schließen von Dateien usw. . Die JVM garantiert jedoch nicht, dass diese Methode immer aufgerufen wird.


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.

Was ist der Unterschied zwischen Fehler und Ausnahme?

Fehler weist auf ein ernstes Problem in einer Situation hin, in der 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.

Besprechen Sie kurz 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 Zeit, Ort, Charakter, Handlung usw. umfassen. Informationen können durch ein Objekt dargestellt werden.

Java verwendet einen objektorientierten Ansatz zur Behandlung von Ausnahmen. Es kapselt jede im Programm auftretende Ausnahme in ein Objekt, um sie darzustellen, und das Objekt enthält Ausnahmeinformationen.

Java klassifiziert Ausnahmen. Verschiedene Arten von Ausnahmen werden durch verschiedene Java-Klassen dargestellt. Die Stammklasse aller Ausnahmen ist java.lang.Throwable, und zwei Unterklassen werden von Throwable abgeleitet:

Fehler und Ausnahme: Fehler stellen ein ernstes Problem dar, das die Anwendung selbst nicht überwinden und beheben kann. Das Programm stürzt beispielsweise nur bei Systemproblemen wie Speicherüberlauf und Thread-Deadlock ab.

Eine Ausnahme weist auf ein Problem hin, das das Programm überwinden und beheben kann. Es ist in Systemausnahmen und gewöhnliche Ausnahmen unterteilt:

Systemausnahmen sind Die Software selbst. Durch Fehler verursachte Probleme sind Probleme, die durch mangelnde Berücksichtigung durch Softwareentwickler verursacht werden. Softwarebenutzer können dieses Problem nicht überwinden und beheben. Bei solchen Problemen können sie jedoch zulassen, dass das Softwaresystem weiterläuft oder dass die Software hängen bleibt.

Zum Beispiel Array-Skript außerhalb der Grenzen (ArrayIndexOutOfBoundsException), Nullzeiger-Ausnahme (NullPointerException), Klassenkonvertierungsausnahme (ClassCastException);

Gewöhnliche Ausnahmen sind Probleme, die durch Änderungen oder Ausnahmen in verursacht werden B. die Unterbrechung der Netzwerkverbindung und unzureichender Festplattenspeicher, sollten nicht dazu führen, dass das Programm nach dem Auftreten solcher Ausnahmen abstürzt.

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

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, verwendet Java Just Weisen Sie dieser Variablen Speicherplatz auf dem Stapel 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 Sie ein Array oder Objekt im Heap generiert haben, können Sie auch eine spezielle Variable im Stapel definieren, sodass der Wert dieser Variablen im Stapel gleich der ersten Adresse des Arrays oder Objekts im Stapel ist Der Stapelspeicher wird zu einer Referenzvariablen des Arrays oder Objekts. In Zukunft können Sie die Referenzvariable im Stapel verwenden, um auf das Array oder Objekt im Heap zuzugreifen Geben Sie dem Array oder Objekt einen Namen.

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 erzwungene Konvertierung durchführen, aber int in Java beträgt 32 Bit und Byte 8 Bit. Daher werden bei einer erzwungenen Konvertierung die hohen 24 Bit des int-Typs verworfen, da Byte The Der Typbereich reicht von -128 bis 128.

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn