検索

Javaの例外とは何ですか?

Nov 16, 2019 pm 05:23 PM
java異常な

Javaの例外とは何ですか?

#例外とは何ですか?

Java の基本的な考え方として、構造が不十分なコードは実行できないというものがあります。

エラーを見つけるのに最適な時期はコンパイル中です。ただし、コンパイラはすべてのエラーを検出できるわけではないため、プログラムの実行中に残りの問題を解決する必要があります。これには、エラーが何らかの方法で処理のために適切な情報を特定の受信者に渡すことができる必要があります。

Java における例外処理の目的は、少量のコードを使用して、大規模で信頼性の高いプログラムの生成を簡素化することです。このようにして、アプリケーションに未処理のエラーがなく、明らかなエラーも発生します。利点: エラー処理コードの複雑さが軽減されます。

異常とは、文字通りの意味によれば、予期せぬことを意味します。コード レベルで理解するには、現在のメソッドまたはスコープが実行を継続できないようにします。例外とは、プログラムが意図した実行で機能しなくなる原因となるイベントです。例外には、チェック例外、エラー、実行時例外の 3 種類があります。

Java では、例外はオブジェクトとして扱われ、その基本クラスは Throwable です。

Java の例外タイプ

Java は、Throwable から直接 Exception と Error を派生します。このうち、Exception はスローされる基本的な型であり、Java のクラス ライブラリ、メソッド、実行時のエラーなどで例外型の例外がスローされることがあります。例外は、コンパイラによって捕捉できる回復可能な例外を表します。エラーは、コンパイル時およびシステム エラーを表し、システムの実行中に重大なエラーが発生したことを示します。これは回復不可能なエラーです。 JVM レベルなので、このエラーによりプログラムの実行が終了します。例外は、チェック例外と実行時例外に分けられます。

例外クラスの構造階層図は次のとおりです。

Javaの例外とは何ですか?

代表的な RuntimeException (実行時例外) には、NullPointerException、ClassCastException (型変換例外)、IndexOutOfBoundsException が含まれます。 (範囲外例外) Exception)、IllegalArgumentException (不正なパラメータ例外)、ArrayStoreException (配列ストレージ例外)、AruthmeticException (算術例外)、BufferOverflowException (バッファ オーバーフロー例外) など;

Javaの例外とは何ですか?

Non-RuntimeException(チェック例外) には、IOException、SQLException、InterruptedException (呼び出しスレッドがスリープしているときの中断例外)、NumberFormatException (数値フォーマット例外) などが含まれます。

コンパイラのチェック方法により、例外はチェック例外(CheckedException)とチェックされない例外(UncheckedException)に分けられます。 Error と RuntimeException の組み合わせは UncheckedException と呼ばれます。コンパイラはメソッドがこれら 2 種類の例外を処理するかスローするかをチェックしないため、このように呼ばれます。したがって、コンパイル中にこの種類の例外が発生してもエラーは報告されません。デフォルト仮想マシンは処理メソッドを提供します。 Error と RuntimeException の 2 種類の例外を除いて、その他の例外はチェック例外と呼ばれます。

Javaの例外とは何ですか?

#Java による例外の処理方法

1. try-catch、try-finally、try-catch-finally

チェックされた型の例外の場合は、それを処理するか、メソッド ヘッダーで throws を使用する必要があります。

public static void createFile() throws IOException{
    File file = new File("C:/test.txt");
    if(!file.exists()){
            file.createNewFile();
    }
}
public static void main(String[] args) {
    try {
        createFile();
    } catch (IOException ex) {
        // handle exception here
    }
}

catch に関する注意点がいくつかあります:

1) パラメーターの例外タイプは、Throwable クラスまたはそのサブクラスである必要があります。

2) catch ステートメントを上から下に記述する場合、パラメーターの型はサブクラスから親クラスの順序である必要があります。これは、型が一致すると、後続の catch は無視されるためです。たとえば、IOException は Exception の前に配置する必要があります。そうしないと、コンパイラによってエラーが報告されます。

3) では、1 つ以上の catch ステートメントを使用できます。finally ステートメントがある場合でも、try-finally などの catch ステートメントを使用することはできません。

複数の例外をキャッチしたい場合は、複数の catch ステートメントを使用できます。JDK7 以降では、マルチキャッチという別の方法が提供されます。

try{
    // other code
} catch (IOException | SQLException ex) {
    throw ex;  
}

