先生から、将来の研究における異常のほとんどはヌルポインターの例外であると聞きました。だから、ゲームをプレイするために時間をかけて、ヌルポインターの例外が何であるかを確認する
1:ヌルポインターの例外が発生する主な理由は次のとおりです。
(1)オブジェクトが存在しない場合、例外が生成されますobj.method()// objオブジェクトは存在しません
(2)オブジェクトに存在しないフィールドにアクセスまたは変更する場合、例外が生成されますobj.method()//メソッドは存在しません
(3)文字列変数は初期化されていません。
(4)インターフェイスタイプオブジェクトは、次のような特定のクラスで初期化されません。
リストlt;エラーが報告されます
LT = new ArrayList();エラーはありません
オブジェクトの値が空の場合、空であると判断しません。次のコードの前にコード行を追加してみてください。
if(rb!= null && rb!= "")
変更:
if(rb == null); if(rb!== null && rb!= "")またはif(( "")。equals(rb))
nullポインターの解決策:
エラーが発生する行に焦点を当て、ヌルポインターの例外によって引き起こされる2つの主な理由を介して特定のエラーを診断します。同時に、ヌルポインターの発生を回避するために、判断処理を行うときに設定値の前に「ヌル」またはヌル値を配置することが最善です。
一般的なヌルポインターの例外の簡単な分析:
(1)nullポインターエラーjava.lang.nullpointerexception
Javaには8つの基本データ型があります。変数の値はデフォルト値を持つことができます。通常の割り当てなしで追加された場合、Java仮想マシンを正しくコンパイルすることはできません。したがって、基本的なJavaデータ型を使用すると、一般にヌルポインターの例外が発生しません。実際の開発では、ほとんどのヌルポインターの例外は、主にオブジェクト操作に関連しています。
2。Java例外処理メカニズム
例外がある可能性のあるコードに対処するには、次の2つの方法があります。
まず、メソッドで試してみてください...例外をキャッチして処理するために、この方法でステートメントをキャッチします。 Cacheステートメントには、複数の例外に一致する複数のステートメントを持つことができます。例えば:
public void p(int x){try {...} catch(例外e){...}最後に{...}}第二に、処理できない場合や、変換する必要がある例外については、メソッドの宣言でそれを渡します。
スローステートメントは例外をスローします。例えば:
public void test1()throws myexception {... if(....){throw new myexception();}}各メソッドが単に例外をスローする場合、メソッドコールメソッドへのマルチレイヤーネストコールで、Java仮想マシンは、例外が発生するまで例外が発生するメソッドコードブロックから、例外を処理するまで検索します。次に、処理のための対応するキャッチステートメントの例外を渡します。 Java仮想マシンがメソッドコールスタックの下部にあるメイン()メソッドに戻ると、例外を処理するコードブロックがまだ見つからない場合、次の手順が処理されます。
まず、例外オブジェクトのprintStackTrace()メソッドを呼び出し、メソッドコールスタックの例外情報を印刷します。
第二に、例外が発生するスレッドがメインスレッドである場合、プログラム全体が終了します。メインスレッドでない場合、スレッドは終了し、他のスレッドは実行され続けます。
分析と思考を通じて、異常な処理が早ければ早いほど、リソースと時間が少ないほど、衝撃の範囲が小さくなることがわかります。したがって、発信者にも処理できる例外をスローしないでください。
別のポイントを無視することはできません。最後に、ステートメントは、いずれにしてもコードを実行する必要があります。たとえば、データベースクエリが異常な場合、JDBC接続をリリースする必要があります。最終的なステートメントは、その注文または場所に関係なく、またはTRYブロックに例外があるかどうかに関係なく、returemステートメントの前に実行されます。最終的にステートメントが実行されない唯一の状況は、メソッドがSystem.Exit()メソッドを実行することです。 System.Exit()機能している現在実行中のJava仮想マシンを終了します。最終的なステートメントブロックの変数に新しい値を割り当てることにより、返品の返品値を変更することはできません。また、最終的なブロックでreturnステートメントを使用しないこともお勧めします。それは意味がなく、簡単にエラーにつながる可能性があります。
最後に、例外処理のために構文ルールにも注意を払う必要があります。
まず、ステートメントを単独で存在することはできませんが、キャッチで構成することができます。
試してみてください...最後に、試してみてください...キャッチ、試してみてください...最後に、試してください...最後に、キャッチステートメントは1つ以上を持つことができ、最後にステートメントはせいぜい1つになります。 3つのキーワードは試し、キャッチし、最後に単独で使用することはできません。
第二に、 3つのコードブロックの変数の範囲は独立しており、互いにアクセスできません。 3つのブロックすべてにアクセスできるようにしたい場合は、これらのブロックの外側の変数を定義する必要があります。
第三に、複数のキャッチブロックを使用すると、Java仮想マシンは例外クラスまたはそのサブクラスの1つと一致し、他のキャッチブロックを実行せずにキャッチブロックを実行します。
第四に、これらには実行される機会がないため、スローステートメントの後に続く他のステートメントはありません。
5番目、 1つのメソッドがスローされた例外を宣言する別のメソッドを呼び出す場合、このメソッドは例外を処理するか、スローを宣言します。
2.2スローとスローの間の差別化キーワード:
スローは、メソッド本体内で例外を投げるために使用されます。構文形式は次のとおりです。例外オブジェクトをスローします。
スローは、メソッドによってどの例外がスローされるかを宣言するために使用されます。メソッド名の後、構文形式は次のとおりです。
例外タイプ1、例外タイプ2 ...例外タイプn。
3:次のように、ヌルポインターの例外が発生する可能性のあるいくつかの状況と対応するソリューションをリストします。
コードスニペット1:
out.println(request.getParameter( "username"));
分析:コードセグメント1の機能は非常に単純です。これは、ユーザー入力「ユーザー名」の値を出力することです。
注:上記のステートメントは構文エラーを見つけることができないようで、ほとんどの場合、問題はありません。ただし、ユーザーがデータを入力するときにフォームフィールドの値を「ユーザー名」の値を提供しない場合、またはこのリクエストの値を介してフォームを直接入力する場合、getParameter( "username")は空です(空の文字列ではないことに注意してください。 「Java.lang.nullpointerexception」例外。さらに、オブジェクトが空であっても、toString()、等しい(オブジェクトobj)、その他の操作など、java.lang.objectまたはオブジェクトオブジェクト自体のいくつかの方法が呼び出されます。
コードスニペット2:
string username = request.getParameter( "username"); if(username.equals( "root")){...}分析:コードセグメント2の関数は、ユーザーが提供するユーザー名を検出することです。ユーザー名が「ルート」であるユーザーの場合、一部の特別操作が実行されます。
注:コードセグメント2では、ユーザーがフォームフィールド「ユーザー名」の値を提供しない場合、文字列オブジェクトのユーザー名はnull値であり、1つのnullオブジェクトを別のオブジェクトと直接比較することはできません。同様に、コードセグメント2が配置されているJSPページには、空のポインターエラーが発生します。
小さなトリック:特定の方法の返品値を定数と比較し、その前に定数を置く場合は、nullオブジェクトの等しい方法を呼び出すことを避けることができます。例えば:
if( "root" .equals(username)){...}ユーザー名オブジェクトがnullオブジェクトを返している場合でも、ここにはnullポインターの例外はなく、通常どおり実行できます。
スニペット3:
string username = session.getattribute( "session.username")。toString();
分析:コードセグメント3の関数は、セッションのsession.usernameの値を取り出し、stringオブジェクトのユーザー名に値を割り当てることです。
注:一般的に、ユーザーがすでにセッションを行っている場合、問題は発生しません。ただし、現時点でアプリケーションサーバーが再起動し、ユーザーが再びログインしていない場合(ユーザーがブラウザを閉じて元のページを開きます。)、セッションの値は無効になり、セッションの使用値が空になります。 nullを使用したオブジェクトでのtoString()操作の直接実行により、システムはnullポインターの例外をスローします。
スニペット4:
public static void main(string args []){person p = null; P.SetName( "Zhang San"); System.out.println(p.getName()); }分析:個人のオブジェクトを宣言し、オブジェクトの名前を印刷します。
注:現時点では、Pはこの人タイプのオブジェクトがオブジェクトを作成しなかったと宣言したため、Heapにアドレス参照はありません。オブジェクトを使用してメソッドを使用するときは、必ずしもオブジェクトを作成しないでください。
A:オブジェクトが空であるかどうかに関係なく、直接使用を開始します。
(JSP)コードセグメント1:
out.println(request.getParameter( "username"));
分析:コードセグメント1の機能は非常に単純です。これは、ユーザー入力「ユーザー名」の値を出力することです。
注:上記のステートメントは構文エラーを見つけることができないようで、ほとんどの場合、問題はありません。ただし、ユーザーがデータを入力するときにフォームフィールドの値を「ユーザー名」の値を提供しない場合、またはこのリクエストの値を介してフォームを直接入力する場合、getParameter( "username")は空です(空の文字列ではないことに注意してください。 「Java.lang.nullpointerexception」例外。さらに、オブジェクトが空であっても、toString()、等しい(オブジェクトobj)、その他の操作など、java.lang.objectまたはオブジェクトオブジェクト自体のいくつかの方法が呼び出されます。
(JSP)スニペット2:
string username = request.getParameter( "username"); if(username.equals( "root")){...}分析:コードセグメント2の関数は、ユーザーが提供するユーザー名を検出することです。ユーザー名が「ルート」であるユーザーの場合、一部の特別操作が実行されます。
注:コードセグメント2では、ユーザーがフォームフィールド「ユーザー名」の値を提供しない場合、文字列オブジェクトのユーザー名はnull値であり、1つのnullオブジェクトを別のオブジェクトと直接比較することはできません。同様に、コードセグメント2が配置されているJSPページは、(java.lang.nullpointerexception)nullポインターエラーをスローします。
(JSP)スニペット3:
string username = session.getattribute( "session.username")。toString();
分析:コードセグメント3の関数は、セッションのsession.usernameの値を取り出し、stringオブジェクトのユーザー名に値を割り当てることです。
注:一般的に、ユーザーがすでにセッションを行っている場合、問題は発生しません。ただし、現時点でアプリケーションサーバーが再起動し、ユーザーが再びログインしていない場合(ユーザーがブラウザを閉じて元のページを開きます。)、セッションの値は無効になり、セッションの使用値が空になります。 nullであるオブジェクトでのtoString()操作の直接実行により、システムは(java.lang.nullpointerexception)null pointer例外をスローします。
上記は、編集者によってもたらされたnullポインター例外のJava例外処理に関する簡単な議論の完全な内容です。誰もがwulin.comをもっとサポートすることを願っています〜