JAVA异常处理

异常处理

  • 异常处理机制可以使程序的异常处理代码和正常业务代码分离
  • 抛出异常:try内的业务逻辑块出现异常时,系统自动生成一个异常对象,该异常对象被提交给java运行时的环境
  • 捕获异常:java运行环境收到异常对象时,会寻找处理该异常对象的catch块,如果找到就把该对象交给catch快处理。如果找不到捕获异常的catch块,就退出java程序

在这里插入图片描述

  • java将异常处理封装成一个个类,类与类之间的继承关系为:

  • Throwable是Error和Exception的超类

  • Error 系统级错误,(包括outofMemeryError,StackOverflowError)

  • Exception 可修复异常

    • 其他exception(非运行时异常,编译期异常),IOException,SQLExpection
    • RuntimeException(运行时异常)
      • NullPointerException ,空指针
      • ArrayIndexOutOfBuoundsException ,数组下标越界
      • ArithmeticException ,算数异常(除数为零)
      • ClassCastException ,类强制转换时可能会异常,当想把对象强制转化为不是实例的子类时抛出异常
      • InputMismatchException ,处理用户输入错误的提示
  • Error和Exception:Error错误一般是与虚拟机相关,如系统崩溃,虚拟机错误。这种错误无法恢复无法捕捉,将导致程序中断。

  • finally总会执行

    • 当return和finally一起使用,但finally中没有return时,先执行return,在执行finally,最后return在返回值(返回值是在最后,但执行是在finally前面)
    • 当finally中有return直接返回finally中的return,try catch中的return就不返回了
  • finally中的赋值语句不改变try-catch的返回值,(因为返回是先执行的,只是最后返回),只有finally中的returen能改变return值

try{
            a = 1;
            returna;
        }
        finally{
            System.out.println("It is in final chunk.");
            a = 2;
           // returna;
        }
//这里返回依旧是1,finally中的赋值不改变返回值
//当注释return被使用时,返回2
  • try catch finally不能独立存在
  • try后面可以直接加finally,try中可以继续try,catch中可以继续try,finally中可以继续try
try{
    //执行的代码,
    
}catch(Exception e){
    //try发生异常才会跳到这
    
}finally{
    //不管什么情况都会执行,这以便能在异常处理的最后做一些清洁工作,比如关闭数据库
    
}



  • 输入依次两个整数相加,输入错误提示用户重新输入
  • 用一个循环读到int才出去,不然继续循环读
  • try中nextInt读成功就就把循环条件置成false,否则就进入catch
  • try中有nextInt,那么在catch中就要有nextLine(要把int残余的读走)
import java.util.InputMismatchException;
import java.util.Scanner;

public class JavaExceptionTest {
    public static void main(String[] args) {
        int a, b;
        System.out.println(("第一个整数是:"));
        a = chu();
        System.out.println(("第二个整数是:"));
        b = chu();
        System.out.println("两个整数和是:" + (a + b));
    }

    public static int chu() {
        boolean zhi = true;
        int a = 0;
        Scanner input = new Scanner(System.in);
        while (zhi) {
            try {
                a = input.nextInt(); //输入不是int的话,这里就异常
                zhi = false;  //输入的是int的话就结束循环
            } catch (InputMismatchException e) {
                System.out.println(("输入类型不是整型的,请重新输入:"));
                input.nextLine(); //把nextInt产生的换行符去掉
            }
        }
        return a;
    }
}

throw和throws

throws

  • throws用来在方法定义时声明该方法要抛出的异常类型(记忆:可能在方法后面写了一系列,所以加s)
  • 当方法抛出列表中的异常时,方法将不对这些异常及其子类异常做处理,而是抛向调用该方法的方法,由他去处理
  • main方法调用就是系统进行异常处理
public void method() throws ArithmeticException,InptMismatchException{
    
}

throw

  • throw抛出异常对象,并且只能抛出类Throwable或者其子类的实例对象(Error+Exception)
  • 比如 throw new String()就是错的
if(age<18 || age>80){
    throw new Exception("age error");
}else{
    
}
  • 使用throw抛出异常有两种处理方法
    • 方法内部自己抛出异常自己处理
    • 在方法声明处用throws声明异常,谁调用谁处理(本质是因为throws)
try{
    if(age<18 || age>80){
    throw new Exception("age error");
}else{
    System.out
}
}catch(Exception e){
    
}

// 2.函数声明处加throws,谁调用谁处理
public static void textAge() throws Exception{
    if(age<18 || age>80){
    throw new Exception("age error");
}else{
    
}
}
  • throws和throw连用时,throw抛出的异常对象要在throws异常列表中
//这里throws列表中填的是ArithmeticException本身或者他的父类Throwable,Exception
public static int test(int a,int b) throws {
    if(b==0){
        throw new AritheticException{""}
    }
}
  • throw意思是这句代码自己手动抛出一个异常(及一定有异常)
//c#的写法
try{
    Console.WriteLine("try");
    throw new Exception(); //表示这里抛出一个Exception异常
}catch (Exception){
    Console.WriteLine("catch");
}finally{
    Console.WriteLine("finally");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值