Java プログラミングで例外をスローする方法を簡単に理解する

高洛峰
リリース: 2017-01-18 14:58:43
オリジナル
1641 人が閲覧しました

自分で書いたコード、Java 開発環境パッケージ、または Java ランタイム システムからのコードなど、すべての Java コードが例外をスローする可能性があります。誰でも Java の throw ステートメントを通じて例外をスローできます。メソッドからスローされる例外はすべて throws 節を使用する必要があります。

1. throws 例外をスローする

メソッドが例外をスローする可能性があるが、そのような例外を処理する機能がない場合は、メソッド宣言で throws 句を使用して、例外がスローされることを宣言できます。たとえば、車が走行中に故障した場合、車自身では対応できないため、ドライバーに対処してもらいます。

throws ステートメントは、メソッドがスローする例外の型を宣言するメソッドを定義するときに使用され、例外の型がスローされる場合、メソッドはすべての例外をスローするように宣言されます。複数の例外はカンマで区切ることができます。 throws ステートメントの構文形式は次のとおりです。

methodname throws Exception1,Exception2,..,ExceptionN
{
}
throws Exception1,Exception2,…,ExceptionN メソッド名の後の部分は、スローされる例外のリストです。メソッドが例外リストから例外をスローする場合、メソッドはこれらの型とそのサブクラスの例外を処理しませんが、処理のためにメソッドを呼び出すメソッドに例外をスローします。例:

import java.lang.Exception; 
public class TestException { 
  static void pop() throws NegativeArraySizeException { 
    // 定义方法并抛出NegativeArraySizeException异常 
    int[] arr = new int[-3]; // 创建数组 
  } 
   
  public static void main(String[] args) { // 主方法 
    try { // try语句处理异常信息 
      pop(); // 调用pop()方法 
    } catch (NegativeArraySizeException e) { 
      System.out.println("pop()方法抛出的异常");// 输出异常信息 
    } 
  } 
   
}
ログイン後にコピー

throws キーワードを使用して呼び出し元に例外をスローした後、呼び出し元が例外を処理したくない場合は、上方向に例外をスローし続けることができますが、最終的には例外を処理できる呼び出し元が存在する必要があります。例外。

pop メソッドは例外 NegativeArraySizeException を処理しませんが、main 関数によって処理されます。

例外をスローするための Throws ルール:

1) チェックされていない例外、つまり Error、RuntimeException、またはそのサブクラスの場合、スローする例外を宣言するために throws キーワードを使用することはできず、コンパイルでは引き続き例外がスローされます。は正常に通過しますが、実行時にシステムによってスローされます。

2) メソッドがスローできるチェック例外はすべて宣言する必要があります。つまり、メソッドにチェック可能な例外がある可能性がある場合は、try-catch ステートメントを使用してそれをキャッチするか、throws 句を使用してそれを宣言します。そうしないと、コンパイル エラーが発生します

3) 例外がスローされた場合のみ、メソッドの呼び出し 例外のみを処理または再スローする必要があります。メソッドの呼び出し元が例外を処理できない場合、例外を飲み込むのではなく、例外をスローし続ける必要があります。

4) 呼び出しメソッドは、チェック可能な例外の処理と宣言の規則に従う必要があります。メソッドをオーバーライドする場合、オーバーライドされたメソッドとは異なる例外を宣言することはできません。宣言された例外は、オーバーライドされたメソッドによって宣言された例外と同じクラスまたはサブクラスである必要があります。

例:

メソッド内で例外が発生するかどうかの判断基準は次のとおりです:

1) メソッド内に throw 文がある。たとえば、上記の method7() メソッドの catch コード ブロックには throw ステートメントがあります。

2) 他のメソッドが呼び出され、他のメソッドが throws 節で宣言され、何らかの例外がスローされます。たとえば、method3() メソッドはmethod1() メソッドを呼び出し、method1() メソッドは IOException をスローすることを宣言しているため、method3() メソッドで IOException が発生する可能性があります。

2. throw を使用して例外をスローします。

throw は常に関数本体に表示され、Throwable 型の例外をスローするために使用されます。プログラムは throw ステートメントの直後に終了し、その後のステートメントは実行できません。その後、それを含むすべての try ブロック (おそらくは上位レベル) 内で、一致する catch 節を含む try ブロックを内側から外側に検索します。関数の呼び出し)。

例外は例外クラスのインスタンス オブジェクトであることがわかっています。例外クラスのインスタンス オブジェクトを作成し、throw ステートメントを通じてスローできます。このステートメントの構文形式は

throw new exceptionname;
ログイン後にコピー

です。たとえば、IOException クラスの例外オブジェクトをスローする場合は、次のようになります。

throw new IOException;
ログイン後にコピー

throw は、スロー可能クラス Throwable またはそのサブクラスのインスタンス オブジェクトのみをスローできることに注意してください。次の操作は間違っています:

throw new String(“exception”)
ログイン後にコピー

これは、String が Throwable クラスのサブクラスではないためです。

チェック例外がスローされる場合、メソッドがスローする可能性のある例外のタイプもメソッド ヘッダーで宣言する必要があります。このメソッドの呼び出し元は、スローされた例外を処理するかどうかも確認する必要があります。

すべてのメソッドが取得した例外をレイヤーごとにスローした場合、最終的には JVM がそれを処理し、例外メッセージとスタック情報を出力するだけです。 Error または RuntimeException がスローされた場合、メソッドの呼び出し元は例外を処理することを選択できます。

package Test;
import java.lang.Exception;
public class TestException {
  static int quotient(int x, int y) throws MyException { // 定义方法抛出异常
    if (y < 0) { // 判断参数是否小于0
      throw new MyException("除数不能是负数"); // 异常信息
    }
    return x/y; // 返回值
  }
  public static void main(String args[]) { // 主方法
    int a =3;
    int b =0; 
    try { // try语句包含可能发生异常的语句
      int result = quotient(a, b); // 调用方法quotient()
    } catch (MyException e) { // 处理自定义异常
      System.out.println(e.getMessage()); // 输出异常信息
    } catch (ArithmeticException e) { // 处理ArithmeticException异常
      System.out.println("除数不能为0"); // 输出提示信息
    } catch (Exception e) { // 处理其他异常
      System.out.println("程序发生了其他的异常"); // 输出提示信息
    }
  }
   
}
class MyException extends Exception { // 创建自定义异常类
  String message; // 定义String类型变量
  public MyException(String ErrorMessagr) { // 父类方法
    message = ErrorMessagr;
  }
   
  public String getMessage() { // 覆盖getMessage()方法
    return message;
  }
}
ログイン後にコピー

Java プログラミングで例外をスローする方法を単に理解することに関するその他の記事については、PHP 中国語 Web サイトに注目してください。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート