Heim > Java > JavaInterview Fragen > Hauptteil

Fragen zu Java-Interviews – Ausnahmen

王林
Freigeben: 2020-12-10 16:38:05
nach vorne
3738 Leute haben es durchsucht

Fragen zu Java-Interviews – Ausnahmen

Java-Interviewfragen zu Ausnahmen

Die Interviewfragen lauten wie folgt:

1 Was sind Ausnahmen in Java?

Ausnahmen sind Fehlerereignisse, die während der Ausführung eines Programms auftreten und seinen normalen Ablauf unterbrechen können. Ausnahmen können sich aus verschiedenen Situationen ergeben, z. B. durch vom Benutzer eingegebene falsche Daten, Hardwarefehler, Netzwerkverbindungsfehler usw.

(Teilen von Lernvideos: Java-Lehrvideo)

Immer wenn beim Ausführen einer Java-Anweisung ein Fehler auftritt, wird ein Ausnahmeobjekt erstellt und die JRE versucht dann, einen Ausnahmehandler zur Behandlung der Ausnahme zu finden. Wenn ein geeigneter Ausnahmehandler gefunden wird, wird das Ausnahmeobjekt an den Handlercode übergeben, um die Ausnahme zu behandeln. Dies wird als Abfangen der Ausnahme bezeichnet. Wenn der Handler nicht gefunden wird, löst die Anwendung eine Ausnahme in der Laufzeitumgebung aus und die JRE beendet das Programm.

Das Java-Framework zur Ausnahmebehandlung wird nur zur Behandlung von Laufzeitfehlern verwendet. Fehler zur Kompilierungszeit werden vom Framework zur Ausnahmebehandlung nicht behandelt.

2. Was ist das Schlüsselwort für die Ausnahmebehandlung in Java?

Vier Schlüsselwörter werden bei der Java-Ausnahmebehandlung verwendet.

werfen: Manchmal möchten wir explizit ein Ausnahmeobjekt erstellen und es dann auslösen, um die normale Verarbeitung des Programms zu stoppen. Das Schlüsselwort throw wird verwendet, um eine Ausnahme zur Laufzeit auszulösen, um diese zu behandeln.

throws: Wenn wir eine geprüfte Ausnahme in einer Methode auslösen, ohne sie zu behandeln, müssen wir das Schlüsselwort throws in der Methodensignatur verwenden, um das aufrufende Programm über die Ausnahme zu informieren, die die Methode möglicherweise auslöst. Die aufrufende Methode kann diese Ausnahmen behandeln oder sie mithilfe des Schlüsselworts throws an die aufrufende Methode weitergeben. Wir können mehrere Ausnahmen in der throws-Klausel und auch mit der main()-Methode bereitstellen.

Try-Catch: Wir verwenden Try-Catch-Blöcke in unserem Code zur Ausnahmebehandlung. try ist der Anfang des Blocks und Catch behandelt die Ausnahme am Ende des Try-Blocks. Mit try können wir mehrere Catch-Blöcke haben, und Try-Catch-Blöcke können auch verschachtelt werden. Der Catch-Block erfordert einen Parameter, der vom Typ Exception sein sollte.

finally: Der „finally“-Block ist optional und kann nur in Try-Catch-Blöcken verwendet werden. Da Ausnahmen den Ausführungsprozess anhalten, öffnen wir möglicherweise einige Ressourcen, die nicht geschlossen werden, sodass wir „finally block“ verwenden können. Der final-Block wird immer ausgeführt, unabhängig davon, ob eine Ausnahme auftritt.

3. Erklären Sie die Java-Ausnahmehierarchie?

Java-Ausnahmen sind hierarchisch und Vererbung wird verwendet, um verschiedene Arten von Ausnahmen zu klassifizieren. Throwable ist die übergeordnete Klasse der Java Exceptions Hierarchy und verfügt über zwei untergeordnete Objekte – Error und Exception. Ausnahmen werden weiter in geprüfte Ausnahmen und Laufzeitausnahmen unterteilt.

Fehler sind besondere Umstände, die außerhalb des Anwendungsbereichs liegen und nicht vorhersehbar und behebbar sind, wie z. B. Hardwarefehler, JVM-Abstürze oder Fehler aufgrund von unzureichendem Arbeitsspeicher.