4).例外を無視しないでください。ファイルの状態を変更していないため、回復アクションを実行する必要がなく、必要な情報がファイルから読み取られているため、FileInputStream を閉じる場合を除き、空の catch ブロックは例外の目的を無効にします。したがって、進行中の操作を終了する必要はありません。

finally に関する注意点がいくつかあります:

1) try または catch ステートメントの実行時に仮想マシンが終了しない限り、finally のコードは常に実行されます (System.exit(1) ))。

2).finally ブロックは、ファイルを閉じる、カーソルを閉じるなど、リソースのクリーンアップ作業を実行できます。

3)、最終的にブロックは必要ありません。

また、tryブロックとfinallyブロックの両方でreturn文を実行した場合、最終的な戻り値はfinallyの戻り値となります。

2. 例外チェーン

常常想要在捕获一个异常后抛出另外一个异常,并且希望把原始异常信息保存下来,这就是异常链。在JDK1.4以后,Throwable子类在构造器 中可以接受一个cause对象作为参数,表示原始异常,通过这样把原始异常传递给新的异常,使得即使在当前位置创建并抛出了新的异常,也能通过这个异常链 追踪到异常最初发生的位置。

但在Throwable子类中,只有Error, Exception, RuntimeException三类异常类提供了带cause参数的构造器,其它类型的异常则需要通过initCause()方法。例如定义了CustomException类,可以这样使用:

CustomException cmex = new CustomException();
cmex.initCause(new NullPointerException);
throw cmex;

这样一来,CustomException继承自Exception或RuntimeException,就属于自定义异常了。

一般来说,自定义异常的作用有以下情形:

1)、将检查型异常转换为非检查型异常。

2)、在产生异常时封装上下文信息、定义异常码、收集环境对象,有利于信息的传递。

异常使用指南

1、在知道该如何处理的情况下才捕获异常。

2、自定义异常类型,用以封装所有的检查型异常。

3、在程序的边界进行异常捕获。如服务端相应客户端的请求,在出口处catch内部有可能产生的异常,并统一throw一个封装过的异常给客户端,免得暴露服务端敏感信息。

4、只针对异常的情况才使用异常。不要在所有的代码中习惯性地使用try-catch,因为这会影响性能。

5、抛出与抽象相对的异常。如果方法抛出的异常与它执行的任务没有明显的联系,这种情形会使人不知所措。为了避免这个问题,更高层的实现应该捕获 低层的异常,同时抛出可以按照高层抽象进行解释的异常,这种做法被称为异常转译(exception translation),如下:

try{
    // use lower-level abstraction to do our bidding
} catch(LowerLevelException ex){
    throw new HigherLevelException(...);
}

另外一种特殊的异常转译称为异常链,上面已作描述。如果低层的异常对于调试导致高层异常的问题非常有帮助,使用异常链就很合适。高层的异常提供访问方法(Throwable.getCause)来获得低层的异常。

6、每个方法抛出的异常要有文档描述。利用Javadoc的@throws标记,记录抛出每个异常的条件。如果一个方法可能抛出多个异常,不要使 用这些异常类的某个超类。如不要声明一个方法“throws Exception”或“throws Throwable”,这将没有任何指导信息。

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

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Javaのプラットフォームの独立性を脅かしたり強化したりする新しいテクノロジーはありますか?Javaのプラットフォームの独立性を脅かしたり強化したりする新しいテクノロジーはありますか?Apr 24, 2025 am 12:11 AM

新しいテクノロジーは、両方の脅威をもたらし、Javaのプラットフォームの独立性を高めます。 1)Dockerなどのクラウドコンピューティングとコンテナ化テクノロジーは、Javaのプラットフォームの独立性を強化しますが、さまざまなクラウド環境に適応するために最適化する必要があります。 2)WebAssemblyは、Graalvmを介してJavaコードをコンパイルし、プラットフォームの独立性を拡張しますが、パフォーマンスのために他の言語と競合する必要があります。

JVMのさまざまな実装は何ですか、そしてそれらはすべて同じレベルのプラットフォームの独立性を提供しますか?JVMのさまざまな実装は何ですか、そしてそれらはすべて同じレベルのプラットフォームの独立性を提供しますか?Apr 24, 2025 am 12:10 AM

