Javaは和スローを投げます

文は例外をスローします

異常がない治療法を発生した場合、その後、外部への処理の方法の例外を渡すために、プロセスの頭部の例外を宣言します。この方法を使用すると、ステートメントは、このメソッドは例外を処理しないことを示しているがスローされます。次の形式をスローします。

returnType method_name(paramList) throws Exception 1,Exception2,…{…}

ここで、戻り値のは、戻り値の型を表し、METHOD_NAME名表現; paramList示すパラメータリストを、例外1、Exception2は、...例外クラスを表します。

複数の例外クラスがある場合は、カンマで区切って指定します。これらの例外クラスは、体が生成し、スローのための方法であってもよい、例外がスローされますメソッドが生成されると呼ばれることがあります。

mainメソッドは、例外のこのタイプを処理する方法を知らない場合には、缶を、使用しているスローをスローした例外のアイデアは、現在の方法は、発信者の上位レベルで扱われるべき例外のこのタイプを処理する方法を知らないということです使用は、文の例外がスローされるJVMプロセスに例外をスローします。JVMの処理方法は、例外のスタックトレースを出力し、異常があると、プログラムの実行が中止されました。

IOExceptionが生成することができる読み出しの過程で、ファイルの内容を読み取るために使用されるreadFileの()メソッドを作成し、この方法では、任意の処理をせずに、呼び出し元に例外処理が発生する可能性が。main()メソッドを使用して、キャッチの例外をキャッチを試みる、異常情報を出力します。コードは以下の通りであります:

import java.io.FileInputStream;
import java.io.IOException;

public class Test {
    public void readFile() throws IOException {
        // 定义方法时声明异常
        FileInputStream file = new FileInputStream("read.txt"); // 创建 FileInputStream 实例对象
        int f;
        while ((f = file.read()) != -1) {
            System.out.println((char) f);
            f = file.read();
        }
        file.close();
    }

    public static void main(String[] args) {
        Throws t = new Test();
        try {
            t.readFile(); // 调用 readFHe()方法
        } catch (IOException e) {
            // 捕获异常
            System.out.println(e);
        }
    }
}

最初readFileの()メソッドの定義に使用される上記のコードは、プロセスで発生し、その後readFileの()メソッドmain()メソッドを呼び出し、生成されたキャッチの例外をキャッチステートメントを使用することができる例外キーワードステートメントをスロー。

メソッド宣言は、例外の限界オーバーライドスロー場合
限界がある場合にスローされた例外をスローするステートメントを使用して、それがルールの書き換え方法であって、例外のタイプサブクラスのメソッドの宣言は、親クラスのメソッド宣言によってスローされた例外の種類をスローしなければなりませんまたは同じサブクラスは、サブクラスのメソッド宣言は、スローされた例外は、親クラスのメソッドよりもマルチは、異常な宣言する許可スロー次の手順を参照してください。

public class OverrideThrows {
    public void test() throws IOException {
        FileInputStream fis = new FileInputStream("a.txt");
    }
}

class Sub extends OverrideThrows {
    // 子类方法声明抛出了比父类方法更大的异常
    // 所以下面方法出错
    public void test() throws Exception {
    }
}

上記手順サブサブクラス試験()メソッド宣言は、親例外クラス宣言は、プログラムがコンパイルされません原因となる例外のIOExceptionの親クラスを、スローで例外をスローします。

ノートにクラス継承のためのコードを書くときに書き換えられた句をスローし、サブクラスのメソッド宣言がスロー句を持つ親クラスのメソッドは、父親にはできませんサブクラスは、対応するメソッドの節が異常な種類がありません表示されるスローし、したがって句は、サブクラスの行動を制限することができスローします。換言すれば、サブクラスのメソッドは例外が親クラス定義の範囲を超えることができないスロー。

スロー例外がスローされます

:違いは、スローされた例外クラスのオブジェクトに続いて例外をスローする構文は次のとおりです。スロー、スロー文が直接に使用されていることです

throw ExceptionObject;

