Javaは例外を認識します(王のログイン例外をシミュレートします)

1.例外:実行時にスローされるプログラムエラー

ランタイムとは、プログラムがクラスファイルを取得するようにコンパイルされており、JVMがそれを実行するときにエラーが発生することを意味します。

(javacソースファイル-> * .java-> * .classコンパイルプロセス)

1.ゼロ除算例外

2.ヌルポインタ例外

3.範囲外の配列添え字

2、

例外を回避する2つの方法:

LBYL:操作前に完全にチェック

EAFP:最初に実行し、エラーが発生したときに修正します

例外の基本構文:(王のログインゲームの実行プロセスをシミュレートします)

//模拟王者登录游戏的执行过程
        try {
            //存放所有可能出现异常的代码
            login();
            loadGame();
            chooseHero();
            biubiubiu();
        }
        //catch 捕获相应的异常 {}内是出现相应异常的处理方式
        catch (登陆异常){}
        catch (载入游戏异常){}
        catch (选取英雄异常){}
        catch (正常游戏时出现的异常){}
        
        finally{
            //不是强制书写
            //无论是否发生异常,都会执行finally代码块,一般执行资源的释放
            //关闭资源的处理
        }

1.try..catch..を使用して例外を処理します

エラーを報告する可能性のあるコードを試して、catchでキャッチします。例外が発生しても、通常のコードには影響しません。

 2.複数のキャッチブロック

複数の例外がある場合は、複数のキャッチを書き込みます。

 3.例外の親クラスExceptionを使用して、例外をキャッチします(プログラムに多くの例外があり、どのような種類の例外が明確でない場合)。

すべての例外オブジェクトを受け入れることができ、例外オブジェクトにアップキャストすることができます。

-推奨されません、トラブルシューティングできません

 4.例外に関するエラー出力

Javaでは、すべてがオブジェクト、nullポインター、範囲外の配列です。例外->は例外です。クラスが例外を生成すると、JVMは対応する(対応する例外クラス)例外を作成し、それをプログラムに渡します。 。

 5.最終的にコードブロックについて-例外が生成されたかどうかに関係なく実行されるコードブロック!

 例外の戻り値について

最終的に戻り値が得られると、tryとcatchに相当する戻り値は無効になります。

ただし、通常、return値をfinalに書き込むことはお勧めしません。

 6.例外についてチェーンを呼び出す

例外は、例外がキャッチされて処理されるまでコールチェーンを通過し続けます。呼び出しプロセスが例外を処理しない場合、例外は最終的にJVMにスローされ、プログラムは終了します。

7.JDK7の新しい自動シャットダウンインターフェイス 

クラスがAutoCloseableインターフェースを実装すると、クラスが自動的に閉じることができることを意味します–tryコードブロックでcloseメソッドが自動的に呼び出されることを宣言します。

8.-グループキーワード

throws:メソッド宣言で使用され、メソッドが例外を生成する可能性があることは明らかですが、この例外は処理されず、処理のために呼び出し元に戻されます。

スロー:メソッド内で使用され、例外オブジェクトを人為的に生成してスローします。

 

3.例外アーキテクチャ

エラー:プログラムの内部エラーを指します。この種のエラーは、プログラマーがキャッチして処理することはできません。エラーエラーが発生すると、プログラムはエラーが発生したことをユーザーに通知するだけで、プログラムは直接終了します。

StackOverflowError:スタックオーバーフローエラー-通常、再帰的な呼び出しチェーンが深すぎて、再帰に出口がない場合に発生します

OutOfMemoryError:ヒープオーバーフローエラー

 Javaの例外システムは2つのカテゴリに分けられます

1.チェックされていない異常:左の図の青いボックスとそのサブクラスは、チェックされていない異常に属しています。チェックされていないすべての例外は、プログラムにtrycatchブロックの使用を強制しません。エラーとRuntimeException(ランタイム例外、nullポインター、型変換、範囲外の配列)およびそれらのサブクラスはチェックされていない例外です

2.チェックされた例外:左の図の赤いボックスとそのサブクラスは、チェックされていない例外を除いてチェックされた例外であり、チェックされた例外であり、tryの使用を表示する必要があります。キャッチ。例外処理、またはスロー。ErrorおよびRuntimeExcpetionとそれらのサブクラス以外の例外はチェックされた例外であり、明示的に処理する必要があります。

3.カスタム例外クラス:プログラム開発中に、特定のビジネスに関連するエラーが発生する必要があります。JDKがそのようなエラーに対応する例外クラスを提供することはできません。定義された例外クラスは、ユーザーが例外処理を強制する必要がある場合、継承します。 Exception親クラス-チェックされた例外ユーザーが処理例外を表示する必要がない場合は、RuntimeException親クラスを継承します-チェックされていない例外

4.[ログイン例外処理に関するコードを記述します]

package object_oriented.exception;

import java.util.Scanner;

public class Login {
    public static String USER="浩民";
    public static String PASSWORD="123456";

    public static void main(String[] args) {
        try {
            login();
            System.out.println("登陆成功!!");
        }catch (UserNameException e){
            e.printStackTrace();
        }catch (PasswordException e){
            e.printStackTrace();
        }
    }

    //throws 用在方法声明上,明确表示该方法可能会产生异常,但是不处理该异常,抛给调用者处理
    private static void login() throws UserNameException{
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入用户名:");
        String user=scanner.next();
        System.out.println("请输入用户名密码:");
        String password=scanner.next();
        if(!USER.equals(user)){
            //throw 用在方法内部,人为产生异常对象并抛出
            throw new UserNameException("用户名错误!");
        }
        if(!PASSWORD.equals(password)){
            throw new PasswordException("用户名密码错误!");
        }
    }
}

//用户名异常
class UserNameException extends Exception{
    public UserNameException(String msg){
        super(msg);
    }
}

//用户名密码异常
class PasswordException extends RuntimeException{
    public PasswordException(String msg){
        super(msg);
    }
}

おすすめ

転載: blog.csdn.net/m0_62218217/article/details/122644732