異常的概念
什麼是異常?
在程式運作時打斷正常程式流程的任何不正常情況稱為異常
導緻程式發生異常的原因
1.數組的下标越界
2.除法運算的除數為0
3.空指針通路
4.試圖通路不存在的檔案
java異常處理機制
Java語言的異常處理機制為提高Java程式的健壯性提供了良好的支援
♈ 當産生異常時,Java能夠啟用相應的異常處理程式
♈Java中的異常是類,和普通的類沒有本質差別
異常情況舉例
1.編寫程式,從鍵盤上輸入三角形的三條邊長a,b,c,輸出其面積
2.計算面積的海倫公式為
代碼:
public class TestException
{
public static double calculateArea(double a, double b, double c)
{
double p = (a+b+c)/2;
return Math.sqrt(p*(p-a)*(p-b)*(p-c)); }
public static void main(String[ ] args)
{
double a = Double.parseDouble(args[0]);
double b = Double.parseDouble(args[1]);
double c = Double.parseDouble(args[2]);
double s = calculateArea(a, b, c);
System.out.println( "三角形面積是" + s);
}
}
運作指令:java TestException 3.0 4.0 5.0
輸出:三角形面積是6.0
異常情況1
運作指令:java TestException
在控制台将顯示數組通路越界的錯誤資訊:
Exception in thread “main”
java.lang.ArrayIndexOutOfBoundsException: 0
at TestException.main(TestException.java:10)
造成上述異常的原因是:沒有輸入足夠的參數,緻使字元串數組args的長度為0。當通路第1個參數args[0] 時,數組通路會越界。
異常情況2
運作指令:java TestException 3.0 4.b 5.0
在控制台将顯示數字格式異常的錯誤資訊:
Exception in thread "main"
java.lang.NumberFormatException: For input
string: "4.b"
……
at TestException.main(TestException.java:11)
造成上述異常的原因是:輸入的第2個字元串參數4.b不是一個數字文本,無法轉換成所需要的雙精度數字類型
異常情況處理1
public class TestException{
public static double calculateArea(double a, double b, double c){
double p = (a+b+c)/2;
return Math.sqrt(p*(p-a)*(p-b)*(p-c));
}
public static void main(String[] args){
if (args.length < 3)
{
System.out.println("輸入的參數個數應至少為3個,請
重新執行本程式");
}
double a = Double.parseDouble(args[0]);
double b = Double.parseDouble(args[1]);
double c = Double.parseDouble(args[2]);
double s = calculateArea(a, b, c);
System.out.println("三角形面積是"+s);
}
}
異常處理情況2
public class TestException{
public static double calculateArea(double a, double b, double c){
double p = (a+b+c)/2;
return Math.sqrt(p*(p-a)*(p-b)*(p-c));
}
public static void main(String[] args){
try{
double a = Double.parseDouble(args[0]);
double b = Double.parseDouble(args[1]);
double c = Double.parseDouble(args[2]);
double s = calculateArea(a, b, c);
System.out.println("三角形面積是"+s);
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("數組通路越界,請至少輸入3
個參數");
}
}
}
import java.util.*;
public class TestExceptionnew
{
public static double calculateArea(double a, double b, double c)
{
double p = (a+b+c)/2;
return Math.sqrt(p*(p-a)*(p-b)*(p-c));
}
public static void main(String[] args)
{
Scanner reader=new Scanner(System.in);
double a = reader.nextDouble();
double b = reader.nextDouble();
double c = reader.nextDouble();
double s = calculateArea(a, b, c);
System.out.println("三角形面積是"+s);
}
}