Java语言----异常处理(看了必会)

简介: Java语言----异常处理(看了必会)

😽个人主页:tq02的博客_CSDN博客-C语言,Java领域博主


🌈理想目标:努力学习,向Java进发,拼搏一切,找到一份朝九晚五,有假期的工作,让自己的未来不会有遗憾。

🎁欢迎各位→点赞👍 + 收藏⭐ + 评论📝+关注✨


    本章讲解内容:异常的处理和介绍


     使用编译器:IDEA


b00a056748e248a8a45bda703cd490ee.jpg


一.异常的概述


所谓的异常,就是指程序在运行时可能出现的一些不正常、错误的情况。                    

例如:除以 0、数组下标越界、类型转换失败、网络地址不能打开、文件不存在等。      

异常指的就是程序在 运行时 出现错误时通知 调用者 的一种机制                


实例图:


8f24dd24cf8a42749aa71b1a1d8c7c83.png


这就是异常,因为0不能为除数,所以出现了异常。而为什么说JVM显示异常,之后有讲解。


二.异常类的层次结构和种类


       Java为了对异常进行处理,预先已经对各种可能出现的异常定义了很多异常类,每个异常类都代表了一种运行错误或异常。


e1cd92e62b64462395e0b1abd6fa6696.png


这张图的最顶层是Throwable类,而它是所有异常或者错误的超类(父类),表中的顺序就是继承 。


而我们着重讲解一下(Exception类的子类):


               1.RuntimeException(运行时异常),此异常通常都是:算术异常类、空指针异常类、下标越界异常类、数组元素个数为负异常类等等。都是RuntimeException的子类


而以上的异常类在编译器的表达方式:ArithmeticEception、NullPointerException、IndexOutOfBoundsEception、ArrayIndexOutOfBoundsEcepiond。


               2.其它异常类:此异常通常是指:I/O异常、网络地址不能打开、文件未找到等,而这些异常类是指除了RuntimeException类,其他的所有类,而也称为受检类异常的类。


重点:


运行时异常类,都是代码出错而导致的,所以可以通过修改代码程序避免。

受检类异常类,则出现的异常无法避免,必须通过使用try-catch-finally语句来捕获异常


二.异常的基本用法


2.1异常的捕捉


       捕捉?异常如何捕捉?如之前的代码图,这是Java的JVM捕捉出来的异常。但是我们可以自行捕捉异常。


异常处理语法:对可能存在的受检类异常的语句进行监控。

                         也可以对运行时异常进行监控。


eea00a4ef836494b9710c8c0f41efbce.png


格式如上图,

  1. try块:监控区的工作是:对可能发生了异常的程序语句进行包围。只能有一个。
  2. catch块:捕捉处理区,可以存在多个
  3. finally块:不管监控区如何,此代码一定会实现,用于回收一些物理资源,如网络连接等。


2.2异常处理代码实现


受检类异常需要使用到其他的类,所以为了更好方便理解,我们现在对运行时异常处理进行代码实例。

 使用try{ }catch{ }处理异常的代码


cd8c4bb5a4fb4b40979d06fac625a27a.png

使用try{ }catch{ }处理异常的代码


5c6dd2505829422192d0b8e0b81b3ee9.png


重点来了:如果不使用try{ }catch{ }的语法,那么Java的JVM会自行发现错误并告知。既然JVM会告知,那么为什么还要使用try{ }catch{ }语法呢?


     解释:如果程序发生了异常,系统会根据异常而终止程序运行,但如果用户想让程序继续执行,便可以通过使用try{ }catch{ }的语法处理异常。


三.抛出异常


3.1 throw


      抛出异常,是指告知编译器不要在乎该异常。Java程序定义好的程序异常或者错误时,由系统自动抛出,但是如果程序员想主动抛出异常,则可以使用throw。


代码实现:

 

