>  기사  >  Java  >  Java 예외 처리 메커니즘 분석 예

Java 예외 처리 메커니즘 분석 예

WBOY
WBOY앞으로
2023-04-28 21:04:05923검색

예외 처리 메커니즘의 기본 원리

  • 는 메서드를 실행할 때 예외가 전송되면 이 메서드는 예외를 나타내는 개체를 생성하고 현재 실행 경로를 중지한 다음 예외를 jre에 제출합니다.

  • 예외 포착: jre가 예외를 얻은 후 해당 코드를 가장하여 예외를 처리합니다. jre는 메서드의 호출 스택을 검색하고 해당 예외 처리 코드를 찾을 때까지 예외를 생성한 메서드에서 역추적합니다.

예외 상속 다이어그램

Java 예외 처리 메커니즘 분석 예

아, 이제 예외의 정의가 무엇인지 알았으니 예외를 어떻게 포착하고 처리해야 할까요?

예외 처리

1. Try-catch-finally 구조

먼저 코드를 살펴보겠습니다:

package AbnormalTest;

import java.util.InputMismatchException;
import java.util.Scanner;

public class test1 {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        try {
            System.out.print("请输入被除数:");
            int a = input.nextInt();
            System.out.print("请输入除数:");
            int b = input.nextInt();
            int sum = b/a;
            System.out.println("结果是:"+sum);
            System.out.println("程序无异常,执行完毕!");
        }catch (Exception e){               //通用异常
        	//printStackTrace()方法是将堆栈异常的错误信息打印出来(后期学习框架后我们一般提交或 者回滚事务)
            e.printStackTrace();
            System.out.println("程序异常,请重试!");
            return ;
        }finally {
            //不管是否发生了异常,都会执行finally内的代码,通常用于资源的关闭
            System.out.println("------------------------------");
            System.out.println("程序结束,资源已经关闭,欢迎再次使用");
            input.close();   //关闭Scanner对象,节省资源
        }
    }

}

코드 설명:

위 코드에는 try-catch-finally 구조가 있습니다. 각자의 기능은?

try: 예외를 일으킬 수 있는 코드를 포함하기 위해 try를 사용합니다.

catch: try 코드 블록의 코드가 실행 중일 때 예외가 발생하는 한 예외를 캡처하기 위해 catch가 입력됩니다

finally: 아무리 이전 코드가 실행되고, 마지막으로 코드 블록이 실행됩니다! !

실행 결과 예:

정상 시간:

Java 예외 처리 메커니즘 분석 예

비정상 시간:

배당금이 0일 때 예외가 발생하여 캡처를 위해 카타에 입력되지만 예외 유무에 관계없이 프로그램이 마침내 실행될 것입니다. 출력: 프로그램이 종료되고 리소스가 닫혔습니다. 다시 사용해도 됩니다.

Java 예외 처리 메커니즘 분석 예

2. 멀티 캐치는 다양한 예외를 처리합니다.

우리는 프로그램에 하나 이상의 예외가 있을 수 있다는 것을 알고 있습니다. 예를 들어, 위의 코드에는 0의 배당이 있을 수 있습니다. 예외, 계산을 위해 문자를 입력할 때 입력 예외가 있을 수도 있고, 숫자 형식 예외가 있을 수도 있습니다. 이런 식으로 말이죠. , 멀티 캐치를 사용하여 예외를 잡을 수 있습니다:

또는 위 코드를 예로 들어 보겠습니다:

import java.util.InputMismatchException;
import java.util.Scanner;
public class test1 {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        try {
            System.out.print("请输入被除数:");
            int a = input.nextInt();
            System.out.print("请输入除数:");
            int b = input.nextInt();
            int sum = b/a;
            System.out.println("结果是:"+sum);
            System.out.println("程序无异常,执行完毕!");

        }catch (InputMismatchException  e){                    //多重catch结构,这里捕捉输入异常
            e.printStackTrace();
            System.out.println("程序输入异常,请重试!");
        }catch (Exception e){                                 //这里捕捉通用异常(其他异常都可以在这里进行捕捉)            
            e.printStackTrace();
            System.out.println("程序异常,请重试!");
            return ;
        }finally {
            //不管是否发生了异常,都会执行finally内的代码,通常用于资源的关闭
            System.out.println("------------------------------");
            System.out.println("程序结束,资源已经关闭,欢迎再次使用");
            input.close();   //关闭Scanner对象,节省资源
        }
    }

}