ここで、ExceptionObjectはThrowableのオブジェクトクラスまたはサブクラスでなければなりませんカスタム例外クラスのThrowableはまた、直接または間接のサブクラスである必要があります。たとえば、次の文は、コンパイル時に構文エラーが生成されます。

throw new String("拋出异常");    // String类不是Throwable类的子类

throw文が実行されると、それがマッチしたキャッチフレーズを見つけるために、呼び出し側のプログラムに次の文は、プログラム分岐を実行しません、対応する例外ハンドラを実行します。一致するcatch節が見つかった場合、プログラムは、サブ層を呼び出します。したがって、層ごとまで、最も外側の例外ハンドラは、プログラムを終了し、コールスタックケースを印刷まで。

スローキーワードは、ユーザーが異常回避され、一般的には、その使用はメカニズムを例外処理に完全に準拠して、単独で使用されていませんが、それは手で例外クラスの新しいインスタンスを投げ、そして多くの場合、スローされることはありません生成されたプログラムの異常の例。

管理者のユーザー名で必要な倉庫管理システムでは、以上の8つの文字または数字を必要とし、他の文字を含めることはできません。場合、8ビットの長さ以下でスローされた例外、およびディスプレイ異常情報;非文字や数字を含む文字は、同じ例外がスローされたときに、表示異常情報。コードは以下の通りであります:

import java.util.Scanner;

public class Test {
    public boolean validateUserName(String username) {
        boolean con = false;
        if (username.length() > 8) {
            // 判断用户名长度是否大于8位
            for (int i = 0; i < username.length(); i++) {
                char ch = username.charAt(i); // 获取每一位字符
                if ((ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {
                    con = true;
                } else {
                    con = false;
                    throw new IllegalArgumentException("用户名只能由字母和数字组成!");
                }
            }
        } else {
            throw new IllegalArgumentException("用户名长度必须大于 8 位!");
        }
        return con;
    }

    public static void main(String[] args) {
        Test te = new Test();
        Scanner input = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String username = input.next();
        try {
            boolean con = te.validateUserName(username);
            if (con) {
                System.out.println("用户名输入正确!");
            }
        } catch (IllegalArgumentException e) {
            System.out.println(e);
        }
    }
}

上記のコードのように、validateUserName()メソッドは、2つのはIllegalArgumentException例外をスローすなわちときにユーザー名または数字未満、8ビットの長さを有する非アルファ。main()メソッドでは、validateUserName()メソッドを呼び出し、このメソッドは例外をスローすることがキャプチャするキャッチフレーズを使用しています。

ユーザ入力のユーザ名が数字以外の文字又は文字を含む場合、以下に示すようなプログラムを実行して、プログラムが、異常を出力します。

请输入用户名:
admqanistrator@#
java.lang.IllegalArgumentException: 用户名只能由字母和数字组成!

ユーザは、ユーザ名の長さを入力すると以下のように、8ビット未満、プログラム意志出力同じ異常です。

请输入用户名:
admin
java.lang.IllegalArgumentException: 用户名长度必须大于 8 位!
スローし、次のように使用されるキーワードの投球キーワードはいくつかの違い:

図1は、方法は、すべての例外情報を投げるかもしれない宣言するスロー、異常の可能性が述べ、必ずしも必要ではないが、これらの異常の発生;、それがスローされた例外の特定のタイプを指すスロー実行を投げます確かに例外オブジェクトのいくつかの種類がスローされます。

2.メソッド宣言(S)で、典型的には例外がスロー例外情報の特定方法(複数可)を介して宣言、宣言内部のプロセス(クラス)で例外情報をスローすることができます。

3は、自動的に優れた方法をスローされるすべての異常をキャプチャするシステムで、通常は明示的に例外をキャッチされていないスロー、それは、関連する例外をキャプチャするために、ユーザが必要と投げ、その後、その関連のパッケージ、そして最終的に例外情報パッケージを投げますアウト。

公開された457元の記事 ウォン称賛94 ビュー10000 +

おすすめ

転載: blog.csdn.net/weixin_45743799/article/details/104737081