黒馬プログラマーjava_異常

6423 ワード

--------androidトレーニングJAvaトレーニング、交流を楽しみにしています!--------
 
異常
 
 
 
異常の由来
 
JAvaの基本理念は、構造の悪いコードが実行できないことです.
エラー情報を発見する最適な時期は実際にコンパイル段階であり、コードの実行前に修正することができます.実際には、実行フェーズまで多くのエラーが表示されません.例:
                                void getNum(int a,intb){
                                 int  c = a/b;}
コンパイルフェーズでは問題ありませんが、実行時に2と-1が入力されると、このセグメントコードにエラーが発生します.このようなエラーを処理するメカニズムが必要ですこれもjava異常メカニズムが発生した原因です.基本的な考え方は,コードが誤った情報を生成すると,関連情報をある受信者に伝達し,この受信者は処理すればよいことを知っている.
Javaではエラーを処理する全体的な方法を定義し,tryによってコード内のエラー情報を発見し,catchによってエラーをキャプチャし,throwによってエラーを外部に放出する.このような異常処理メカニズムにより、すべての問題の処理に類似の方式を採用し、問題の処理を大幅に簡素化し、javaコードの頑丈性を高め、実行中にエラーが発生しても、どのように処理するかを知っており、エラー情報を処理するプロセスが定義されていることを前提としている.
 
 
 
異常な概念
 
例外:プログラムが実行中に異常が発生した場合です.
エンジニアリングの問題も現実生活の具体的なものであり,javaのクラスの形式で記述することもできる.オブジェクトにカプセル化され、javaが異常な状況を記述したオブジェクトの体現である.
 
 
 
いじょうシステム
 
Throwable
         |--Error
         |--Exception
               |--RuntimeException
 
異常体系の特徴:
例外システム内のすべてのクラスおよび作成されたオブジェクトは、放出性を備えています.
すなわち、throwキーワードとthrowsキーワードで操作することができる.
 
異常システムだけがこの特徴を備えている.
 
 
throwとthrowsの使い方
 
throwは、例外オブジェクトを放出するために関数内に定義されます.
throwsは関数上で定義され、異常クラスを放出するために使用され、複数をカンマで区切ることができます.
 
 
関数の内容がthrowで異常オブジェクトが投げ出された場合、try処理は行われません.関数に宣言する必要があります.コンパイルに失敗しました.
 
ただし、RuntimeExceptionは除外されます.つまり,関数内に放出されたRuntimeExcpetionが異常であれば,関数上で宣言しなくてもよい.
 
 
 
例外の区分
 
コンパイル時に異常が検出されました
この異常はコンパイル時に処理がなければ(投げもtryもない)、コンパイルに失敗する.
この異常は、処理可能であることを示す識別される.
 
実行時異常(コンパイル時に検出しない)
コンパイル時に処理する必要はなく、コンパイラはチェックしません.
 
この異常の発生は、処理せずにプログラムを停止させることをお勧めします.コードの修正が必要です.
 
 
 
例外の処理文
         
try
{
	        ;
}
catch ()
{
	       ;
}
finally
{
	        ;
}

       :
1.	try
	{
		
	}
	catch ()
	{
	}

2.	try
	{
		
	}
	finally
	{
	
	}


3.	try
	{
		
	}
	catch ()
	{
	}
	finally
	{
	
	}

注意:
1,finallyで定義されるのは、通常、リソースコードを閉じることです.リソースを解放しなければならないからです.
2,finallyは1つの場合のみ実行されません.システムに実行すると.exit(0);fianllyは実行しません.
 
 
 
キャプチャされた例外オブジェクトの一般的なメソッド操作
 
