java异常处理

JAVA异常处理

什么是异常处理:

异常处理是在程序执行过程中遇到异常情况时,通过捕获和处理异常来保证程序的正常执行或进行相应的错误处理。

在 Java 中,异常处理主要通过 try-catch 块和 finally 块来实现。

什么是异常:

异常(Exception)不是错误,而是程序中代码不够健壮或逻辑不满足要求,不处理将会中断程序不在继续执行程序 的一种手段
异常一般是可以解决的

异常的分类

java异常处理_第1张图片

 Throwable:可抛出的,一切错误或异常的父类,

Error: JVM、硬件、执行逻辑错误,不能手动处理。往往改代码不能解决
Exception:程序在运行和配置中产生的问题,可处理。
RuntimeException:运行时异常(不检查异常),可处理,可不处理。(RuntimeException及其子类)

CheckedException:检查时异常(受检异常、编译时异常),必须处理。(Exception及其子类除了RuntimeException)

常见运行异常

java异常处理_第2张图片

 异常堆栈信息

就是程序运行后,发生异常后,在控制台打出来的信息。
 

java异常处理_第3张图片

空指针异常

java异常处理_第4张图片

 数组越界异常

 类型转换异常

数字格式化异常

java异常处理_第5张图片

算术异常

  java异常处理_第6张图片

package com.System;

/**
 * @author cqh
 * @date 2024/1/6
 * @Description
 */
public class MyTest {
    public static void main(String[] args) {

        //空指针异常
//        Student s=null;
//        System.out.println("s.getName() = " + s.getName());

        //数组越界异常
//        int[] array= {1,2,3};
//        System.out.println("array[3] = " + array[3]);
        //类型转换异常
//        Object name="张山";
//        Integer integer=(Integer)name;

        //数字格式化异常
//        int i=Integer.parseInt("100a");

        //算术异常
//        int a=10/0;
//        System.out.println("a = " + a);

    }
}

 检查式异常

java异常处理_第7张图片

异常的传递:

按照方法的调用链反向传递,如始终没有处理异常,最终会由JVM进行默认异常处理(打印堆栈跟踪信息)并且终端程序运行。
 java异常处理_第8张图片

package com.System;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;

/**
 * @author cqh
 * @date 2024/1/6
 * @Description
 */
public class MyTest {
    public static void main(String[] args) {

      


        operation();
    }

    public static void operation(){
        System.out.println("----operation----");
        divide();
    }

    public static void divide(){
        Scanner scanner = new Scanner(System.in);
        System.out.println(" 输入第一个数");
        Integer a=scanner.nextInt();
        System.out.println("输入第二个数");
        Integer b= scanner.nextInt();
        Integer c=a/b;
        System.out.println("c = " + c);
        System.out.println("程序执行完毕");
    }
}

 异常处理:

try:执行可能产生异常的代码

catch:捕获异常,并处理
finally:无论是否发生异常,代码总能执行(Io流、JDBc的连接、网络编程资源等它们的释放资源操作都写在finally中。)

java异常处理_第9张图片

throw:手动抛出异常
throws:声明方法可能要抛出的各种异常

try catch

三种情况

1、没有异常程序正常执行

2、出现异常被捕获

3、出现异常未被捕获
 

package com.System;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;

/**
 * @author cqh
 * @date 2024/1/6
 * @Description
 */
public class MyTest {
    public static void main(String[] args) {




        Scanner scanner = new Scanner(System.in);
        int result=0;
        try {
            System.out.println(" 输入第一个数");
            int num1=scanner.nextInt();
            System.out.println("输入第二个数");
            int num2= scanner.nextInt();
            result=num1/num2;
        }catch (Exception e){//捕获异常

            //打印异常信息
            e.printStackTrace();
            //System.out.println("e.getMessage() = " + e.getMessage());
            // 手动退出jvm
            System.exit(0);
        }finally {

            System.out.println("资源释放了。。。。。");
        }
    }

异常处理多重catch

(1)子类异常在前,父类异常在后

(2)发生异常时按顺序逐个匹配
(3)只执行第一个与异常类型匹配的catch语句

(4) finally根据需要可写或不写
 

 Scanner scanner = new Scanner(System.in);
        int result=0;
        try {
            System.out.println(" 输入第一个数");
            int num1=scanner.nextInt();
            System.out.println("输入第二个数");
            int num2= scanner.nextInt();
            result=num1/num2;
        }catch (ArithmeticException e){
            System.out.println("算术异常");
        }catch (InputMismatchException e){
            System.out.println("输入不匹配异常");
        }catch (Exception e){//捕获异常

            System.out.println("未知异常");
            //打印异常信息
           // e.printStackTrace();
            //System.out.println("e.getMessage() = " + e.getMessage());
            // 手动退出jvm
           // System.exit(0);
        }finally {

            System.out.println("资源释放了。。。。。");
        }


        System.out.println("result = " + result);
        System.out.println("程序执行完毕");

异常处理try...finally

try. . . finally不能捕获异常,仅仅用来当发生异常时,用来释放资源。

一般用在底层代码,只释放资源不做异常处理,把异常向上抛出。

声明异常

throws关键字:声明异常
使用原则:底层代码向上声明或者抛出异常,最上层一定要处理异常,否则程序中断。
java异常处理_第10张图片

 抛出异常

java异常处理_第11张图片

java异常处理_第12张图片 java异常处理_第13张图片

用Exception

java异常处理_第14张图片java异常处理_第15张图片 自定义异常

需继承自Exception或Exception的子类,常用RuntimeException.
必要提供的构造方法:。无参数构造方法
.String message参数的构造方法
java异常处理_第16张图片

java异常处理_第17张图片

java异常处理_第18张图片java异常处理_第19张图片 方法覆盖(重写)

带有异常声明的方法覆盖:
方法名、参数列表、返回值类型必须和父类相同。
子类的访问修饰符合父类相同或是比父类更宽。
子类中的方法,不能抛出比父类更多、更宽的检查时异常。(比如:父类抛出FileNotFoundExcepyion 子类抛出Exception就会报错)
(RanTimeException不受限制)

java异常处理_第20张图片java异常处理_第21张图片

你可能感兴趣的:(java)