异常:导致程序中断运行的一种指令流。
在Java中一切异常都以类和对象的形式存在,除了Java中提供的各类异常类,用户还能根据自己需要自己定义异常类。
Java异常处理机制的优点:易于使用、可自行定义异常类、处理抛出的异常的同时不会降低程序运行速度。
异常处理格式:
try{
可能出现理异常的代码
}catch(异常类型){
//编写异常处理语句
}[catch(异常类型){
//编写异常处理语句
}…]
[finally{ //finally块可以省略
处理完异常最后做的处理(一定会运行的代码)
}]
Try:用来检测异常
Catch:用来捕获异常 //可以有多个
Finally:释放资源(IO中常用于释放资源)
如果在try中发生异常,会自动进入catch语句中寻找对应的错误类型进行相应的处理。最后不管程序是否发生异常finally中的语句一定会执行。
import java.util.Scanner;
public class ExceptionDemo01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in); //获取键盘输入数据
System.out.print("请输入分子:");
int num1=sc.nextInt();
System.out.print("请输入分母:");
int num2=sc.nextInt();
try {
System.out.println("计算结果:");
int temp=num1/num2;
}catch(ArithmeticException e){
e.printStackTrace();
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
System.out.println("错误处理结束");
}
}
}
//结果:
/*请输入分子:10
请输入分母:0
计算结果:
错误处理结束
java.lang.ArithmeticException: / by zero
at one.ExceptionDemo01.main(ExceptionDemo01.java:14)*/
当发生异常就会生成异常类实例化对象,在try语句中对此异常进行捕捉,产生的异常类对象与catch语句中的各个异常类型进行对比,如果匹配成功则执行catch语句中的代码——Java异常处理机制
异常的继承机制:
Exception:一般表示的是程序中出现的问题,需要程序员解决。可以直接用try…catch语句处理。
Error:一般指JVM异常,由JVM自己处理。
通过多态的向上转型知道,我们可以使用父类Exception接受子类的所有异常,在程序中需要将范围小的异常放在范围大的异常之前,开发中有时有多个异常单独捕捉比较好!
Throwable作为所有异常的父类自然能接受所有子类异常程序自然也不会报错,但不建议用Throwable接受所有异常,毕竟Exception已经够了。
Throws与Throw关键字
Throws:将异常抛给方法调用处,由调用处进行try…catch处理。如果一直抛异常就会出现“异常所在类——>main()”——>JVM“的情况。
Throw:在方法中手工抛出异常。
public class ThrowsDemo01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Math m=new Math();
try {
m.div(10, 0);
} catch (Exception e) {
// TODO: handle exception
System.out.println("异常产生:"+e);
}
}
}
class Math{
public int div(int a,int b) throws Exception {
int temp=0;
try {
temp=a/b;
} catch (Exception e) {
// TODO: handle exception
throw e;
}finally {
System.out.println("计算结束!");
}
return temp;
}
}
//结果:
/*计算结束!
异常产生:java.lang.ArithmeticException: / by zero*/
本代码为简单演示需要,在实际开发中以finally作为异常统一的出口应尽量避免出现throw和return这样的语句。
Exception和RuntimeException
Exception:在程序中必须使用try…catch进行处理。
RuntimeException:作为Exception子类存在异常可以不使用try…catch处理,直接交给JVM处理。
在实际开发中最好还是用try…catch处理异常。