getMessage()
例外情報を取得し、文字列を返します.
toString()
例外クラス名と例外情報を取得し、文字列を返します.
printStackTrace()
例外クラス名と例外情報、およびプログラムに例外が表示される場所を取得します.値voidを返します.
printStackTrace(PrintStream s)
通常、この方法で例外内容をログファイルに保存して、参照します.
class Demo
{
	int div(int a,int b)throws Exception//      throws                  。
	{
		return a/b;
	}
}
class  ExceptionDemo
{
	public static void main(String[] args) 
	{
		Demo d = new Demo();
		try
		{
			int x = d.div(4,1);
			System.out.println("x="+x);
		}
		catch (Exception e)//Exception e = new ArithmeticException();
		{
			System.out.println("   ");
			System.out.println(e.getMessage());//  / by zero;
			System.out.println(e.toString());//      :     。

			e.printStackTrace();//    ,    ,       。
							//  jvm         ,     printStackTrace  。
							//            。

		}		
		
		System.out.println("over");
	}
}

 
 
 
 
カスタム例外
 
プロジェクトに特有の問題が発生するため、これらの問題はjavaで記述され、オブジェクトがカプセル化されていません.だからこれらの特有の問題に対してjavaの問題に対してカプセル化する思想に従うことができます.特有の問題を解決します.カスタムの例外パッケージを作成します.
 
需要:本プログラム(上のコードを参照)では、除数に対して-1であり、エラーとみなされる場合は演算できません.
を使用してインポートしたストロークVSラム速度のデータ点を示します.
関数内部にthrowが現れて異常オブジェクトを投げ出すと、対応する処理動作、または内部に
try catch処理.または、呼び出し元に処理するように関数に宣言します.
 
親クラスでは例外情報の操作が完了しているからです.したがって、サブクラスは構築時に例外情報を親に渡す限り
super文を通過します.カスタム例外は、親例外のメソッドを呼び出すデータに関連する操作もできます.
class FuShuException extends Exception 
{
	private int value;

	FuShuException()
	{
		super(); //  Exception         ,         。
	}
	FuShuException(String msg,int value)//              
	{
		super(msg);
		this.value = value;
	}

	public int getValue()
	{
		return value;
	}

}

 
 
 
 
RuntimeException異常
 
1.Exceptoinに特殊なサブクラス異常RuntimeException実行時異常があります.
2.関数の内容に異常が投げ出された場合、関数は宣言せずにコンパイルすることができます.
3.関数に例外が宣言されている場合.呼び出し者は処理を行わなくてもよい.コンパイルは同じように通過します.
4.関数で宣言しないのは、呼び出し元に処理させる必要がないからです.この異常が発生した場合、プログラムを停止します.なぜなら
実行時に、演算を続行できない場合があり、プログラムを停止した後、コードを修正してほしい.
5.カスタム例外の場合:その例外が発生した場合、演算を続行できない場合はカスタム例外を継承する
     RuntimeException.
 
 
 
異常なメリット
 
1、問題をカプセル化する.
2、正常なプロセスコードと問題処理コードを分離し、読みやすい.
 
 
異常の処理原則
 
1,処理方式はtryまたはthrowsの2種類がある.
2,異常を投げ出す機能を呼び出すと,数を投げ出すと,数を処理する.
1つのtryは複数のcatchに対応する.
3,複数のcatch,親のcatchを一番下に置く.
4,catch内では,的確な処理方式を定義する必要がある.printStackTraceを簡単に定義せず、文を出力します.
書かないでください.
キャプチャされた異常が本機能で処理できない場合はcatchで投げ出すことができます.
try
{
throw new AException();
}
catch (AException e)
{
throw e;
}
 
この異常が処理できない場合は、その機能に現れる異常ではありません.
異常を変換した後、この機能に関連する異常を放出することができます.
 
あるいは異常は処理することができ、異常が発生した本機能に関連する問題を提供する必要がある場合、
呼び出し者が知っているとき.処理します.キャプチャ例外処理後、新しい例外を変換することもできます.
try
{
throw new AException();
}
catch (AException e)
{
//AException処理.
throw new BException();
}
 
 
 
 
異常な注意事項
 
子の親が上書きされた場合:
 
1.子から放出される例外は、親の例外の子またはサブセットである必要があります.
2,親クラスまたはインタフェースに異常放出がない場合,子クラスオーバーライドに異常が発生しtryのみ放出できない.
 
 
--------androidトレーニングJAvaトレーニング、交流を楽しみにしています!--------