記事のディレクトリ
I.概要異常
イベントは、プログラムの実行中に発生したときに異常を示唆している、ジャワ、コンパイラが多い出会いを学んだ後、異常な、それはストリームを実行されている通常のプログラム命令を中断します。
次のコード例:
public class Exceptiontest {
public static void main(String[] args) {
int num=3/0;
System.out.println(num);
}
}
結果は、演算の異常動作を示唆する:
プログラムは、例外が発生し、システムは、前方端の、ダウン実行しない、これは例外で実行されています。
Javaは、従って、Java言語で発生するクラスの異常なインスタンスの形式で、オブジェクト指向プログラミング言語です。エラーがこの方法で発生した場合、このメソッドは、オブジェクトを作成し、実行中のシステムに渡します、このオブジェクトは、例外オブジェクトです。例外処理の他の方法でコードを書きながら機構を例外処理は、不規則な状況でメイン論理プログラムコード、すなわちメインフローで、分離することができます。
次のように一般的な例外はあります。
II。一般的な例外
Exceptionクラス | 説明 |
---|---|
ClassCastExceptionが発生 | 異常な型変換 |
ClassNotFoundException | 私は、適切なカテゴリの異常を見つけられませんでした |
ArithmeticException | 算術例外 |
ArrayIndexOutOfBoundsExceptionが | クロスボーダーの異常な配列の添字 |
ArrayStoreExceptionが | 配列は含まれてい互換性のない例外をスローします |
SQLException | データベースクラスの異常動作 |
NullPointerExceptionが発生します | nullポインタ例外 |
ないNoSuchFieldException | フィールドを見つけるのは異常ではありません |
ないNoSuchMethodException | この方法が見つかりました。例外をスローしません。 |
NumberFormatExceptionが | 文字列変換は、例外をスロー |
ないNegativeArraySizeException | 配列の要素数が負の例外がスローされます |
StringIndexOutOfBoundsExceptionを | 範囲の例外の文字列のインデックスアウトを投げ |
IOExceptionが | 異常入力と出力 |
IllegalAccessExceptionが | 異常の特定の種類へのアクセスを許可しません |
ないInstantiationException | アプリケーション試行に使用する場合、クラスのクラスのnewInstance()メソッドは、クラスのインスタンスを作成しますが、指定されたクラスオブジェクトがスローされ、インスタンス化することができません。 |
EOFException | ファイルの末尾異常 |
FileNotFoundException | ファイルには、異常を発見していません |
III。例外をキャッチ
Java言語例外トラッピング構造は、3つの部分から構成され、最後に、tryブロックは、Java言語例外に格納され、最終的に、前記キャッチは、発生する可能性があり、捕捉例外を励起するために使用するtryブロックの後にcatchブロックを試しますブロックは、部品構造を扱う最後のステートメントを実行例外では、関係なく、try文のブロックの終了コードがブロック最終的に実行されるかの、例外ハンドラは、おおよそfinallyブロック文とのtry-catchのブロックに分割されます。
文の1のtry-catchブロック
コードは少しの変化です。
public class Exceptiontest {
public static void main(String[] args) {
int num=3/0;
System.out.println(num);
System.out.println("继续运行");
}
}
ショーを実行すると、異常終了後に実行するように思われます。
例外処理ブロックのTyr-catch文を添加した後:
public class Exceptiontest {
public static void main(String[] args) {
try {
int num=3/0;
System.out.println(num);
}catch(Exception e) {
e.printStackTrace();
}
System.out.println("继续运行");
}
}
結果は、実行していないため、異常終了のプログラムはまだ出力の最後のメッセージを、見ることができます。
Exception是try代码块传递给catch代码块的变量类型,e是变量名,catch代码块中的语句“e.printStackTrace()方法用于指出异常的类型,性质,栈层次已经出现在程序中的位置。”另外两个方法如下:
getMessage() : 输出错误性质
toString() : 给出异常的类型与性质。
2.finallyステートメントブロック
例外ハンドラの完全な文は関係なく、プログラム例外が発生の有無、finally文を含んでおり、注文が完了したかどうかの間のステートメントのtry-catchブロックされている必要があり、最終的にはステートメントが実行されます。
次の4つの特殊なケースでは、finallyブロックは実行されません。
在finally语句中发生了异常
在前面的代码中使用了System.exit()退出程序
程序所在的线程死亡
关闭CPU
IV。カスタム例外
組み込みの例外クラスに加えて、ユーザはまた、例外をカスタマイズすることができ、継承Exceptionクラスにのみ必要とすることができます。
以下のように実行します
。1.カスタム例外クラスを作成します。
方法2.例外オブジェクトのスローキーワードをスローします。
3.現在の処理方法は、例外の例外をスローした場合、あなたがキャッチし、文の処理、またはキーワードは、呼び出し元のメソッドの宣言で指定された方法にスローされる例外をスローすることによって、次のステップに進みtry-catchブロックを使用することができます操作。
4.キャッチハンドル呼び出し側の異常で例外。
例えば:
//创建自定义异常类
class MyException extends Exception{
public MyException(String ErrorMessage) {
super(ErrorMessage);
}
}
//在方法中通过throw关键字抛出异常对象
public class Exceptiontest {
static int avg(int number1,int number2) throws MyException{
if (number1 < 0 || number2 < 0) {
throw new MyException("不可以使用负数");
}
if (number1 > 100 || number2 > 100) {
throw new MyException("数值太大了");
}
return (number1 + number2);
}
public static void main(String[] args) {
try {
int num =avg(155,155);
System.out.print(num);
}catch(MyException e) {
System.out.println(e);
}
}
}
結果:
V.は、この方法でスロー
1.キーワードは、例外がスローされるスロー
キーワード通常スローされる方法を指定するメソッド宣言に適用スローした場合、異常複数のコンマで分離することができます。
以下のような:
int avg(int number1,int number2) throws MyException{
// 。。。。。。
}
使用throws关键字将异常抛给上一级后,如果不想处理该异常,可以继续向上抛出,但最终要有能够处理该异常的代码。
2.キーワードスロー例外をスロー
キーワードスローは、一般的にメソッド本体で使用され、例外オブジェクトをスローします。すぐにthrow文の実行を終了するプログラムが、文は彼の後ろに実行されません。例外をスローすることによってスローた後、あなたがキャプチャし、ハンドルの例外に前のコードにしたい場合は、この方法を使用する必要があるキーワードの方法の声明の中でスローされた例外に名前のスローで例外をスローあなたがキャッチスローにしたい場合は、例外をスローし、あなたは、try-catchブロックを使用する必要があります。
以下のような:
if (number1 < 0 || number2 < 0) {
throw new MyException("不可以使用负数");
}
間違っている場合は、正しい私の批判、歓迎の批判をしてください。
それぞれのテキスト文:人生は苦労し、自分のために戦うために、整理するために他の誰かのために待つことができない、にかかわらず、結果の悲劇ですが、慰めはあなたが常にこの世界でやりがいのあるに住んでいることです。 - ル・ヤオ、「普通の世界」