Geprüfte Ausnahmen sind besondere Situationen, mit denen wir rechnen können und die wir in unseren Programmen zu beheben versuchen, wie z. B. FileNotFoundException. Wir sollten diese Ausnahme abfangen und dem Benutzer eine nützliche Nachricht senden und sie zum Debuggen ordnungsgemäß protokollieren. Exception ist die übergeordnete Klasse aller Checked Exceptions.

Laufzeitausnahmen werden durch fehlerhafte Programmierung verursacht, beispielsweise durch den Versuch, Elemente aus einem Array abzurufen. Wir sollten die Länge des Arrays überprüfen, bevor wir versuchen, Elemente abzurufen, da sonst zur Laufzeit möglicherweise eine ArrayIndexOutOfBoundException ausgelöst wird. RuntimeException ist die übergeordnete Klasse aller Laufzeitausnahmen.

4. Was sind die wichtigen Methoden der Java-Ausnahmeklasse?

Exception und alle seine Unterklassen stellen keine spezifischen Methoden bereit und alle Methoden sind in der Basisklasse Throwable definiert.

String getMessage() - 此方法返回消息String of Throwable,并且可以在通过构造函数创建异常时提供消息。
String getLocalizedMessage() - 提供此方法,以便子类可以覆盖它以向调用程序提供特定于语言环境的消息。此方法getMessage()的可抛出类实现只是使用方法来返回异常消息。
synchronized Throwable getCause() - 此方法返回异常的原因或null id,原因未知。
String toString() - 此方法以String格式返回有关Throwable的信息,返回的String包含Throwable类和本地化消息的名称。
void printStackTrace() - 此方法将堆栈跟踪信息打印到标准错误流,此方法已重载,我们可以将PrintStream或PrintWriter作为参数传递,以将堆栈跟踪信息写入文件或流。
Nach dem Login kopieren

5. Java 7 ARM-Funktionen und Multi-Catch-Blöcke erklären?

Wenn Sie viele Ausnahmen in einem Try-Block abfangen, werden Sie feststellen, dass der Code des Catch-Blocks sehr hässlich aussieht und hauptsächlich aus redundantem Code zum Protokollieren von Fehlern besteht. Denken Sie daran, dass eine der Funktionen von Java 7 Multi-Catch-Blöcke sind. Wir können mehrere Ausnahmen in einem Catch-Block abfangen. Ein Catch-Block mit dieser Funktionalität sieht so aus:

catch(IOException | SQLException | Exception ex){
logger.error(ex);
throw new MyException(ex.getMessage());
}
Nach dem Login kopieren

Meistens verwenden wir Final-Blöcke, um Ressourcen zu schließen. Manchmal vergessen wir, sie zu schließen und erhalten eine Laufzeitausnahme, wenn die Ressource erschöpft ist. Diese Ausnahmen sind schwer zu debuggen und wir müssen uns möglicherweise jeden Ort ansehen, an dem wir diese Art von Ressource verwenden, um sicherzustellen, dass wir sie schließen. Eine der Verbesserungen in Java 7 ist also Try-with-Resources. Wir können eine Ressource in der Try-Anweisung erstellen und sie im Try-Catch-Block verwenden. Wenn die Ausführung von einem Try-Catch-Block kommt, schließt die Laufzeitumgebung diese Ressourcen automatisch. Ein Beispiel für einen Try-Catch-Block mit dieser Verbesserung ist:

try (MyResource mr = new MyResource()) {
System.out.println("MyResource created in try-with-resources");
} catch (Exception e) {
e.printStackTrace();
}
Nach dem Login kopieren

(Weitere verwandte Interviewfragen geteilt: Java-Interviewfragen und -antworten)

6 Was ist der Unterschied zwischen aktivierten und nicht aktivierten Ausnahmen in Java?

Geprüfte Ausnahmen sollten im Code mithilfe eines Try-Catch-Blocks behandelt werden. Andernfalls sollten Methoden das Schlüsselwort throws verwenden, um den Aufrufer über geprüfte Ausnahmen zu informieren, die möglicherweise von der Methode ausgelöst werden. Ungeprüfte Ausnahmen müssen nicht im Programm behandelt oder in der throws-Klausel der Methode erwähnt werden.

Exception ist die Oberklasse aller geprüften Ausnahmen RuntimeException, aber die Oberklasse aller ungeprüften Ausnahmen. Bitte beachten Sie, dass RuntimeException eine Unterklasse von Exception ist.

