(一)什么是异常和异常处理
异常:程序不正常的行为和状态。比如试图打开一个根本不存在的文件等。
异常处理:程序返回到安全状态。异常处理会改变程序的控制流程,让程序有机会对错误做出处理。
(二)异常的分类
i.检查性异常:外界相关的错误。eg:打开一个不存在的类、加载一个不存在的类等。
ii.运行时异常:程序有关的异常。eg:5/0\空指针、数组越界等。
iii.ERROR:系统内部错误或资源耗尽。错误不是异常,而是脱离程序员控制的问题。
(三)异常处理机制
(3.1)try-catah语句
JAVA使用try-catch语句来处理异常,将有可能出现的异常操作放在try-catch的try部分,一旦try部分抛出异常对象,或调用某个可能抛出异常对象的方法,并且该方法抛出了异常对象,那么try立即结束执行,转向catch部分。所以程序将发生异常后的处理放在catah部分。
try-catah语句大的格式如下:
try{
包含可能发生异常的语句//正常业务逻辑代码
}
catch(ExceptionSubClass1 e){
...//当try发生异常,将执行catch代码,若无异常,不执行
}
catch(ExceptionSubClass2 e){
...
}
(3.2)调试代码
public class text1
{
public static void main(String[] args)
{
int n=0,m=0,t=1000;
try
{
m=Integer.parseInt("8888");
n=Integer.parseInt("ab89");//发声异常,转向catch
t=7777;//t没有机会执行
}
catch(NumberFormatException e)
{
System.out.println("发生异常:"+e.getMessage());
}
}
}
运行结果如下:
(四)自定义异常类
(4.1)自定义异常类概述
在编写程序时可以继承Exception类或者其子类定义自己的异常类,然后根据程序的需要来规定哪些方法产生这样的异常。一个方法在声明时可以使用throws关键字声明要产生的若干个异常,并在该方法中具体给出产生异常的操作,即用相应的异常类创建对象,并使用throw关键字抛出该异常对象,导致该方法结束执行。程序必须在try-catch块语句中调用可能发生异常的方法,其中catch的作用就是捕获throw关键字的异常对象。
注:throw不是JAVA的关键字,该关键字的作用就是抛出异常。throw和throws是两个不同的关键字。
(4.2)调试代码
public class text1 extends Exception{
private int detail;
public text1(int a) {
this.detail = a;
}
public String toString() {
return "MyException{" +"detail=" + detail +'}';
}
}
import java.rmi.MarshalException;
public class text2 {
static void test(int a) throws Exception {
System.out.println("传递的参数为:"+a);
if(a>10){
throw new Exception();
}
System.out.println("成功");
}
public static void main(String[] args) throws Exception {
try {
test(11);
} catch (MarshalException e) {
System.out.println("MyException==>"+e);
}
}
}
注意一个方法被覆盖,覆盖它的方法必须抛出相同的异常,或者异常的子类。如果父类的方法抛出多个异常,那么重写的子类方法必须抛出哪些异常的子集,也就是不能抛出新异常。