先看代码
public static void main(String[] args) { int a = 10; int b = 0; System.out.println(a/b); System.out.println("程序继续执行"); }
产生错误:Exception in thread "main" java.lang.ArithmeticException: / by zero 会直接在System.out.println(a/b);这里停止程序而不运行剩余的程序,也就是 不会输出程序继续执行这句话,为什么呢?因为a/b(除数不能是0)已经出现了异常(先知道有这个东西) 如何能够让程序继续执行后面的程序而不在a/b这里结束呢? 我们可以使用异常处理来解决这个问题
异常的基本概念java 语言中,将程序执行中发生的不正常情况称为"异常"。(开发过程中的语法错误和逻辑错误不是异常)
执行中的异常事件可以分为两大类:
-
Error(错误):java 虚拟机无法解决的严重性问题。 如:JVM系统内部错误、资源耗尽等严重情况 Error是严重错误,程序会直接崩盘
StackOverflowError[栈溢出] outofmemory[堆溢出] 也可写作简称OOM
-
Exception:其他因为编程错误或者是偶然的外在因素导致的一些问题,可以使用针对性的代码进行处理。 如:空指针访问,试图读取已经不存在的文件,网络连接中断等 Exception可以分成两大类:运行时异常[程序运行过程中的异常],和编译时期的异常[编程时,编译器检查出的异常,必须经过异常处理才可以过编译]
1.异常分为两大类,运行时异常和编译时异常 2.运行时异常,只能在运行过程中发现异常,一般是指编程是的逻辑异常,是程序员应该避免出现的异常。java.lang.RuntimeException 类以及它的子类都是运行时异常 3.编译时异常,是在编译时期必须解决的异常
常见的运行时异常: 1. NullPointerException 空指针异常 2. ArithmeticException 数学运算异常 比如:除数为0 3. ArrayIndexOutOfBoundsException 数组下标越界异常 4. ClassCastException 类型转换异常 5. NumberFormatException 数字格式不正确异常 比如:Integer转换时,字符串中不全是数字
编译时异常是指在编译期,就必须处理的异常,否则代码不能通过 常见的编译异常 待补充
异常处理
-
异常处理就是当异常发生时,对异常处理的方式
异常处理的方式: (1). try-catch-finally异常处理 程序员在代码中捕获发生的异常,自行处理
try-catch-finally 处理机制 try{ 可能有异常的代码 }catch(Exception e){ }finally{ } try-catch()-catch()-... 可以有多个catch语句,捕获不同的异常(进行不同的业务处理),要求父类异常在后,子类异常在前,比如(Exception在后,NullPointerException在前),如果发生异常,只会匹配一个catch 可以直接使用try-finally,这种相当于不捕获异常,程序会直接崩掉或者退出
try-catch-finally方式处理异常的细节
1.如果try中的某个代码发生了异常,异常后面的代码不会执行,直接会转到catch块中
2.如果try中的代码没有异常,则不会执行catch中的代码
3.finally是无论如何都会执行
(2). throws异常处理
将发生的异常抛出,交给调用者(方法)来处理,最顶级的处理者就是JVM
如果在一个方法中可能产生某种异常,但不能确定是何种异常,则可以通过此方法显示地声明抛出异常,表明该方法不对这些异常处理,而由该方法的调用者负责处理
在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中的异常类型,也可以是他的父类
throws的细节 1.对于运行时异常,程序中如果没有处理,默认throws的方式处理 2.子类重写父类的方法是,对抛出异常的规定:子类重写的方法,所抛出的异常类型要么和父类抛出的异常一致,要么为父类抛出的异常的类型的子类型 3.在throws过程中,如果有方法try-catch,就相当于与处理异常,就不必throws
自定义异常
当程序中出现了某些不是Throwable子类中描述处理,我们可以自己设计异常类,用于描述该类异常信息
自定义异常的步骤 1.定义类:继承Exception或RuntimeException 2.如果继承Exception,属于编译异常 3.如果击沉RuntimeException,属于运行异常throws和throw的区别
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)