JAVA学习笔记three:异常

时间:2023-02-26 15:01:10

 

  我们生活中经常会遇到一些异常,比如天气下雨后上课迟到,这不是主观产生的,在JAVA中也会因为硬件或代码等产生异常,它们在平常可能是对的,但是偶尔也会出现异常现象,就像看天气预报可能下雨带伞一样,代码可能出现异常,我们可以通过编程处理它。JAVA中异常体系可以表示如下:

JAVA学习笔记three:异常

受检异常在编译时就会产生异常,无法运行,例如robot类实例化时就会产生受检异常,同时非受检异常运行时才会产生异常,我们一般对非受检异常也并不会进行异常处理,一般都能在代码中修改消除。

    在JAVA当中的异常处理可以通过以下方式来实现:

try{
//可能出现异常的代码部分
}catch(异常类型 异常变量){
//执行异常操作
}catch(异常类型 异常变量){
//执行异常操作
}…
finally{
//处理完try与catch操作后的收尾操作,异常统一出口
}

  •     try的意思就是我们可以先试着运行一下,产生异常并进行捕捉,捕捉到异常,执行异常类型相对应的操作,如果没有进行捕捉或者捕捉到的异常没有相对应的类型,则程序将会报错退出,系统报告在控制台。
  •     在JAVA机制中,一旦产生异常,系统就会自动生成一个异常实例化对象,通过这个对象我们可以对异常进行操作
  •     所有异常根据catch方法参数进行匹配异常的实例化对象,如果匹配成功,则由匹配成功的catch语句进行处理。
注意:
  1. catch定义,由上到下,异常范围必须由小到大或者同级别的,否则eclipse就会报错,因为下面的异常总不会运行。
  2. 运行时异常,catch中可以随意定义类型,程序运行时,会根据catch参数自动匹配。
  3. 非运行时异常,则catch中定义的异常,在try代码块中必须存在,如果没有类似异常存在,则不允许被定义。
finally关键字: 在进行异常处理之后,在异常的处理格式中还有一个finally语句,name此语句将作为异常的统一出口,不管是否产生异常, 最终都要执行此段代码
throw与throws关键字:
  • Throws关键字主要在方法的声明上使用,表示方法中不处理异常,而交给调用处处理。实际上对于java程序来讲, 如果没有加入任何的异常处理,默认有jvm进行异常的处理操作
  • Throw关键字表示在程序中手动抛出一个异常,因此从异常处理机制上看,所有的异常一旦产生后,实际上抛出的就是一个异常的实例化对象, name此对象也可以有throw直接抛出
注意:运行时异常,在程序中捕捉并throw后,方法中不一定要声明throws,而非运行时异常,在代码快中throw后,必须在方法中声明throws抛出异常

异常处理规则:
1.try语句不能单独存在,可以和catch、finally组成的try…catch、try…catch…finally、try…finally三种结构,catch语句可以有一个或者多个,但是try、catch、finally不能单独存在。
2.try、catch、finally三个代码块中的语句变量独立存在,不能相互访问。
3.多个catch语句,java虚拟机会自动匹配其中一个异常或者异常子类,就执行这个catch块中代码,并且不会再执行其他catch块中的代码.。 测试例子:
public class Test {
JFrame jf;
public static void main(String[] args) throws AWTException{
Test t = new Test();
int v = t.div(20,0);
System.out.println(v);
}
/**
* 做除法操作
*/
public int div(int a,int b) throws AWTException{
////会不会有异常情况出现???
//jf.setVisible(true);

//会不会有异常情况出现???可能会有异常:除数为0
int result = 0;
try{
jf.setVisible(true);
result = a/b;
}catch(ArithmeticException e){
throw new ArithmeticException();
}catch(NullPointerException e){
e.printStackTrace();
}finally{
//必须(一定)会执行
System.out.println("执行了finally内容");
}

try {
Robot robot = new Robot();
} catch (AWTException e) {
throw new AWTException("异常问题");
}
//
////ArithmeticException是运行时异常
////AWTException是检测性异常
//
//System.out.println("后续的代碼");
return result;
}
}