ホームページ Java &#&面接の質問 Java 面接の質問 - 例外

Java 面接の質問 - 例外

Dec 10, 2020 pm 04:38 PM
java 異常な 面接の質問

Java 面接の質問 - 例外

Java 面接の質問の例外

面接の質問は次のとおりです:

1. Java の例外とは何ですか?

例外は、プログラムの実行中に発生し、通常のフローを中断する可能性のあるエラー イベントです。例外は、ユーザーが入力したデータが正しくない、ハードウェア障害、ネットワーク接続障害など、さまざまな種類の状況によって発生する可能性があります。

(学習ビデオ共有: java 教育ビデオ )

Java ステートメントの実行時にエラーが発生するたびに、例外オブジェクトが作成され、JRE は次の処理を試みます。例外を処理する例外処理プログラムを検索します。適切な例外ハンドラーが見つかった場合、例外オブジェクトはハンドラー コードに渡されて例外を処理します。これを例外のキャッチと呼びます。ハンドラーが見つからない場合、アプリケーションはランタイム環境に例外をスローし、JRE はプログラムを終了します。

Java 例外処理フレームワークは、実行時エラーの処理にのみ使用されます。コンパイル時エラーは、例外処理フレームワークでは処理されません。

2. Java の例外処理キーワードとは何ですか?

Java 例外処理では 4 つのキーワードが使用されます。

throw: 例外オブジェクトを明示的に作成し、それをスローしてプログラムの通常の処理を停止することがあります。 throw キーワードは、例外を処理するためにランタイムに例外をスローするために使用されます。

throws: チェックされた例外を処理せずにメソッドでスローする場合、メソッド シグネチャで throws キーワードを使用して、メソッドによってスローされる可能性のある例外を呼び出し側プログラムに知らせる必要があります。呼び出し側メソッドは、これらの例外を処理したり、 throws キーワードを使用して呼び出し側メソッドに例外を伝播したりできます。 throws 節および main() メソッドで複数の例外を提供できます。

try-catch: 例外処理のためにコード内で try-catch ブロックを使用します。 try はブロックの始まりであり、catch は try ブロックの終わりで例外を処理します。 try を使用すると複数の catch ブロックを使用でき、try-catch ブロックをネストすることもできます。 catch ブロックには、Exception 型のパラメータが必要です。

finally:finally ブロックはオプションであり、try-catch ブロック内でのみ使用できます。例外によって実行プロセスが一時停止されるため、閉じられないリソースがいくつか開かれる可能性があるため、finally ブロックを使用できます。 Finally ブロックは、例外が発生したかどうかに関係なく、常に実行されます。

3. Java 例外階層について説明しますか?

Java 例外は階層構造になっており、さまざまな種類の例外を分類するために継承が使用されます。 Throwable は Java 例外階層の親クラスであり、Error と Exception という 2 つの子オブジェクトがあります。例外はさらに、チェック例外と実行時例外に分類されます。

エラーとは、ハードウェア障害、JVM クラッシュ、メモリ不足エラーなど、アプリケーションの範囲を超え、予測および回復できない特殊な状況です。

チェック例外は、FileNotFoundException など、プログラム内で予期して回復を試みることができる特殊な状況です。この例外をキャッチしてユーザーに有用なメッセージを提供し、デバッグ用に適切にログに記録する必要があります。 Exception は、すべての Checked Exceptions の親クラスです。

実行時例外は、配列から要素を取得しようとするなど、不適切なプログラミングによって発生します。要素を取得する前に配列の長さを確認する必要があります。そうしないと、実行時に ArrayIndexOutOfBoundException がスローされる可能性があります。 RuntimeException は、すべてのランタイム例外の親クラスです。

4. Java 例外クラスの重要なメソッドは何ですか?

Exception とそのすべてのサブクラスは特定のメソッドを提供せず、すべてのメソッドは基本クラス Throwable で定義されます。

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

5. Java 7 ARM の機能とマルチキャッチ ブロックについて説明してください。

try ブロックで多くの例外をキャッチすると、catch ブロックのコードが非常に見苦しく、主にエラーをログに記録するための冗長なコードで構成されていることがわかります。Java 7 の機能の 1 つはマルチであることを思い出してください。 -キャッチブロック。 1 つの catch ブロックで複数の例外をキャッチできます。この機能を備えた catch ブロックは次のようになります。

catch(IOException | SQLException | Exception ex){
logger.error(ex);
throw new MyException(ex.getMessage());
}
ログイン後にコピー

ほとんどの場合、リソースを閉じるためにfinally ブロックを使用しますが、場合によってはブロックを閉じるのを忘れて、リソースが使い果たされたときに実行時例外が発生します。これらの例外はデバッグが難しいため、このタイプのリソースを使用しているすべての場所を調べて、確実に閉じていることを確認する必要がある場合があります。 Java 7 の改良点の 1 つは try-with-resources です。try ステートメントでリソースを作成し、それを try-catch ブロックで使用できるようになります。 try-catch ブロックから実行されると、ランタイム環境はこれらのリソースを自動的に閉じます。この改善が加えられた try-catch ブロックのサンプルは次のとおりです:

try (MyResource mr = new MyResource()) {
System.out.println("MyResource created in try-with-resources");
} catch (Exception e) {
e.printStackTrace();
}
ログイン後にコピー

(その他の関連するインタビューの質問が共有されています: java インタビューの質問と回答 )

6. Java でチェックされるもの未チェック例外との違いは何ですか?

チェック例外は、try-catch ブロックを使用してコードで処理する必要があります。それ以外の場合、メソッドは throws キーワードを使用して、メソッドからスローされる可能性のあるチェック例外について呼び出し元に知らせる必要があります。チェックされていない例外は、プログラム内で処理したり、メソッドの throws 句で言及したりする必要はありません。

Exception は、すべてのチェック例外 RuntimeException のスーパークラスですが、すべての未チェック例外のスーパークラスです。 RuntimeException は Exception のサブクラスであることに注意してください。

已检查的异常是需要在代码中处理的错误方案,否则您将收到编译时错误。例如,如果您使用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;
}
}
ログイン後にコピー

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入门教程

以上がJava 面接の質問 - 例外の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプ Java での日付までのタイムスタンプ Aug 30, 2024 pm 04:28 PM

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルの量を見つけるためのJavaプログラム カプセルの量を見つけるためのJavaプログラム Feb 07, 2025 am 11:37 AM

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

未来を創る: まったくの初心者のための Java プログラミング 未来を創る: まったくの初心者のための Java プログラミング Oct 13, 2024 pm 01:32 PM

Java は、初心者と経験豊富な開発者の両方が学習できる人気のあるプログラミング言語です。このチュートリアルは基本的な概念から始まり、高度なトピックに進みます。 Java Development Kit をインストールしたら、簡単な「Hello, World!」プログラムを作成してプログラミングを練習できます。コードを理解したら、コマンド プロンプトを使用してプログラムをコンパイルして実行すると、コンソールに「Hello, World!」と出力されます。 Java の学習はプログラミングの旅の始まりであり、習熟が深まるにつれて、より複雑なアプリケーションを作成できるようになります。

See all articles