`

Java中exception异常

    博客分类:
  • Java
阅读更多
1. Java中exception异常

Java中的异常分为两大类:
1) Checkedexception(非RuntimeException)
2) Uncheckedexception(RuntimeException)

Java中所有的异常类都会直接或间接地继承Exception父类。
public class ExceptionTest {
    public static void main(String[] args) {
        int c = 0;
        try {
            int a = 3;
            int b = 0;
            c = a / b;
            System.out.println("hello world");
        } 
        catch (ArithmeticException e) {
            e.printStackTrace();
        }
        finally{
            System.out.println("welcome");
        }
        System.out.println(c);
    }
}
运行结果:
java.lang.ArithmeticException: / by zero
    at test10.ExceptionTest.main(ExceptionTest.java:9)
welcome
0

可以自己抛出异常throw new Exception()
public class Exception2 {
    public void method() throws Exception{
        System.out.println("hello world");
        throw new Exception();
    }
    public static void main(String[] args) {
        Exception2 test = new Exception2();
        try {
            test.method();    
        } 
        catch (Exception e) {
            e.printStackTrace();
        }
        finally{
            System.out.println("in the end");
        }
    }
}
运行结果:
hello world
java.lang.Exception
    at test10.Exception2.method(Exception2.java:6)
    at test10.Exception2.main(Exception2.java:11)
in the end

对于非运行时异常(checkedexception),必须要对其进行处理,处理方式有两种:第一种是使用try..catch…finally进行捕获;第二种是在调用该会产生异常的方法所在的方法声明throwsException。
对于运行时异常(runtime  exception),我们可以不对其进行处理,也可以对其进行处理。推荐不对其进行处理。
public class Exception3 {
    public static void main(String[] args) {
        String str = null;
        System.out.println(str.length());
    }
}
运行结果:
Exception in thread "main" java.lang.NullPointerException
    at test10.Exception3.main(Exception3.java:6)


2. 自定义exception异常

public class MyException extends Exception{
    public MyException() {
        super();
    }
    public MyException(String message){
        super(message);
    }
}
public class ExceptionTest4 {
    public void method(String str) throws Exception{
        if (null == str) {
            throw new MyException("传入的字符串参数不能为null");
        }
        else if ("hello".equals(str)) {
            throw new MyException2("传入的字符串不能为hello");
        }
        else {
            System.out.println(str);
        }
    }
    
    public static void main(String[] args){
        try {
            ExceptionTest4 test = new ExceptionTest4();
            test.method("hello");
        } 
        catch(MyException e){
            System.out.println("进入到MyException catch块");
            e.printStackTrace();
        }
        catch(MyException2 e){
            System.out.println("进入到MyException2 catch块");
            e.printStackTrace();
        }
        catch(Exception e){
            System.out.println("进入到Exception catch块");
            e.printStackTrace();
        }
        finally{
            System.out.println("异常处理完毕");
        }    
        System.out.println("程序执行完毕");
    }
}
运行结果:
进入到MyException2 catch块
test11.MyException2: 传入的字符串不能为hello
    at test11.ExceptionTest4.method(ExceptionTest4.java:9)
    at test11.ExceptionTest4.main(ExceptionTest4.java:19)
异常处理完毕
程序执行完毕

"hello".equals(str)如果str为null,判断结果返回false;
Str.equals(“hello”)如果str为null,会抛出空指针异常;

exception异常处理可以有多个catch块,但是运行时只能进入一个catch块。
我们可以使用多个catch块来捕获异常,这时需要将父类型的catch块放到子类型的catch块之后,这样才能保证后续的catch可能被执行,否则子类型的catch将永远无法到达,Java编译器会报编译错误;如果多个catch块的异常类型是独立的(MyException,MyException2),那么谁前谁后都是可以的。
如果try块中存在return语句,那么首先也需要将finally块中的代码执行完毕,然后方法再返回。
public class MyException2 extends Exception{
    public MyException2(){
        super();
    }
    
    public MyException2(String message){
        super(message);
    }
}

public class ExceptionTest5 {
    public void method(){
        try {
            System.out.println("进入到try块");
            // 表示退出不执行后面代码
            System.exit(0);
        } 
        catch (Exception e) {
            System.out.println("异常发生了");
        }
        finally{
            System.out.println("进入到finally块");
        }
        System.out.println("异常处理后续的代码");
    }
    public static void main(String[] args) {
        ExceptionTest5 test = new ExceptionTest5();
        test.method();
    }
}
运行结果:
进入到try块
分享到:
评论

相关推荐

    优质资料(2021-2022年收藏)史上最全的Java中所有Exception异常中英文对照.docx

    1. `ArithmeticException`:当计算中出现除以零、非法运算等错误时,会抛出此类异常。 2. `ArrayIndexOutOfBoundsException`:当尝试访问数组的索引超出了数组的实际长度时,会抛出此类异常。 3. `...

    java Exception

    ### Java中的异常处理详解 #### 一、异常基础概述 在Java编程中,异常处理是一项重要的机制,用于处理运行过程中可能发生的错误情况。通过合理的异常处理,可以显著提高程序的健壮性和可用性。 ##### 1. 异常概念...

    JAVA 自定义异常 Exception

    自定义异常是在Java中通过继承`java.lang.Throwable`或其子类(如`Exception`或`Error`)来实现的。通常,我们选择继承`Exception`类,因为它用于表示程序可以恢复的错误,而`Error`则用于表示系统级的严重问题,...

    深入理解java异常(异常中的Error+异常中的Exception+检查异常+运行时异常+异常处理+throws关键字等)

    Exception 是 Java 异常机制中的另一个基类,分为检查异常和运行时异常两种。检查异常是编译器在编译时强制要求处理的异常,例如 IO 操作、ClassNotFoundException、线程操作等。运行时异常是编译器不强制要求处理的...

    java 除0发生的算术异常(ArithmeticException)

    总的来说,`ArithmeticException`是Java中常见的运行时异常之一,通过合理的异常处理和输入验证,我们可以避免这类异常的发生,提高程序的健壮性。理解并妥善处理这种异常对于编写稳定且可靠的Java程序至关重要。

    JAVA中常见的异常

    ### JAVA中常见的异常知识点详解 #### 一、`java.lang.NullPointerException` 在Java编程中,`java.lang.NullPointerException`(简称NPE)是最常见的异常之一。这种异常通常发生在尝试访问一个空对象引用的方法或...

    Java exception_java_

    Java异常处理是编程中至关重要的一个环节,它用于在程序执行过程中处理错误和不正常的情况。异常(Exception)是程序运行时出现的问题,不同于逻辑错误,逻辑错误在编译阶段就能发现,而异常则通常在运行时才会暴露...

    JAVA中的异常.ppt

    异常(Exception)是Java中一种特殊类型的对象,它表示程序运行过程中发生的错误或非正常情况。Java通过异常类来表示不同的异常情况,这些类位于`java.lang.Throwable`类及其子类层次结构中。异常类通常分为两种主要...

    java 异常 问题收集 Exception

    在这个“java 异常 问题收集 Exception”主题中,我们将深入探讨Java异常处理的基本概念、常用类以及最佳实践。 1. 异常的概念与分类: Java中的异常是程序运行时出现的不正常情况,通常会导致程序中断。Java将...

    java异常exception

    例如,如果你在Java项目中引用了一个外部库中的类,但在运行时类路径中未包含该库,那么就会触发此类异常。为了防止此类异常的发生,开发人员应该确保所有的依赖都被正确地添加到了项目的类路径中。 #### 3. `java....

    java中Exception的细节

    当一个异常在处理另一个异常的过程中被抛出时,原始异常(即“原因”)会被保存,并可在捕获的异常中访问。 此外,`Exception`类有两个重要的子类:`RuntimeException`和`Error`。`RuntimeException`是所有非检查型...

    javaException_JAVA源码_

    Java异常处理是编程中至关重要的一个部分,它用于在程序运行时处理错误和不寻常的情况。在Java中,异常是一种事件,它中断了程序的正常流程。Java异常处理提供了五种关键字来帮助开发者有效地管理异常:`try`, `...

    java exception

    除了基本的异常处理,Java还提供了异常链(Exception Chaining),允许一个异常实例引用另一个异常,这样可以保留更详细的错误信息。还有`assert`关键字,用于在开发阶段进行断言检查,确保代码的正确性。 总之,...

    java异常处理习题

    Java 异常处理是 Java 编程语言中的一种重要机制,用于处理程序在运行时可能出现的错误或异常情况。下面是关于 Java 异常处理的习题和知识点总结: 一、Java 异常处理关键字 * Java 中用来抛出异常的关键字是 `...

    高效的java异常处理框架高效的java异常处理框架高效的java异常处理框架

    在 Java API 中已经定义了许多异常类,这些异常类分为两大类,错误 Error 和异常 Exception。Java 异常体系结构呈树状,其层次结构图如图 1 所示: 图 1 Java 异常体系结构 Throwable 类是所有异常和错误的超类,...

    java中的异常处理

    在Java中,异常分为两种主要类型:运行时异常(RuntimeException)和编译时异常(Checked Exception)。运行时异常通常由程序逻辑错误引起,如除零错误、空指针引用等,它们在程序运行时才会被抛出。编译时异常则是...

    java异常 exception

    在Java中,异常主要分为两大类:`Error` 和 `Exception`,它们都继承自 `Throwable` 类。 - **编译时错误**:这类错误通常在编译期间就能被发现,如语法错误。 - **运行时错误**:这些错误往往在程序执行过程中出现...

    JAVA Exception Handling & UI Design

    在Java编程中,异常处理(Exception Handling)是确保程序健壮性的重要机制。它允许程序员在遇到错误情况时,能够优雅地处理问题而不是让程序突然崩溃。本项目中,"JAVA Exception Handling & UI Design" 涉及了如何...

    java 异常详解,java异常分类,创建自己的异常

    Java 异常是指在程序运行中出现的违背指定正常流向的事件。异常可以分为两大类:-checked 异常和 unchecked 异常。Checked 异常必须在编译时捕捉并处理,而 unchecked 异常可以在编译时忽略,但是在运行时总是会被抛...

    Java中常用异常列表.pdf

    Java中常用异常列表 异常是Java程序中的一种错误处理机制,用于捕获和处理运行时错误。在Java中,异常可以分为两大类:checked异常和unchecked异常。checked异常是编译器强制检查的异常,unchecked异常是运行时异常...

Global site tag (gtag.js) - Google Analytics