第三十天
了解了程序的异常机制以及如何进行异常处理
明天学习用log4j记录异常日志信息
Java异常是指在代码段中发生运行出错的情况。程序中的错误可能来自于编译错误和运行错误。编译错误是因为编写的程序存在语法问题,未能通过编译过程而产生的错误,它将由语言的编译系统负责检测和报告。运行错误是在程序的运行过程中产生的错误。
一、什么是异常
Java把程序运行中遇到的非致命的,通过某种修正后还能继续执行的错误称作异常。
二、产生异常的几种情况
(1) Java虚拟机检测到了异常,这些异常可能是由以下几种情况引起的。
①表达式的计算违反了Java的语义,如整数被0除。
②超出了某些资源限制,如使用了太多的内存。
(2)Java程序代码中的throw语句被执行。
(3)异步异常发生。异步异常的原因可能由以下情况引起。
①Thread的stop方法被调用。
②Java虚拟机内部错误发生。
三、异常处理的几个关键字
Java异常处理通过5个关键字来管理,它们是try、catch、throw、throws和finally。
四、
Java中的异常类有一个父类叫做Throwable,其下面有两个子类分别是Error类和Exception类。
(1)Error异常:
Error指的是错误,通常是程序员不可能通过代码来解决的问题,底层环境或硬件问题。
Error类包括lingageError(结合错误)与VirtualmachineError(虚拟机错误)两个字类
Virtual Machine Error子类,当Java虚拟机崩溃了或用尽了他继续操作的资源时抛出该错误。
(2)Exception异常
Exception指的是异常,或理解为程序运行过程中的意外情况,通常在程序中铺货的异常其实是Exception及其Exception子类的异常。Exception类型的异常又分为运行时异常和非运行时异常。
①运行时异常
运行时异常继承自RuntimeException。Java编译器允许程序不做处理。
②非运行时异常
非运行时异常在java.lang类库中定义,Java编译器要求必须捕获或声明抛弃这种异常。
五、在Java中进行异常处理
Java异常处理的方法有两种:try...catch...finally...和throws 来操作。
1、Try...catch...finally...
通过使用Try...catch...finally语句处理异常,它捕获被命名为属于异常类的异常,并调用方法处理它。其中,finally无论异常都会执行。
try //监视 { 可能发生异常的代码块; } catch(异常类型 异常对象名) //捕获并处理异常 { 异常处理代码块; }finally { //最终执行 }
public class TryCatchFinally { public static void main(String[] args) { try { int x=5; int y=x/0; System.out.println(y); }catch(Exception e) { e.printStackTrace(); }finally { System.out.println("Over!"); } } }
catch语句可以有多个,并且如果用户要捕获Exception,则将Exception放在最后,不能放在前面,否则会出错,如果要捕获多个异常,异常的范围要按照从小到大顺序叠放。
catch多个异常:
public class TryCatchFinally { public static void main(String[] args) { try { int x=5; int y=x/0; System.out.println(y); }catch(IllegalArgumentException e) { e.printStackTrace();//将错误打印到堆栈 }catch(Exception e) { e.printStackTrace();//Exception的范围比较大,应该 放在后面 } } }
2.使用throws抛出异常
声明抛弃异常是在一个方法中声明throws子句中指明的。throws子句方法的基本形式如下:
【修饰符】返回类型 方法名(参数1,参数2,...)throws 异常列表{}
示例:通过throws 抛出异常
public class ThrowsDemo { public static void main(String[] args)throws Exception { int x=5; int y=x/0; System.out.println(y); } }
throws子句中同时可以指明多个异常,说明该方法不对这些异常进行处理,而是声明抛弃他们。
示例:throws抛出多个异常
public class ThrowsDemo { public static void main(String[] args)throws IllegalArgumentException { int x=5; int y=x/0; System.out.println(y); } }