JVMの実装が異なると、プラットフォームの独立性が得られますが、パフォーマンスはわずかに異なります。 1。OracleHotspotとOpenJDKJVMは、プラットフォームの独立性で同様に機能しますが、OpenJDKは追加の構成が必要になる場合があります。 2。IBMJ9JVMは、特定のオペレーティングシステムで最適化を実行します。 3. Graalvmは複数の言語をサポートし、追加の構成が必要です。 4。AzulzingJVMには、特定のプラットフォーム調整が必要です。

プラットフォームの独立性は、開発コストと時間をどのように削減しますか?プラットフォームの独立性は、開発コストと時間をどのように削減しますか?Apr 24, 2025 am 12:08 AM

プラットフォームの独立性により、開発コストが削減され、複数のオペレーティングシステムで同じコードセットを実行することで開発時間を短縮します。具体的には、次のように表示されます。1。開発時間を短縮すると、1セットのコードのみが必要です。 2。メンテナンスコストを削減し、テストプロセスを統合します。 3.展開プロセスを簡素化するための迅速な反復とチームコラボレーション。

Javaのプラットフォームの独立性は、コードの再利用をどのように促進しますか?Javaのプラットフォームの独立性は、コードの再利用をどのように促進しますか?Apr 24, 2025 am 12:05 AM

java'splatformentedencefacilitatesecodereusebyAllowingbyTeCodeCodeCodeCodeTorunonAnyPlatformm.1)DevelopersConcodeCodeOnceOnceOnconconsentEntentEntEntEntEntEntentPlatforms.2)維持化されたアスカデドは、NoeedReadedoesではありません

Javaアプリケーションのプラットフォーム固有の問題をどのようにトラブルシューティングしますか?Javaアプリケーションのプラットフォーム固有の問題をどのようにトラブルシューティングしますか?Apr 24, 2025 am 12:04 AM

Javaアプリケーションのプラットフォーム固有の問題を解決するには、次の手順を実行できます。1。Javaのシステムクラスを使用して、システムプロパティを表示して実行中の環境を理解します。 2。ファイルクラスまたはjava.nio.fileパッケージを使用して、ファイルパスを処理します。 3。オペレーティングシステムの条件に応じてローカルライブラリをロードします。 4. VisualVMまたはJProfilerを使用して、クロスプラットフォームのパフォーマンスを最適化します。 5.テスト環境が、Dockerコンテナ化を通じて生産環境と一致していることを確認してください。 6. githubactionsを使用して、複数のプラットフォームで自動テストを実行します。これらの方法は、Javaアプリケーションでプラットフォーム固有の問題を効果的に解決するのに役立ちます。

JVMのクラスローダーサブシステムは、プラットフォームの独立性にどのように貢献していますか?JVMのクラスローダーサブシステムは、プラットフォームの独立性にどのように貢献していますか?Apr 23, 2025 am 12:14 AM

クラスローダーは、統一されたクラスファイル形式、動的読み込み、親代表団モデル、プラットフォーム非依存バイトコードを通じて、さまざまなプラットフォーム上のJavaプログラムの一貫性と互換性を保証し、プラットフォームの独立性を実現します。

Javaコンパイラはプラットフォーム固有のコードを作成しますか?説明する。Javaコンパイラはプラットフォーム固有のコードを作成しますか?説明する。Apr 23, 2025 am 12:09 AM

Javaコンパイラによって生成されたコードはプラットフォームに依存しませんが、最終的に実行されるコードはプラットフォーム固有です。 1。Javaソースコードは、プラットフォームに依存しないバイトコードにコンパイルされます。 2。JVMは、特定のプラットフォームのバイトコードをマシンコードに変換し、クロスプラットフォーム操作を保証しますが、パフォーマンスは異なる場合があります。

JVMは、さまざまなオペレーティングシステムでマルチスレッドをどのように処理しますか?JVMは、さまざまなオペレーティングシステムでマルチスレッドをどのように処理しますか?Apr 23, 2025 am 12:07 AM

マルチスレッドは、プログラムの応答性とリソースの利用を改善し、複雑な同時タスクを処理できるため、最新のプログラミングで重要です。 JVMは、スレッドマッピング、スケジューリングメカニズム、同期ロックメカニズムを介して、異なるオペレーティングシステム上のマルチスレッドの一貫性と効率を保証します。

See all articles

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SublimeText3 Mac版

SublimeText3 Mac版

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

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 中国語版

SublimeText3 中国語版

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