天天看點

異常

異常的概念

什麼是異常?

在程式運作時打斷正常程式流程的任何不正常情況稱為異常

導緻程式發生異常的原因

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);
 }
}      
異常