由于这个异常处理比较难,我特意抽出来发一章
try--catch:
抓取到try里面的错误以后,自动跳过try里报错语句后面的句子,去匹配catch的类型去执行
( 1)如果没有异常,执行try后则执行try/catch后面的语句
(2)可以有0个或多个catch语句,有0个或1个finally语句,但如果有try必须有catch或finally
(3)一段代码可能会引发多种类型的异常,当引发异常时,会按顺序来查看每个catchi语司,执行第—一个与异常类型见配的catch语白,其后的catch语句将被忽略,转去执行trylcatch后面的语句。
(4)大部分异常都是Exception类的子类,在catch中子类异常必须写在父类异常前面
(5)无论是否有异常都要执行finally,即使有break, returni语句
(6)如果有异常,没有catch匹配的异常类型,则继续产生异常,中断程序执行。
2,自定义异常:
①自定义Exception中的异常
public class IamStudent{//吃创建类定义异常
private Integer id;//学生学号长度为10
public void setId(Integer pId) throws IllegalArgumentException{//throws异常声明,告诉系统这里会抛出异常
//是否长度为10
if(pId.toString().length()==10)
{
id=pId;
}else{
throw new IllegalArgumentException("长度不为10!");//抛出异常
}
}
}
import java.util.Scanner;
public class TestIamStudent{
public void main(String args[]){
IamStudent student=new IamStudent();
try{
String s=new Scanner(System.in).nextline;
student.setId(Integer.parseInt(s));//判断长度,可能发生异常
System.out.println("程序正常进行")
}catch(IllegalArgumentException e){
Shystem,out,println(e,getMessage());
}
}
}
②自定义用户所需异常
public class Bank{
private money;
public void income(int in,int out)throws BankException{
if(in<=0|[out>=O]|in+out<0) {
throw new BankException(in,out);
}
int sumlncome=in+out;
system.out.printf("本次计算出的纯收入是:%d元In",sumIncome);money=money+sumlncome;
}
public int getMoney() {
return money;
}
}
class BankException extend Exception{
String Message;
BankException(int m,int n){
Message="入账资金"+m+"是负数或支出"+n+"是正数,不符合要求";
}
public String warnMess(){
return message;
}
}
class TestBank{
public static void mian(String args[]){
Bank bank=new Bank();
try{ bank.income(200,-100);
bank.income(400,-100);
System.out.printf("银行目前有%d元In",bank.getMoney());
bank.income(200,100);//发生异常
bank.income(9999,-100);//发生异常时不会执行到
}catch(BankException e){//异常变量
System.out.printIn("计算收益的过程出现如下问题:");
System.out.println(e.WarnMess());
}
System.out.printf("银行目前有%d元In",bank.getMoney());}
}
}