九、java异常机制——小白秃头史10

七、异常

异常的概述

异常就是有异于常态,和正常情况不一样,有错误出现。在java中,阻止当前方法或作用域的情况,称之为异常。

异常的体系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rYV0SvTa-1610097951596)(异常的体系.jpg)]
Error:严重异常,处理不了,如:硬件问题
Exception:称为异常类,表示程序本身可以处理的问题

  • RuntimeException:在编译期是不检查的,出现问题后需要我们回来修改代码、
  • 非RuntimeException:编译期就必须处理的,否则不能通过编译

JVM的默认处理方案

如果程序出现了问题,我们没有处理,那么jvn会做默认处理

  • 把异常名称,异常原因和异常出现的位置等信息输出在控制台
  • 程序停止执行

自主处理异常

因为在java程序中默认的异常处理是将整个程序停止运行,但在实际开发中出现我们希望的是出现异常后不影响或许执行,这就要自己来处理异常了。
在java中异常的处理方案有两种:

  • try…catch…
  • throws

try…catch…

格式:

try{
     
	可能会出现异常的代码
} catch(异常类名 变量名){
     
	异常的处理代码
}

执行流程:
程序从try开始执行,出现异常会自动生成异常类对象,该异常对象将被提交给java运行时系统。
当java运行时系统接收到异常后,会去catch找匹配的异常类,找到后进行异常的处理执行,程序还可以继续向下执行
实现代码:

public class Demo01 {
     
    public static void main(String[] args) {
     
        System.out.println("开始");
        method();
        System.out.println("结束");
    }
    public static void method(){
     
        int[] i = {
     1,2,3};
        try {
     
            System.out.println(i[3]);
        }catch (ArrayIndexOutOfBoundsException e){
     
            System.out.println("超出索引范围");
        }
    }
}

throws

虽然我们通过try…catch…可以对异常进行处理,但并不是所有的异常都可以进行处理
针对这种情况,java提供了throws的处理方案
格式:
方法名() throws 异常类
执行流程:
暂时不用管这个异常,谁调用谁处理

自定义异常

尽管java官方给出了很多异常,但在实际开发中这些异常是远远不够的,如分数必须在0-100之间
这时候的就需要我们来自定义异常处理
格式:

public class 类名 extends Exception {
     
    无参构造
    带参构造
}

具体实现:

//自定义异常类
public class GradeException extends Exception {
     
    public GradeException() {
     
    }

    public GradeException(String message) {
     
        super(message);
    }
}

//分数类
public class Grade {
     
    public void gread(int i) throws GradeException {
     
        if (i < 0 || i > 100){
     
            throw new GradeException();//不会输出错误信息
            //throw new GradeException("输入有误");//会输出错误信息
        } else {
     
            System.out.println("输入正常");
        }
    }
}

//测试类
public class GradeTest {
     
    public static void main(String[] args) {
     
        Scanner s = new Scanner(System.in);
        System.out.println("输入分数:");
        int i = s.nextInt();
        Grade g = new Grade();
        try {
     
            g.gread(i);
        } catch (GradeException e) {
     
            e.printStackTrace();
            //System.out.println("输入有误");
        }
    }
}

你可能感兴趣的:(小白秃头史,java,编程语言,jvm)