Java异常

异常

异常

软件程序在运行过程中,可能遇到异常问题,我们叫异常,英文是Exception,意思是例外

异常指程序中出现的不期而至的各种状况,例如:文件找不到,网络连接失败,非法参数等

异常发生在程序运行期间,它影响了正常的程序执行流程

  • 检查性异常:最具代表性的检查性异常是用户错误或问题引起的异常
  • 运行时异常:运行时异常是可能会被程序员避免的异常
  • 错误:错误表示异常,而是脱离程序员控制的问题,错误在代码中常常被忽略,例如:栈溢出

异常体系结构

Java把异常当作对象来处理,并定义一个基类Java.lang.Throwable作为所有异常的超类

在Java API 中已经定义了许多异常类,这些异常类分为两大部分,错误 Error和异常 Exception

Exception和Error

  • error类对象由Java虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关

    Java虚拟机运行错误(Vrtual MachineError),当VJM不再有继续执行操作所需要的内存资源,会出现OutOfMemoryError,这些异常发生时,Java虚拟机(JVM)一般会选择线程终止

    还有虚拟机试图执行应用时,如类定义错误(NoClassDefFoundError),链接错误(LinkageError),这些错误是不可查的,因为他们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况

  • Exception

    在Exception分支中有一个重要的子类RuntimeError(运行时异常)

    • ArrayIndexOutOfBoundExcepton(数组下标越界)
    • NullPointerException(空指针异常)
    • ArithmeticException(算术异常)
    • MissingResourceException(丢失资源)
    • ClassNotFoundException(找不到类)等异常,这些异常通常是不检查异常,程序中可以选择捕获处理,也可以选择不处理

    这些异常一般由程序逻辑错误引起,程序应该从逻辑角度尽可能避免这些异常的发生

  • Error和Exception的区别:Error通常是灾难性的致命的错误,是程序无法控制和处理的,当出现这些异常时,Java虚拟机(VJM)一般会选择终止线程;Exception通常情况下是开心被程序处理的,并且在程序中一个尽可能的去处理这些异常

Java异常处理机制

抛出异常,获取异常

 try{
  //(尝试运行的)程序代码
}catch(异常类型 异常的变量名){
  //异常处理代码
}finally{
  //异常发生,方法返回之前,总是要执行的代码
}//Crtl+Alt+T   自动生成

以上语法有三个代码块:

  • try语句块,表示要尝试运行代码,try语句块中代码受异常监控,其中代码发生异常时,会抛出异常对象
  • catch语句块会捕获try代码块中发生的异常并在其代码块中做异常处理,catch语句带一个Throwable类型的参数,表示可捕获异常类型。当try中出现异常时,catch会捕获到发生的异常,并和自己的异常类型匹配,若匹配,则执行catch块中代码,并将catch块参数指向所抛的异常对象。catch语句可以有多个,用来匹配多个中的一个异常,一旦匹配上后,就不再尝试匹配别的catch块了,通过异常对象可以获取异常发生时完整的JVM堆栈信息,以及异常信息和异常发生的原因等
  • finally语句块是紧跟catch语句后的语句块,这个语句块总是会在方法返回前执行,而不管是否try语句块是否发生异常。并且这个语句块总是在方法返回前执行,目的是给程序一个补救的机会
例如:
public class Exception1 {
    public static void main(String[] args) {
        try {   //要监测的代码块
            Scanner in=new Scanner(System.in);
            System.out.print("请输入被除数:");
            int num1 = in.nextInt();
            System.out.print("请输入除数:");
            int num2 = in.nextInt();
            System.out.println(num1+"/"+num2+"="+num1/num2);
        }catch (InputMismatchException e){  //catch(异常类型 异常名称)
            System.out.println("被除数和除数必须要是整数");
        }catch (ArithmeticException e){
            System.out.println("除数不能为0");
        }catch (java.lang.Exception e){		//多重catch的使用
            System.out.println("其他未知异常");
        }
        finally {   //不管是否出现异常,finally一定会被执行。
            System.out.println("程序运行结束");
        }
    }
}
//假设捕获多个异常,需要从小到大捕获
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值