一、 Introduction
异常指不期而至的各种状况,如类找不到、类型不配、算术不合法等。异常是一个时间,发生在程序运行期间,干扰了正常的流程。Java异常都是对象,是Throwable子类的实例。Throwable的两个子类:Exception和Error。Error是程序无法处理的错误,表示运行应用程序中较严重的问题。例如java虚拟机运行错误,内存溢出等。Exception是程序本身可以处理的异常。在java应用程序中,异常处理机制为抛出异常和捕捉异常。
二、 捕捉异常
捕捉异常通过try-catch语句或者try-catch-finally语句实现。
例子:
public class ExceptionTest {
public staticvoidmain(String[] args){
Scanner in=new Scanner(System.in);
System.out.println("请输入被除数:");
try{
int in1=in.nextInt();
System.out.println("请输入除数:");
int in2=in.nextInt();
System.out.println(String.format("%d/%d=%d",in1,in2,in1/in2));
}catch(InputMismatchException e){
System.out.println("输入的值必须是整数");
System.exit(1);
//强行终止程序可以使用System.exit(1);
}catch(ArithmeticException e){
System.out.println("输入的除数不能为0");
}catch(Exception e){
System.out.println("错误");
}finally{
in.close();
System.out.println("谢谢");
}
}
}
三、 抛出异常
自定义异常,进行抛出处理。一般步骤:
创建一个异常类,表示异常信息;异常类需要继承Exception类或者RuntimeException类;需要有参的构造函数;使用super关键字调用父类的有参构造函数。
规定正常人年龄范围在1-150之间的异常处理例子:
自定义异常类
public class AgeWrongException extends Exception {
public AgeWrongException(String msg){
super(msg);
}
}
创建关于人类的年龄的类
public class Person {
private intage;
public voidsetAge(intage)throwsAgeWrongException{
if(age<150&&age>0){
this.age=age;
}else{
throw new AgeWrongException("年龄需要在0-150之间");
}
}
public intgetAge(){
return age;
}
public Person(intage)throwsAgeWrongException{
setAge(age);
}
}
测试
public class ThrowTest {
public staticvoidmain(String[] args)throwsAgeWrongException{
Person p=new Person(18);
System.out.println(p.getAge());
try{
Person p2=new Person(-9);
System.out.println(p.getAge());
}catch(AgeWrongException e){
System.out.println(e.getMessage());
}
}
}
关于同时抛出多个异常类的例子:
创建多个自定义异常类,略
创建处理人的年龄的类
public class Person {
private intage;
public voidsetAge(intage)throwsAgeWrongException,AgeWrongException2,AgeWrongException3{
if(age<150&&age>0){
this.age=age;
}else{
throw new AgeWrongException("年龄需要在0-150之间");
}
}
public intgetAge(){
return age;
}
public Person(intage)throwsAgeWrongException, AgeWrongException2, AgeWrongException3{
setAge(age);
}
}
测试
public class ThrowTest {
public staticvoidmain(String[] args)throwsAgeWrongException, AgeWrongException2, AgeWrongException3{
Person p=new Person(18);
System.out.println(p.getAge());
try{
Person p2=new Person(-9);
System.out.println(p.getAge());
}catch(AgeWrongException e){
System.out.println(e.getMessage());
}
}
}