Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaの静的ブロックから例外をスローする方法とは?

静的ブロック(static block)とは、JVMがmain()メソッドを実行する前に実行される一連のステートメントのことです。クラスのロード時に何らかの処理を実行したい場合は、その処理を静的ブロック内に定義する必要があります。なぜなら、このブロックはクラスがロードされるタイミングで実行されるからです。

静的ブロックから例外をスローするには

  • 静的ブロックがスローできるのはRuntimeException(非チェック例外)のみです。チェック例外を扱う場合は、try-catchブロックで捕捉して処理する必要があります。
  • 静的ブロックは、クラスローダーによってクラスがロードされる際に実行されます。初期化のコードは、静的ブロックとして直接記述するか、staticデータメンバーを初期化するためのstaticメソッドの呼び出しという形で記述します。
  • どちらのケースでも、コンパイラはチェック例外を許可しません。非チェック例外が発生した場合は、それがExceptionInInitializerErrorでラップされ、クラスロードをトリガーしたスレッドのコンテキストでスローされます。
  • また、静的ブロックからチェック例外を直接スローすることもできません。静的ブロック内にtry-catchブロックを記述することは可能で、tryブロックからチェック例外がスローされる可能性はありますが、catchブロック内で必ず解決しなければなりません。throwキーワードを使って例外をさらに外へ伝播させることはできません。

サンプルコード

public class StaticBlockException {
    static int i, j;
    static {
        System.out.println("In the static block");
        try {
            i = 0;
            j = 10/i;
        } catch(Exception e){
            System.out.println("Exception while initializing" + e.getMessage());
            throw new RuntimeException(e.getMessage());
        }
    }
    public static void main(String args[]) {
        StaticBlockException sbe = new StaticBlockException();
        System.out.println("In the main() method");
        System.out.println("Value of i is : "+i);
        System.out.println("Value of j is : "+ j);
   }
}

実行結果

In the static block
Exception while initializing/ by zero
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.RuntimeException: / by zero
        at StaticBlockException.(StaticBlockException.java:10)

この例では、静的ブロック内でゼロ除算が発生しています。catchブロックで例外を捕捉した後、新たにRuntimeExceptionをスローしているため、最終的にExceptionInInitializerErrorとして出力されます。このように、静的ブロック内で発生した非チェック例外は、クラス初期化エラーとしてラップされて通知される点に注意しましょう。

  1. JavaでCSVファイルを読み込む方法|BufferedReaderによる基本的なデータ読み取り手順

    CSVとは「Comma Separated Values(カンマ区切り値)」の略で、テキスト形式のデータファイルの一種です。CSVファイルでは、1行ごとに複数の項目がカンマ(,)で区切られて記録されており、拡張子は「.csv」として保存されます。表形式のデータを扱う際に広く利用されている、シンプルで汎用性の高いフォーマットです。 JavaでCSVファイルを読み込む仕組み JavaでCSVファイルを読み込むには、BufferedReaderクラスのreadLine()メソッドを使用するのが基本的な方法です。このメソッドを使うと、ファイルの内容を1行ずつ順番に読み取ることができます。 読み取った各

  2. Windows 10で特定のWebサイトを開けなくする(ブロックする)方法

    Webサイトとは、共通のドメイン名で識別され、少なくとも1つのWebサーバー上に公開される、Webページやマルチメディアコンテンツなどの関連ネットワークリソースの集合です。オフィス用にPCを設定したり、家庭内で子どもの閲覧を制限したりするなど、特定のWebサイトへのアクセスをブロックしたい場面は意外と多くあります。この記事では、Windows 10でWebサイトをブロックするための複数の方法を、手順付きでわかりやすく解説します。Windows 10でWebサイトを開けなくするには?Windows 10でサイトをブロックする方法はいくつもあります。ほとんどのサイトはブラウザ経由でアクセスされるた