Java言語は、ガベージコレクション機構、メモリモデル、例外処理、強力な型変換、クロスプラットフォームなど、非常に堅牢であることがJava言語の人気を高めていると言われています。今日はまず、Java の例外処理メカニズムについて説明します。 try、catch、finally、throw、throws 通常、私たちはこれら 5 つのキーワードを過小評価しているようです。アプリケーション システムを開発する場合、適切な例外処理は、その後のシステムの開発、メンテナンス、アップグレード、およびユーザー エクスペリエンスにとって特に重要です。
例外には非常に重要な機能があります。例外が発生した場所から最上位のメインメソッドまでキャッチしないと、最終的に JVM が例外メッセージをスローします。最悪の事態は、スレッドが中断されることです。その後コードは実行されなくなり、JVM の広大な海に静かに消えていきます。当社の以前のプロジェクトでは、フロントエンド Ajax がコントロールに支払いを要求しました。コントロールのキャッチが null ポインターをスローしたため、フロントエンド ページがスタックしました。解決策: コントロール層は通常、最上位層です。例外が発生した場合、他の最上位以外の層はスローを続行するか、上向きにスローすることができます。また、各 ajax にタイムアウトを設定することをお勧めします。
throw と throws について簡単に紹介します。 throw: メソッド本体で例外をスローします。通常、Throws はメソッドを示すためにメソッド名の後に配置されます。例外が発生した場合、処理したくない、または処理できない場合は、呼び出し元に処理を任せることができます。ClassNotFoundException、NumberFromartException、throws、throw+try などのランタイム例外 (未チェック) をスローすることができます。 throw+throws は、次のようなチェック例外を処理します。 IOExcepion、SocketException、継承例外クラスなどの例外。違いは、チェックされた例外は処理する必要がある (try または throw のいずれかがスローされ続けるため、コンパイルは成功しません) のに対し、実行時例外は処理する必要がないという点です。例外を処理しないと、例外が発生した後に次のような結果が生じます。 jvm は例外メッセージを報告し、スレッドは中断されます。 throw および throws キーワードは通常、コード内で使用することはお勧めできません。また、すべての例外をその場で解決することをお勧めします。使い方だけ知っていれば、あまり説明する必要はありません。 組み合わせルールを試す: 1、try{}catch(){} 2、try{}catch(){}finally{} 3、try{}finally{}、1 と 2 には複数の catch を含めることができます友達、栗を食べます: 1、組み合わせを試しません public class CatchExecuteJustOne {
public void methodOne(){
System.out.println("into methodOne method");
int one=1/ CatchExecuteJustOneS();
cejo.methodOne();
System.out.println("end main method"); //出力なし、試行組み合わせなし、エラースレッドが切断されました
}
}
methodOneメソッドへ
スレッド「メイン」の例外 java.lang.ArithmeticException: / by zero
at priv.lilei.Exception.example_1.CatchExecuteJustOne. .java:19)
2.1、tryの組み合わせケース1があります
public void methodOne(){
System.out.println("into methodOne Method");try{
int one =1/0; }catch(Exception e){
System.out.println("methodOne try to");
}
System.out.println("end methodOne method");
}
public static void main(String[] args) {
CatchExecuteJustOne cejo = new CatchExecuteJustOne();
cejo.methodOne();
System.out.println("end main Method");
}
}
出力:
into MethodOne Method
methodOne を試してみます
メインメソッドを終了
2.2、組み合わせケース 2 を試してみます
public class CatchExecuteJustOne {
public void methodOne(){
int one=1/0;
System.out.println("end methodOne method"); //スレッドは実行されず、エラーが報告されて直接スローされます }
public static void main (String[] args ) {
try{
CatchExecuteJustOne cejo = new CatchExecuteJustOne();
cejo.methodOne();
}catch(Exception 例外){
System.out.println("into main method catch") / /will を実行します 上記のメソッドによって報告された例外を実行します
}
System.out.println("end main method") //上記のメソッドによって報告された例外を実行します
}
}
出力:
methodOne メソッドへ
main メソッド catch へ
main メソッド終了
2.3、try case の組み合わせ 3 例外は、最新の catch によって 1 回だけキャッチされます。 switch case の構文は if() if else(){} if()else if{}
public class CatchExecuteJustOne {
public void methodOne(){
System.out.println("into methodOneメソッド") ;
try{
int one=1/0;
}catch(ArithmeticException e){
System.out.println("catch 1");
}catch (Exception e) {
System.out.println ("catch 2");//前の catch 1 は実行されません
}
}
public static void main(String[] args) {
CatchExecuteJustOne cejo = new CatchExecuteJustOne();
try {
cejo.methodOne ();
} catch (Exception e) {
System.out.println("man catch");//既に実行されている catch 1 は実行されません
}
System.out.println("end main method") ;
}
}
出力:
intomethodOneメソッド
catch1
endmainメソッド
2.4 tryの組み合わせケース4、try{}finally{}の組み合わせがあり、最終的に返せなかった場合、スレッドは切断されますvalue ですが、finally に戻り値がある場合、スレッドは切断されませんが、後続のコードは実行されません。この組み合わせは慎重に使用することをお勧めします。
//戻り値なし
public class CatchExecuteJustOne {
public void methodOne(){ //戻り値なし
System.out.println("into methodOne Method");
try{
int one=1 /0;
}finally{
System.out.println("into methodOnefinally");
}
System.out.println("end methodOne method") // 次の場合はスレッドを実行せずに直接スローします。エラーが報告されます
}
public static void main(String[] args) {
CatchExecuteJustOne cejo = new CatchExecuteJustOne();
cejo.methodOne();
System.out.println("end main Method");/ /No 実行スレッドはエラーを報告し、切断され、戻り値なしで
}
}
出力を直接スローしました:
intomethodOne メソッド
Exception in thread "main" into methodOnefinally
java.lang.ArithmeticException: / by zero
priv .lilei.Exception.example_1.CatchExecuteJustOne.methodOne(CatchExecuteJustOne.java:14) の場合
priv.lilei.Exception.example_1.CatchExecuteJustOne.main(CatchExecuteJustOne.java:23) の場合
の戻り値:
public class CatchExecuteJustOne {
public String methodOne(){
System.out.println("into methodOne method");
try{
System.out.println("1");
int one=1/0;
System .out. println("2");//実行スレッドはエラーを報告せず、切断されて直接スローされます
}finally{
System.out.println("into methodOnefinally");//
return "1";
}
}
public static void main(String[] args) {
CatchExecuteJustOne cejo = new CatchExecuteJustOne();
cejo.methodOne();
System.out.println("end mainメソッド");// 実行されます 上記の try があり、メソッドには戻り値があるため
}
}
戻り値の出力があります。メソッド
2.5 では、finally との組み合わせは常に Execution となり、戻り値がある場合は、system.exit(0) などの特に激しい動作がない限り、戻る前に実行されます。 、またはメモリオーバーフローなどのエラーが発生しています。
return組み合わせ
2.5.1 以下の2つのケースでは、例外が発生していない場合と、例外が発生した場合とで、catchと最後に再度変数に値を代入する際に違いがあります。例外がない場合、割り当ては再び失敗しますが、例外がある場合、割り当ては再び成功します。
1 例外はありません
public class CatchExecuteJustOne {public String methodOne(){ String a=""; System.out.println("into methodOne method");
try{ a= "a";
return a;
}catch(ArithmeticException e){
System.out.println("catch 1");
}finally {
System.out.println(1);
a="a2 "; //エラーが報告されない場合、値は a;
System.out.println(2);
}
System.out.println(3); // 上記の return メソッドは実行されず、メソッドが返されました
return a;
}
public static void main(String[] args) {
CatchExecuteJustOne cejo = new CatchExecuteJustOne();
System.out.println(cejo.methodOne());
}
}
try return None 異常事態の出力:
intomethodOneメソッド
1
a
2 異常事態があります
public class CatchExecuteJustOne {
public String methodOne(){
String a="";
System.out.println("into methodOne method");
try{
a="a";
int i=1/0 ;
return a;
}catch(ArithmeticException e){
System.out.println("catch 1");
}finally {
System.out.println(1);
a="a2"; //はい例外は変数に再割り当てされます
System.out.println(2);
}
System.out.println(3); //例外は、上記の最初の return からではなく、から出力およびキャプチャされます。次の 1 つは return return
return a;
}
public static void main(String[] args) {
CatchExecuteJustOne cejo = new CatchExecuteJustOne();
System.out.println(cejo.methodOne());
}
}
try の戻りに異常な出力があります:
into methodOne method
catch 1
1
2
3
a2
以上がJava 基本値: 例外処理キーワード...の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。