异常的处理

异常:应用程序在运行的过程中发生的使程序意外终止的情况。

 Try-catch-finally处理异常

Try{

}catch(){

}finally{

//无论程序是否正常执行,最终都会被执行的代码   }

只有在finally之前遇到了System.exit(1)代码,那么finally代码不会被执行

注意:多重Catch中,如果匹配上最终只会执行一个catch匹配块,如果所有的catch都匹配不上,程序意外终止;

多重catch里面,从上往下,应该是从子类到父类,顺序不能变

样例:

在程序中实现两个数字求商的功能。当除数为0时,正确使用try-catch捕捉如图所示的程序异常。

public class ThrowsException {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			div();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			System.err.println("出现错误:被除数和除数必须是整数,除数不能为零!");
			e.printStackTrace();
		} 
	}
	public static void div() throws Exception{
		Scanner in = new Scanner(System.in);
        System.out.print("请输入被除数:");
        int num1 = in.nextInt();
        System.out.print("请输入除数:");
        int num2 = in.nextInt();
        int result=num1/num2;
        System.out.println("结果是:"+result);
	}
}
 输出: 请输入被除数:6
           请输入除数:0
出现错误:被除数和除数必须是整数,除数不能为零
java.lang.ArithmeticException: / by zero
at Demo01.ThrowsException.div(ThrowsException.java:30)
at Demo01.ThrowsException.main(ThrowsException.java:15)

样例二:在案例一的基础上,在try-catch块后加入finally块

public class MultipleException {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        try{
        	Scanner in = new Scanner(System.in);
            System.out.print("请输入被除数:");
            int num1 = in.nextInt();
            System.out.print("请输入除数:");
            int num2 = in.nextInt();
            int result=num1/num2;
            System.out.println("结果是:"+result);
        }catch(InputMismatchException e){
        	System.err.println("被除数和除数必须是整数!");
        }catch(ArithmeticException e){
        	System.err.println("除数不能为零!");
        }finally {
			System.out.println("感谢使用本程序!");
		}
	}
}
输出:请输入被除数:3
请输入除数:0

除数不能为零!感谢使用本程序!

样例三:

正确使用throw抛出异常,实现当输入的性别不是“男”和“女”时,显示如下图所示的程序异常效果。

public class People {
public char sex;
public char getSex() {
	return sex;
}
public void setSex(char sex) throws Exception {
	if(sex!='男'&&sex!='女'){
		throw new Exception("性别必须为男或者女");
	}
	this.sex = sex;
}
}
public class Text1 {
	public static void main(String[] args) {
		 People people=new People();
		 try {
			people.setSex('猪');
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
输出:java.lang.Exception: 性别必须为男或者女
at Demo01.People.setSex(People.java:12)

at Demo01.Text1.main(Text1.java:8)

自定义异常

自定义异常开发步骤:

1、创建一个类 extends Exception

2、提供带参构造方法,显示调用父类带参数构造方法

样例:用异常类完成上述题目

public class SexException extends Exception {
      
	public SexException(String sex){
		super(sex);
	}
}
public class Person {
    private String sex;
    public void Setsex(String sex)throws SexException{
    	if(sex!="男" && sex!="女"){
    		throw new SexException("性别必须为“男”或“女”!");
    	}else{
    		this.sex=sex;
    	}
    }
}
public class ThrowException {
	public static void main(String[] args) {
       Person per=new Person();
       try{
    	   per.Setsex("他");
       }catch(SexException e){
    	   e.printStackTrace();
       }
	}
}

输出:ThrowDemo.SexException: 性别必须为“男”或“女”!
at ThrowDemo.Person.Setsex(Person.java:10)
at ThrowDemo.ThrowException.main(ThrowException.java:15)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值