已检查的异常是需要在代码中处理的错误方案,否则您将收到编译时错误。例如,如果您使用FileReader读取文件,它会抛出FileNotFoundException,我们必须在try-catch块中捕获它或将其再次抛给调用方法。

未经检查的异常主要是由编程不良引起的,例如在对象引用上调用方法时的NullPointerException,而不确保它不为null。例如,我可以编写一个方法来从字符串中删除所有元音。确保不传递空字符串是调用者的责任。我可能会改变方法来处理这些场景,但理想情况下,调用者应该处理这个问题。

7、Java中throw和throws关键字有什么区别?

throws关键字与方法签名一起用于声明方法可能抛出的异常,而throw关键字用于破坏程序流并将异常对象移交给运行时来处理它。

8、如何在Java中编写自定义异常?

我们可以扩展Exception类或其任何子类来创建我们的自定义异常类。自定义异常类可以拥有自己的变量和方法,我们可以使用它们将错误代码或其他与异常相关的信息传递给异常处理程序。

自定义异常的一个简单示例如下所示。

package com.journaldev.exceptions;
import java.io.IOException;
public class MyException extends IOException {
private static final long serialVersionUID = 4664456874499611218L;
private String errorCode="Unknown_Exception";
public MyException(String message, String errorCode){
super(message);
this.errorCode=errorCode;
}
public String getErrorCode(){
return this.errorCode;
}
}
Nach dem Login kopieren

9、Java中的OutOfMemoryError是什么?

Java中的OutOfMemoryError是java.lang.VirtualMachineError的子类,当JVM用完堆内存时,它会抛出它。我们可以通过提供更多内存来通过java选项运行java应用程序来修复此错误。

$>java MyProgram -Xms1024m -Xmx1024m -XX:PermSize=64M -XX:MaxPermSize=256m

10、“主线程中的异常”有哪些不同的情况?

一些常见的主线程异常情况是:

主线程java.lang.UnsupportedClassVersionError中的异常:

当您的java类是从另一个JDK版本编译并且您尝试从另一个Java版本运行它时,会出现此异常。

主线程java.lang.NoClassDefFoundError中的异常:

此异常有两种变体。第一个是您提供类全名和.class扩展名的地方。第二种情况是找不到Class。

主线程java.lang.NoSuchMethodError中的异常:

main:当您尝试运行没有main方法的类时会出现此异常。

线程“main”中的异常java.lang.ArithmeticException:

每当从main方法抛出任何异常时,它都会打印异常是控制台。第一部分解释了从main方法抛出异常,第二部分打印异常类名,然后在冒号后打印异常消息。

11、Java中的final,finally和finalize有什么区别?

final和finally是java中的关键字,而finalize是一种方法。

final关键字可以与类变量一起使用,以便它们不能被重新分配,类可以避免按类扩展,并且使用方法来避免子类覆盖。

finally关键字与try-catch块一起使用,以提供始终执行的语句即使出现一些异常,通常最终也会用来关闭资源。

finalize()方法由垃圾收集器在销毁对象之前执行,这是确保关闭所有全局资源的好方法。

在三者之中,最后只涉及到java异常处理。

12、当main方法抛出异常时会发生什么?

当main()方法抛出异常时,Java Runtime终止程序并在系统控制台中打印异常消息和堆栈跟踪。

13、我们可以有一个空的catch块吗?

我们可以有一个空的catch块,但它是最差编程的例子。我们永远不应该有空的catch块,因为如果异常被该块捕获,我们将没有关于异常的信息,并且它将成为调试它的噩梦。应该至少有一个日志记录语句来记录控制台或日志文件中的异常详细信息。

14、提供一些Java异常处理最佳实践?

与Java异常处理相关的一些最佳实践是:

使用特定异常以便于调试。

在程序中尽早抛出异常(Fail-Fast)。

在程序后期捕获异常,让调用者处理异常。

使用Java 7 ARM功能确保资源已关闭或使用finally块正确关闭它们。

始终记录异常消息以进行调试。

使用multi-catch块清洁关闭。

使用自定义异常从应用程序API中抛出单一类型的异常。

遵循命名约定,始终以Exception结束。

记录在javadoc中使用@throws的方法抛出的异常。

异常是昂贵的,所以只有在有意义的时候抛出它。否则,您可以捕获它们并提供空或空响应。

相关推荐:java入门教程

Das obige ist der detaillierte Inhalt vonFragen zu Java-Interviews – Ausnahmen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage