Java异常
什么是异常
错误在我们编写过程经常发生,包括编译期异常和运行期异常。
在程序运行期间,意外发生的情况,背离我们程序本身的意图表现,都可以理解为异常。
如何处理异常
Error常见的错误有:虚拟机错误,内存溢出,线程死锁
这些错误在程序的控制和处理能力之外,而且绝大多数程序运行时不允许出现的状况。
所以对于这些错误不会做处理
在java应用程序中,异常处理机制为:
抛出异常 捕获异常
Try-catch-finally
案例:
public class TryDemo1 {
public static void main(String[] args) {
//接受定义两个整数,求商
Scanner scanner=new Scanner(System.in);
System.out.print("输出第一个整数:");
int i=scanner.nextInt();
System.out.print("输出第二个整数:");
int j=scanner.nextInt();
System.out.println("商为:"+(i/j));
scanner.close();
System.out.print("程序结束");
}
}
以上的程序在没有进行异常处理时,极易出现除0错误与格式转换错误,导致程序异常终止,资源未关闭等。那么接下来我们用异常工具处理这些异常,提高代码的健壮性。
public class TryDemo1 {
public static void main(String[] args) {
//接受定义两个整数,求商
Scanner scanner=new Scanner(System.in);
try {
System.out.print("输出第一个整数:");
int i=scanner.nextInt();
System.out.print("输出第二个整数:");
int j=scanner.nextInt();
System.out.println("商为:"+(i/j));
} catch (Exception e) {
System.out.println("程序出错了");
e.printStackTrace();
}finally{
scanner.close();
System.out.print("程序结束");
}
}
}
当出错时,
输出第一个整数:0
输出第二个整数:0
java.lang.ArithmeticException: / by zero
at test.TryDemo1.main(TryDemo1.java:24)
程序出错了
程序结束
程序依然可以执行到结束和关闭资源等操作。
多重catch处理
public class TryDemo1 {
public static void main(String[] args) {
//接受定义两个整数,求商
Scanner scanner=new Scanner(System.in);
try {
System.out.print("输出第一个整数:");
int i=scanner.nextInt();
System.out.print("输出第二个整数:");
int j=scanner.nextInt();
System.out.println("商为:"+(i/j));
} catch (ArithmeticException e) {
System.out.println("除数不能为0");
e.printStackTrace();
} catch (Exception e) {
System.out.println("程序出错");
e.printStackTrace();
} catch (InputMismatchException e) {
System.out.println("请输入整数");
e.printStackTrace();
}finally{
scanner.close();
System.out.print("程序结束");
}
}
}
这样程序就能处理除数为0异常和字母与整数转换的异常。
在catch中加入最后一个catch(Exception),因为,我们不能保证我们能预期到所有的异常,所以我们添加这个catch,保证出现了我们意料之外的异常程序也能执行。(安全保障)
强制终止finally
System.exit(1); 终止程序运行 (只要不是数字0就表示是异常的终止状态)
Return在异常中的作用
由于finilly的强制性,无论前面的程序有无出现异常,最后结果都是-100000。所以不建议在finilly中写return。
Throw
将异常抛出
Throws:
抛出异常的类型
自定义异常
public class MyException extends Exception{
public MyException(){
super("这是我的异常类");
}
}
异常链
结果只会输出异常1。
为了解决这个问题,我们使用异常链。
在抛出异常时,接收前面的异常。
这样就可以抛出所有异常了。
共同学习,写下你的评论
评论加载中...
作者其他优质文章