-
異常
は大きく2つのカテゴリに分類できます。ランタイム例外とユーザー定義の例外。
1つは、以下の配列テーブルへの範囲外アクセス、0による除算操作など、コンパイラが検出できない例外です。
一般的に表示されるもの:もう
ArithmeticException、NullPointerException、ClassCastException、 NegativeArraySizeException、ArrayIndexOutOfBoundsException、StringIndexOutOfException
1つは、のニーズを満たすカスタム「エラー」です。ユーザー。
たとえば、Studentクラスは、学生の年齢範囲を[15,20]に制限します。メンバーメソッドsetAgeを呼び出して年齢を設定すると、要件を満たしていない場合(入力エラーが検出された場合)、カスタム例外は次のようになります。投げられた。 -
try-catchステートメントを使用した例外処理
try {
int rst = 1/0;
System.out.println(rst);
} catch (ArithmeticException e) {
System.out.println("int类型下除法的分母不能为0!");
}
ルールと提案:1。catchステートメントは1つのタイプの例外のみをキャッチでき
ます。tryコードブロックに複数の例外が表示される場合は、複数のcatchステートメントが必要です。2 。例外によるプログラムの予期しない終了を回避するには、最後のキャッチステートメントパラメータUseExceptione。例外例外クラスは、すべての例外クラスの親クラスです。
- カスタム例外クラス
定義:Exceptionクラスの例外サブクラスを作成し、構築メソッドを追加します。
たとえば、不正な名前の例外クラスを定義します。
class IllegalNameException extends Exception
{
public IllegalNameException() {
super("姓名出错!");
}
public IllegalNameException(String s) {
super(s);
// 这里的s 是用户检测到错误后,抛出异常时候给出的信息
// 即 throw new IllegalNameException(s);
}
}
この例外クラスとメソッドの組み合わせ:
void setName(String s) throws IllegalNameException
{
if (s.length()<1 || s.length()>5) {
throw new IllegalNameException();
}
this.name = s;
}
注:異常なステートメント中にメソッド宣言を行う場合
例外の役割:
try {
student.setName("Adam"); // student是一个Student类的实例
} catch (IllegalNameException e) {
System.out.println(e.getMessage()); // 通过getMessage方法的调用,得到自定义的错误信息
}
考え方:
1。例外の導入により、プログラムの堅牢性と「フォールトトレランス」が向上します。プログラマーにとって、彼らは複雑な状況を処理することに自信を持っています。
2. C ++の例外キャプチャメカニズムを組み合わせ、Javaの例外キャプチャメカニズムを比較すると、頭に浮かぶ難しさ:try-catchのネストの問題など。
例:構築メソッドと領域を検索するメソッドを含む三角形クラスを定義します。領域を検索するメソッドは、三角形を形成できないデータに対してカスタムの無効な三角形の例外をスローします。
class IllegalTriangleFormException extends Exception
{
public IllegalTriangleFormException() {
super("三边不能构成三角形");
}
public IllegalTriangleFormException(String s) {
super(s);
}
}
class Triangle
{
double a,b,c;
public Triangle(double d1,double d2,double d3) {
a=d1;
b=d2;
c=d3;
}
public double caluArea() throws IllegalTriangleFormException
{
if(a+b>c && a+c>b && c+b>a)
{
double p = (a+b+c)/2; // 半周长
double S = Math.sqrt(p*(p-a)*(p-b)*(p-c)); // 海伦公式
return S;
}else
{
throw new IllegalTriangleFormException();
}
}
}
public class ExpDemo04 {
public static void main(String[] args) {
Triangle triangle = new Triangle(3, 2, 5);
try {
System.out.println(triangle.caluArea());
} catch (IllegalTriangleFormException e) {
System.out.println(e.getMessage());
}
}
}