异常:应用程序在运行的过程中发生的使程序意外终止的情况。
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)