입력이 그렇지 않은 경우 숫자에 관해서는:

Java 예외 처리 메커니즘 분석 예

이 방법으로 우리는 그것이 있음을 알 수 있습니다 첫 번째 catch에서 잡혔습니다

3, throws가 예외 선언/throw에서 예외 발생:

메서드에 알리는 메서드를 정의한다고 가정합니다. 어떤 종류의 예외(선언된 예외)가 전송될 수 있으며, 호출자는 호출할 때 예외를 처리해야 합니다. 방법.

먼저 오류 클래스를 정의합니다.

학생 클래스:

package ExceptionText;

/**
 * 异常测试
 */

public class Student {

    private String name;
    private int age;
    private char sex;


    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public char getSex() {
        return sex;
    }

    public void setAge(int age) throws Exception {
        if (age < 101 && age > 0) {
            this.age = age;
        } else {
            throw new Exception("年龄输入有误!");
        }
    }
    public void setSex(char sex) throws Exception {
        if (sex == &#39;男&#39; || sex == &#39;女&#39;) {
            this.sex = sex;
        } else {
            throw new Exception("性别输入有误");
        }

    }
}

테스트 클래스:

package ExceptionText;

public class TestMain {
    public static void main(String[] args) {

        Student stu = new Student();
        stu.setName("小红");
        try {
            stu.setAge(50);
            stu.setSex(&#39;k&#39;);
            System.out.println("我叫:"+stu.getName()+"年龄:"+stu.getAge()+"我的性别是:"+stu.getSex());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

입력과 종료가 올바른 경우:

Java 예외 처리 메커니즘 분석 예

연령 입력이 잘못된 경우:

Java 예외 처리 메커니즘 분석 예

성별 입력이 잘못된 경우:

Java 예외 처리 메커니즘 분석 예

참고: 예외가 여러 개 있는 경우 처음 발생한 예외가 발생합니다.

4. 사용자 정의된 예외:

RuntimeException의 런타임 예외 하위 클래스가 요구 사항을 충족할 수 없는 경우 필요에 맞게 런타임 예외를 사용자 정의하고 사용자 정의 예외 정보를 발생시킬 수도 있습니다. 하지만 참고: 사용자 정의 런타임 예외는 RuntimeException을 상속해야 합니다! ! !

맞춤 예외 클래스:

//这个类是继承了RuntimeException
public class AgeException extends RuntimeException {
   //构造方法
   public AgeException(String message) {
       super(message);
   }
}

학생 정보 클래스:

package CustomizeException;

public class Student {

    private String name;
    private int age;
    private char sex;

    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
    public char getSex() {
        return sex;
    }
    //方法
    //使用throws 来声明异常,就是这个方法内可能存在异常,先事先声明
    public void setAge(int age) throws Exception {
        if (age < 101 && age > 0) {
            this.age = age;
        } else {            //如果不符合上面的if判断
            throw new Exception("年龄输入有误!");   //这里就要用thrwo 来抛出异常,
        }
    }

    public void setSex(char sex) throws Exception {
        if (sex == &#39;男&#39; || sex == &#39;女&#39;) {
            this.sex = sex;
        } else {
            throw new AgeException("这是自定义异常,性别输入有误");
        }
    }
}

테스트 클래스:

package ExceptionText;
public class TestMain {
    public static void main(String[] args) {

        Student stu = new Student();
        stu.setName("小红");
        try {
            stu.setAge(18);
            stu.setSex(&#39;女&#39;);
            System.out.println("我叫:"+stu.getName()+"年龄:"+stu.getAge()+"我的性别是:"+stu.getSex());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

이 부분의 코드는 위의 세 번째 부분과 일치합니다.

5. 일반적인 이상

Java 예외 처리 메커니즘 분석 예

위 내용은 Java 예외 처리 메커니즘 분석 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제