public static void main(String[] args) {
    System.out.println(divide(10, 0));
}
public static int divide(int x, int y) {
    if (y == 0) {
    throw new ArithmeticException("抛出除 0 异常");
}
    return x / y;
}
// 执行结果
Exception in thread "main" java.lang.ArithmeticException: 抛出除 0 异常
at demo02.Test.divide(Test.java:14)
at demo02.Test.main(Test.java:9)


在这个代码中,我们可以根据实际情况来抛出需要的异常. 在构造异常对象同时可以指定一些描述性信息。


3.2 throws


       如果一个方法的头部申明该方法可能抛出异常了,则使用throws来完成。

语法格式:public void fun() throws 异常类{  .......   }


       使用 throws 声明抛出异常的一般情况是:当前方法不知道如何(或者不想)处理方法中可能发生的异常,于是不使用 try-catch 监控和捕捉异常,而是在方法声明中说明该方法将有可能抛出异常,由方法的上一级调用者处理,自己不再处理。可以理解为踢皮球,没有人想解决这个问题,直到有人愿意解决为止。


代码实例

public class Tex3 {
    public static void fun()throws IOException
{
    FileInputStream input = new FileInputStream("Ajava");
}
    public static void main(String[] args){
       try
       {
           fun();
       }catch(IOException e)
       {
           System.out.println("咳咳");
       }
    }
}


从代码中,我们可以看出来。fun()函数使用了throws声明了抛出异常,从而不解决文件是否可以找到的,受检类异常。而当函数结束之后,异常就丢回给了调用者main() 函数,因此我们可以看见main函数中使用了try-catch 异常处理


四.finally的进一步详解


finally是异常处理语法格式的最后一步,不管监控区是否出现了异常,都会执行,但是否想过一种特殊的情况,调用函数返回时呢?

例如代码:

public class Tex3 {
    public static int fun()
{
    int x=20;
   try
   {
       if(x>10)
           return 10;
   }catch(Exception e)
   {
   }
   finally{
       return 20;
   }
}
    public static void main(String[] args){
        System.out.println(fun());;
    }
}


该代码返回的值为20,并非10,说明了一点,无论什么情况,一点会执行finally,哪怕返回值时,也需要执行finally;


五.自定义异常类


用户定义的异常类都得继承Exception类,所以需要自定义时异常时,需要继承RuntimeException,且定义异常类时,需要提供2种构造函数:一种是无参数的构造函数,一种是带有一个字符串的构造函数。

1、自定义异常类继承Exception类代码:

