異常出現(xiàn)守呜,程序變得強(qiáng)大,異常是處理錯(cuò)誤的機(jī)制
1. 用try...catch處理異常
處理程序員控制和用戶輸入有誤的情況
舉例:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int a,b,c;
Scanner sc = new Scanner (System.in );
a=sc.nextInt();
b=sc.nextInt();
c=a%b;
System.out.printf("余數(shù)是"+c);
}
}
如果輸入aa會(huì)出現(xiàn)報(bào)錯(cuò)
aa
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at Main.main(Main.java:9)
或者被除數(shù)為0時(shí)會(huì)出現(xiàn)
10
0
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Main.main(Main.java:11)
此時(shí)可以用到try...catch
try{
有可能出現(xiàn)問題的語句
}
catch(Exception e){
出現(xiàn)問題的處理語句
}
增加語句
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
try {
int a,b,c;
Scanner sc = new Scanner (System.in );
a=sc.nextInt();
b=sc.nextInt();
c=a%b;
System.out.printf("余數(shù)是"+c);
}
catch(Exception e) {
System.out.printf("出現(xiàn)異常");
}
}
}
輸出結(jié)果
100
0
出現(xiàn)異常
werwf
出現(xiàn)異常
拓展:Exception e 異常的分類
2. 用throws處理異常
拋給上一級處理怠晴,如果不行再向上一級饺谬,最后交個(gè)虛擬機(jī)處理,虛擬機(jī)終止
一般處理無法避免和處理的異常
舉例:
Main類
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
LeiA aa= new LeiA();
try{
aa.a();
}
catch(Exception e){
System.out.printf("出現(xiàn)異常");
}
}
}
LeiA類
import java.util.Scanner;
public class LeiA {
void a (){
int a,b,c;
Scanner sc = new Scanner (System.in);
a=sc.nextInt();
b=sc.nextInt();
c=a%b;
System.out.printf("余數(shù)是"+c);
}
}
增加throws
Main類
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception {
LeiA aa= new LeiA();
// try{
aa.a();
// }
// catch(Exception e){
System.out.printf("出現(xiàn)異常");
// }
}
}
LeiA類
import java.util.Scanner;
public class LeiA {
void a ()throws Exception
{
int a,b,c;
Scanner sc = new Scanner (System.in);
a=sc.nextInt();
b=sc.nextInt();
c=a%b;
System.out.printf("余數(shù)是"+c);
}
}
結(jié)果
aa
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at LeiA.a(LeiA.java:8)
at Main.main(Main.java:9)
3. Finally
Finally起到異常處理出口的作用魂角,用在try...catch語句最后杠袱,無論catch是否執(zhí)行尚猿,F(xiàn)inally都被執(zhí)行
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception {
int a,b,c;
Scanner sc = new Scanner (System.in);
try{
a=sc.nextInt();
b=sc.nextInt();
c=a%b;
System.out.printf("余數(shù)是"+c);
}
catch(Exception e){
System.out.printf("出現(xiàn)異常");
}
finally {
System.out.printf("無論怎樣都出現(xiàn)");
}
}
}
運(yùn)行結(jié)果
aa
出現(xiàn)異常無論怎樣都出現(xiàn)