JAva異常の詳細と応用例

3254 ワード

JAva異常
例外の使用例(例外分類:Error(JVM呼び出しシステムの最下位で発生し、コードのみ変更可能)とException(JVMで発生し、対象となる処理が可能)
 1.1つのメソッド内に異常が発生する可能性がある場合、異常をthrow方式でnewによって対応する異常クラスを出力し、throwsが放出する可能性がある異常クラスを呼び出し者に放出することをメソッドで宣言し、呼び出し者は異常捕獲を行うことができ、または異常を放出し続けることができ、プロセス全体が異常を処理しなかった場合、上層呼び出し者が処理を継続することができる.では、JVM仮想マシンがデフォルトの処理を行います.
2.呼び出し者は、異常に対してtry()catch(){}の異常処理を行ってもよいし、メソッドの後にthrowsの異常を継続してもよいし、catchコードブロックで処理しなければthrowの異常を行ってもよい
 3.運転時異常RuntimeExceptionは明示的な異常宣言を行わなくてもよい
 4.親のメソッドから例外が投げ出された場合、子がメソッドを書き換えても例外が投げ出された場合、その例外は親の例外クラスより大きくなければなりません.親のメソッドに例外が投げ出されていないのに、子の上書きメソッドが例外を投げ出す場合、try catchで例外をキャプチャするしかありません.ただし、この例外は、throws宣言を行わずにcatchコードブロックからthrow new RuntimeExcetion()に投げ出すこともできます.
 5.多くの場合、異常は呼び出し者が処理する必要はなく、呼び出し者が処理能力を持っているとは限らない.
 6.異常は上層呼び出し者が認識できる異常タイプに包装すべきで、異なる呼び出し者に向かって、異なる異常情報を報告し、否者呼び出し者はこの異常をどのように処理するか分からない.
開発においてこの点は非常に重要である.
  7.finallyコードブロックでは、リソースの解放および閉じる操作が頻繁に行われます.リソースに依存性があるため、開いているリソースに対して逆方向の閉じる操作を行う必要があります.
  8.宣言異常を行わない場合は,呼び出し者に処理を行わせず,呼び出し者のプログラムを停止させることを目的とし,エラーコードを修正しなければならない.

public class ExceptionDemo {

 public static void main(String[] args) {
 //OutOfMemoryError      ,
 int[] i = new int[1024*1024*1024];
 System.out.println(i[1]);
 
 //ArrayIndexOutOfBoundsException      
 int[] s = new int[2];
 System.out.println(s[2]);
 
 
 Calc calc = new Calc(); 
 //           
 try {
  calc.run(4, 0);
  calc.run(4, -1);
 } catch (NegativeException e) {//             
  e.printStackTrace();
  System.out.println(e.getMessage());
  //throw e;//          
 } catch (ArithmeticException e){//           
  e.printStackTrace();
  System.out.println(e.getMessage());
  //throw e;
 } finally {
  System.out.println("finally      ");
 }
 //           ,          ,          
 System.out.println("     !");
 
 try {
  calc.run(4, -1);
  
 } catch (NegativeException e) {
  e.printStackTrace();
  System.out.println(e.getMessage());
  return;
 } finally {
  System.out.println("      ");
 }
 System.out.println("     ");//        
 
 }

}

/**
 *      
 */
class NegativeException extends ArithmeticException{
 public NegativeException() {
 }
 public NegativeException(String msg) {
 super(msg);
 }
}

interface AA{
 public abstract void method();
}

class Calc implements AA{
 //ArithmeticException        (RuntimeException),     throws  ,       
 public int run(int m,int n)throws ArithmeticException,NegativeException{
 if(n==0){
  throw new ArithmeticException("     0");
 }else if(n<0){
  throw new NegativeException("       ");
 }
 int s = m/n;
 return s ;
 }

 @Override
 public void method() {
 try {
  int p = 4/0;
 } catch (ArithmeticException e) {
  e.printStackTrace();
  throw new RuntimeException();//             
 }
 }
}



読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!