public class MyException extends Exception {
    //异常信息
    private String message;
    //构造函数
    public MyException(String message){
        super(message);
        this.message = message;
    }

2.在要抛出异常的函数使用throws关键字

public class UseMyException {
    private String name;
    private String password;
    public UseMyException(String name,String password){
        this.name = name;
        this.password = password;
    }
    public void throwException(String password) throws MyException{
        if (!this.password.equals(password)){
            throw new MyException("密码不正确!");
        }
    }
}


3.测试,使用try-catch处理异常

public class TestException {
    @org.junit.Test
    public void test(){
        UseMyException ex = new UseMyException("admin","123");
        try{
            ex.throwException("1234");
        }catch (MyException me){
            System.out.println("MyException:"+me.getMessage());
        }
    }
}


以上便是自定义异常类的方法和步骤。


总结


异常处理主要用于之后的文件、打开网络地址、输入输出I/O等。                                 其次重要的是自定义异常类。慢慢看,一定一定要有耐心啊。


最后再介绍一个printStackTrace()方法,用处,在异常处理中用于catch块,可以输出代码哪行有问题。使用方法:异常类名的形参名.printStackTrace()。


目录
相关文章
|
27天前
|
Java 编译器
探索Java中的异常处理机制
【10月更文挑战第35天】在Java的世界中,异常是程序运行过程中不可避免的一部分。本文将通过通俗易懂的语言和生动的比喻,带你了解Java中的异常处理机制,包括异常的类型、如何捕获和处理异常,以及如何在代码中有效地利用异常处理来提升程序的健壮性。让我们一起走进Java的异常世界,学习如何优雅地面对和解决问题吧!
|
16天前
|
安全 Java 程序员
Java中的异常处理:从新手到专家
在Java编程的世界里,异常处理是每个开发者必须面对的挑战。本文将带你从基础的异常概念出发,逐步深入到高级处理技巧,让你在遇到代码中的“意外”时,能够从容应对,甚至化险为夷。
|
20天前
|
Java 数据库连接 开发者
Java中的异常处理:从基础到高级
【10月更文挑战第42天】在Java的世界中,异常处理是维护程序稳定性和健壮性的关键。本文将带你深入了解Java的异常处理机制,从基本的try-catch语句出发,逐步探索更复杂的异常处理策略。我们将通过实际代码示例来演示如何捕获和处理异常,以及如何自定义异常类型来满足特定需求。无论你是Java新手还是有经验的开发者,这篇文章都将帮助你更好地理解和应用Java的异常处理。
|
27天前
|
Java 开发者
Java中的异常处理:从基础到高级
【10月更文挑战第35天】在Java的世界里,异常处理是维护程序健壮性的关键。本文将深入浅出地探讨Java的异常处理机制,从基本的try-catch语句到自定义异常类的实现,带领读者理解并掌握如何在Java中优雅地处理错误和异常。我们将通过实际代码示例,展示如何捕获、处理以及预防潜在的运行时错误,确保程序即使在面临意外情况时也能保持稳定运行。
37 7
|
28天前
|
SQL 安全 Java
安全问题已经成为软件开发中不可忽视的重要议题。对于使用Java语言开发的应用程序来说,安全性更是至关重要
在当今网络环境下,Java应用的安全性至关重要。本文深入探讨了Java安全编程的最佳实践,包括代码审查、输入验证、输出编码、访问控制和加密技术等,帮助开发者构建安全可靠的应用。通过掌握相关技术和工具,开发者可以有效防范安全威胁,确保应用的安全性。
48 4
|
27天前
|
Java 数据库连接 开发者
Java中的异常处理机制及其最佳实践####
在本文中,我们将探讨Java编程语言中的异常处理机制。通过深入分析try-catch语句、throws关键字以及自定义异常的创建与使用,我们旨在揭示如何有效地管理和响应程序运行中的错误和异常情况。此外,本文还将讨论一些最佳实践,以帮助开发者编写更加健壮和易于维护的代码。 ####
|
1月前
|
Java
Java 异常处理下篇:11 个异常处理最佳实践
本文深入探讨了 Java 异常处理的最佳实践,包括早抛出晚捕获、只捕获可处理的异常、不要忽略捕获的异常、抛出具体检查性异常、正确包装自定义异常、记录或抛出异常但不同时执行、避免在 `finally` 块中抛出异常、避免使用异常进行流程控制、使用模板方法处理重复的 `try-catch`、尽量只抛出与方法相关的异常以及异常处理后清理资源。通过遵循这些实践,可以提高代码的健壮性和可维护性。
|
1月前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
49 2
|
1月前
|
Java 程序员 数据库连接
深入浅出Java异常处理
【10月更文挑战第30天】在Java的世界里,异常处理就像是生活中的急救箱,遇到意外时能及时救治。本文不仅教你如何使用try-catch语句包扎“伤口”,还会深入讲解如何通过自定义异常来应对那些常见的“头疼脑热”。准备好,我们将一起探索Java异常处理的奥秘,让你的程序更加健壮。
|
1月前
|
Java 数据库连接
深入浅出Java异常处理
【10月更文挑战第33天】在Java编程的海洋中,异常处理就像是救生圈,它不仅能够挽救程序于水深火热之中,还能让代码更加优雅地面对意外。本文将带你领略Java异常处理的魅力,从基础概念到高级技巧,让你的程序在遇到问题时能够从容不迫,优雅地解决问题。