tryはネットワークのようなものです。これは、try {}でコードによってスローされたすべての例外をネットし、処理のためにcatch {}のコードの例外を渡します。最後にコードを実行します。 Tryにコードに例外があるかどうか、およびCatchが例外をキャッチするかどうかに関係なく、最終的にコードが実行されます。
Java実行期間システムが提供するプリセットプロセッサはデバッグに役立ちますが、通常、自分で例外を処理したいと考えています。これを行うことには2つの利点があります。まず、エラーを修正できます。第二に、プログラムが自動的に終了するのを防ぐことができます。エラーが発生するたびに、プログラムが停止してスタックトラックを印刷すると、ほとんどのユーザーは混乱します。幸いなことに、この状況を簡単に回避できます。
実行期間エラーに注意して対処するには、トライブロックに監視するコードを配置してください。トライブロックの直後に、キャッチ句でキャッチする例外タイプエラーキャプチャの例を指定します。
{Code;
例えば:
Import Java.io。文字を入力してください」トライブロックの直後に、キャッチ句でキャプチャする例外パターンを指定しますch =(char)system.in.read(); //キーボードから入力された文字をch} catch(ioexception e)//を割り当てます//上記のコードにエラーがある場合、ここで{}をキャッチします; //エラーシステムの後に操作なし。画面文字:// ch}}の値
java try..catchを書くとき、たとえば、いくつかのIOリソースを閉じるために最終的に条項を追加する必要があります。
inputStream is {is = openInputStream(); }}
しかし、このパターンを使用すると、Javaの退役軍人でさえ、いくつかの間違いを犯すことがあります。たとえば、実行中にOpenInputStream()関数が例外をスローする場合、nullpoiterexceptionはnullpoiterexceptionの子ではありません。したがって、キャッチブロックに巻き込まれることはできませんが、通話層に直接スローされます。個人的には、よりエレガントな執筆方法は、commons-ioパッケージによって提供されたioutils.closequelite()メソッドを直接呼び出すことであると思います(または、自分で近接()メソッドをカプセル化します)。
この執筆方法を使用することには別の利点があります。つまり、次のコードなど、複数のIOリソースを閉じるときに間違いを犯すのは簡単ではないということです。
inputstream is; outputStream os; try {is = openInputStream(); if(os!= null)os.close();
is.close()でエラーが発生すると、OS.Close()は実行できず、OSが参照されるリソースがリリースされません。
おそらくOracleはまた、この種のTry ... CATCH ...最後にボイラープレートコードがあまりにも不要であると考えているので、JDK 7のTry句をいくつか変更し、リソースを手動で閉じるコードの執筆を排除し、コードを作成しますよりコンパクトでシンプルに見えます。たとえば、上記のコードは以下に変更できます。
try(inputstream is = openInputStream(); outputStream os = openoutStream();){// do Something} catch(ioException e){e.printstacetrace(e);}
Oracleは、ここでTry(..)ステートメントをリソース付きの試みの声明と呼びます。 try(..)の変数によって参照されるオブジェクトは、java.io.autoclosableインターフェイスを実装するインスタンスでなければなりません。 つまり、リソース付きの試行ステートメントのリソースは、IOリソースに限定されません。
ここでは、リソース付きの試みの詳細について、いくつかの追加の説明を提供する必要があります。
JDKは、すべてのリソースの閉じる()メソッドが、close()メソッドが例外をスローするかどうかに関係なく呼び出され、コールの順序がリソース宣言の順序から逆転することを保証します。
リソース付きの試みの声明のすべての例外がキャッチされます。複数の例外がスローされている場合、以前の例外では、キャッチブロックが最初の例外を取得します。抑制された例外は、スロー可能なクラスで定義されたgetSuppress()を順番に呼び出すことで取得できます。
上記の例、
try ..キャッチを終了すると、JDKは最初にos.close()を呼び出します。 os.close()によってスローされた例外では、キャッチブロックはos.close()によってスローされた例外をキャッチします。 getSuppressed()メソッドを介してis.close()によってスローされる例外を取得できます。
OpenInputStream()が呼び出されたときにIOExceptionが発生すると、OpenOutputStream()が呼び出されず、OS.Close()、is.Close()は呼び出されず、CATCHブロックはOpenInputStream()例外を呼び出すときにスローをキャッチします。
IOExceptionが発生した場合、is.close()がIS.close()をスローする場合(トークンE2で示されます)、E2は抑制されますキャッチブロックによってキャッチされた例外はE1です。
Tryブロックの改造に加えて、JDK 7はキャッチパーツも簡素化し、複数のキャッチ条項をマージできるようにします。 例えば:
try(inputstream is = openInputStream(); outputStream os = openoutstream();
さらに、複数の例外をリツイートする場合、コンパイラはどの例外をスローしているかを既に把握する必要がなくなります。メソッドが定義されているときにスローする必要がある例外を宣言する必要があります。例えば
//ここでは、スローされたioExceptionに一致するために例外が使用されますが、コンパイラは実際に上層にスローされた例外がioexception {try {throw {throw new exception(); ){show e;
PS:この機能がもたらすメリットは考えられません
JDK 7には、バイナリリテラル、アンダースコアによる長い数値のセグメンテーション、汎用パラメーターのタイプ推論、スイッチの一致など、他の興味深い新しい構文機能があります。 現在、JDK 8はいくつかの有用な機能を導入しています。後方互換性を考慮せずに、いくつかの構文機能を適切かつ柔軟に適用することで、コードがある程度明確かつ簡潔に見えるようになります。