当前位置: 首页 > 工具软件 > ari4java > 使用案例 >

Java的Error和Exception

牛经赋
2023-12-01
  • 什么是异常

在实际工作中遇到的情况不可能是完美的,比如写某个模块时,用户的输入不一定符合编程的要求。你要读取数据库的数据时,数据变成空,等等。这都是异常的表现。

软件程序在运行过程中,同样可以遇到很多异常问题,英文名时Exception。

  • 什么是错误 

错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略,英文名为Error。

  • 异常处理框架 

引入异常处理框架,解决预防异常。 Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。并且java将异常分为两大类:Error和Exception。

package com.xzc.异常;

public class Demo01 {
    public static void main(String[] args) {
        System.out.println(10/0);//产生ArithmeticException异常
        new Demo01().a();//产生StackOverflowError错误
    }
    public void a(){
        a();
    }
    public void b(){
        b();
    }
}
  • 捕获和抛出异常

既然有了异常,就不能看着异常“肆意妄为”,所有我们要抛出和捕获异常,并且处理异常。处理异常的五个关键字:try、catch、finally、throw、throws。 

package com.xzc.异常;
//快捷键 ctrl + alt + t
public class Test {
    //try、catch是必须要的、finally可以没有
    public static void main(String[] args) {
        int a = 1;
        int b = 0;
        try{//try监控区域
            System.out.println(a/b);
        }
        //捕获异常时要把最大的异常放在最下面
        /*
        Throwable>Error
        Throwable>Exception
        */
        //catch这里的用法类似于if else即无论多少个catch只能进入一个catch
        catch (ArithmeticException ari){
            System.out.println(ari);
        }
        catch (Error error){
            System.out.println("Error");
        }
        catch (Exception e){
            System.out.println("exception" + e);
        }
        catch (Throwable exception){//捕获异常 如果异常(错误)不对应还是会出现爆红
            System.out.println("程序出现异常" + exception);
        }//Throwable为最高的异常(如果不知道会是什么异常就Throwable就全能捕获)
        finally {//处理善后工作 有没有异常都会执行finally 一般执行一些IO流关闭的语句
            System.out.println("finally");
        }
    }
}
  • throw(针对语句)

注意:抛出的new异常要和catch中的形参类型一致 

package com.xzc.异常;

public class TestThrow {
    public static void main(String[] args) {
        int a = 1;
        int b = 0;
        try {
            if(b==0){//throw语句抛出异常
                throw new Exception();//主动的抛出异常
            }
            System.out.println(a/b);
        }
        catch (Exception e) {
            System.out.println(e);
        }
        finally {
            System.out.println("finally");
        }
    }
}
  •  throws(针对方法)
package com.xzc.异常;

import java.util.concurrent.TimeoutException;

public class TestThrow {
    public static void main(String[] args){
        TestThrow testThrow = new TestThrow();
        try {
            testThrow.test();
        } catch (Exception e) {
            System.out.println("test出现异常");
        } finally {
            System.out.println("finally");
        }
        System.out.println("=============================");
        try {
            testThrow.xzc();
        } catch (Exception e) {
            System.out.println("xzc出现异常");
        }
    }
    public void test() throws Exception{
        int a = 1;
        int b = 0;
        if(b==0){
            throw new Exception();
        }
        else{
            System.out.println(a/b);
        }
    }
    public void xzc(){
        int[] a = {1, 2};
        a[2] = 10;
    }
}
/*
结果:
test出现异常
finally
=============================
xzc出现异常
*/
  • 自定义异常

用户自定义异常类,只需要继承Exception类即可。

先写出异常程序(根据其他库异常写出):

package com.xzc.异常;
//自定义异常
public class MyException extends Exception{
    //传递数>10;
    private int a;

    public MyException(int a) {
        this.a = a;
    }
    //toString(alt+insert选择toString)

    @Override
    public String toString() {
        return "MyException{" + "a=" + a + '}';
    }
}

 随后进行异常测试

package com.xzc.异常;

public class TestMy {
    public static void main(String[] args) {
        try {
            test(11);
        } catch (MyException e) {
            System.out.println(e);//e就是toString方法中的输出
        } finally {
            System.out.println("finally");
        }
        System.out.println("=================================");
        try {
            test(1);
        } catch (MyException e) {
            System.out.println(e);
        }
    }
    public static void test(int a) throws MyException {
        if(a>10){
            throw new MyException(a);
        }
        else{
            System.out.println(a);
        }
    }
}
/*
结果:
MyException{a=11}
finally
=================================
1

*/

 类似资料: