首页 > 编程语言 >Java基础学习(七)

Java基础学习(七)

时间:2025-01-12 18:59:59浏览次数:1  
标签:语句 try Java 抛出 捕获 基础 学习 异常

Java基础学习(七):异常机制

目录

本文为个人学习记录,内容学习自 狂神说Java


概念

异常指程序运行中出现的不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等

异常发生在程序运行期间,它影响了正常的程序执行流程


简单分类

异常 vs 错误

  • 异常(Exception)

    • 异常是开发者可以在程序中进行处理的(可以通过编写异常处理语句,在出现异常时进行处理以恢复程序的正常运行)

    • 检查性异常:在编译时由编译器强制检查的异常,开发者必须处理这些异常才能编译通过

    • 运行时异常:在编译时可以被忽略的异常,程序运行时才会出现

  • 错误(Error)

    • 错误是开发者无法在程序中进行处理的(错误发生时就无力回天了,只能避免错误的发生)
    • 当出现错误时,JVM 一般会直接终止线程

异常体系结构

  • Java 把异常当作对象来处理,并定义了一个基类 Java.lang.Throwable 作为所有异常的超类(即最顶层的类)

  • 在 Java API 中已经定义了许多异常类,这些异常类分成两大类 —— 错误和异常

  • 下图给出了一些常见错误Error和异常Exception,仅表示大体结构,例如 RuntimeException 和 ArrayIndexOutOfBoundsException 中间还省略了一些子/父类

    图7-1


异常处理机制

  • 抛出异常

    int a = 1;
    int b = 0;
    System.out.println(a/b);							// 由于0不能作为除数,程序会抛出异常
    =========================================================================================================
    输出结果:
    Exception in thread "main" java.lang.ArithmeticException: / by zero
    
  • 捕获异常

    可以通过 try-catch 语句捕获异常,从而使程序在有异常的情况下继续执行

    int a = 1;
    int b = 0;
    try {
        System.out.println(a/b);						// 将可能抛出异常的语句放入try修饰的代码块中
    }catch (ArithmeticException e){						// 指明想捕获的异常类型
        System.out.println("程序出现异常才会执行");			// 如果捕获到了指定异常会执行的语句,通常是处理语句
    }finally {											// finally代码块是可选项,无论是否捕获到异常都会执行
        System.out.println("无论如何都会执行");
    }
    System.out.println("继续执行");							// 就算存在异常,程序也会继续执行下去
    

    几点补充:

    1. 想捕获的异常类型也可以是具体异常类的父类,例如写 catch (Throwable e) 时能够捕获到其下所有的错误和异常
    2. catch 语句可以存在多个,类似于 else if 语句,从上往下执行当捕获到异常后就不会执行剩余的 catch 语句了
    3. 如果在 try 语句块内捕获到了指定异常,那么 try 语句块中的所有内容都不会被执行,就算是能正常执行的语句也不会被执行
  • 主动抛出异常

    注意:主动抛出异常后,剩余代码将不会继续执行,除非使用 try-catch 语句捕获异常(和程序自动抛出的异常同理)

    • 方法内抛出异常(使用 throw 关键字)

      throw new ArithmeticException();				// 主动抛出一个算术异常
      
    • 方法上抛出异常(使用 throws 关键字)

      下面这个例子中,其实不在方法上抛出异常也能在 main 方法中捕获到异常,方法上抛出异常的用法主要是在自定义异常中

      public static void main(String[] args) {
          int a = 1;
          int b = 0;
          try {
              test(a, b);
          } catch (ArithmeticException e) {
              System.out.println("");
          }
      }
      public static void test(int a, int b) throws ArithmeticException{		// 使用throws关键字指定异常类型
          System.out.println(a/b);
      }
      

自定义异常

  • 使用 Java 内置的异常类可以描述编程时出现的大部分异常情况
  • 用户自定义异常类,只需继承 Exception 类即可
  • 自定义异常类的步骤:
    1. 创建自定义异常类
    2. 在方法中通过 throw 关键字抛出异常对象
    3. 如果在当前抛出异常的方法中处理异常,可以使用 try-catch 语句捕获并处理,否则在方法的声明处通过 throws 关键字指明要抛出给方法调用者的异常类,交由方法调用者处理异常

标签:语句,try,Java,抛出,捕获,基础,学习,异常
From: https://www.cnblogs.com/victoria6013/p/18667172

相关文章

  • Super Fenwick 学习笔记
    她是谁(What)?超级树状数组(SuperFenwick或SuperBIT)是一种维护线性数据,支持区间修改,区间查询的数据结构,其中要求运算符满足结合律,可逆性。(例如异或,加法,乘法或非奇异的矩阵乘法)正如其名字,超级树状数组的本质是树状数组,因此,她也继承了树状数组的所有优点:码量小常数小空间小......
  • (免费送源码)计算机毕业设计原创定制:Java+springboot+MySQL springboot 第三方游戏账号
    摘要本论文主要论述了如何使用JAVA语言开发一个springboot第三方游戏账号交易平台,本系统将严格按照软件开发流程进行各个阶段的工作,采用springboot+vue.js相结合框架,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述第三方游戏账号交易平台的当前背景以及系统......
  • (免费送源码)计算机毕业设计原创定制:Java+ssm+MySQL 基于SSM的游戏论坛设计与实现
     摘 要本论文主要论述了如何使用SSM框架开发一个游戏论坛,将严格按照软件开发流程进行各个阶段的工作,采用B/S架构JAVA技术,面向对象编程思想进行项目开发。在引言中,作者将论述游戏论坛的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶段分析设计......
  • (免费送源码)计算机毕业设计原创定制:Java+springboot+MySQL 物流车辆管理系统的设计与实
     摘要由于数据库和数据仓库技术的快速发展,物流车辆管理系统建设越来越向模块化、智能化、自我服务和管理科学化的方向发展。物流车辆管理系统对处理对象和服务对象,自身的系统结构,处理能力,都将适应技术发展的要求发生重大的变化。物流车辆管理系统除了具有共享系统的全部功能......
  • SpringBoot基于Java的宠物援助平台的设计与实现
    1.引言在当今的软件开发领域,企业级应用的开发和部署速度直接影响着业务的竞争力。SpringBoot以其轻量级、快速启动和强大的集成能力,成为构建现代企业级应用的首选框架。本文将带您深入了解SpringBoot框架的核心特性,并展示如何利用它构建一个高效、可扩展的系统。2.开发......
  • 百万架构师第十六课:源码分析:Spring 源码分析:手写SpringAOP核心原理|JavaGuide
    已完成SpringIOCSpringDISpringMVC继续完善:SpringAOP的功能,基于SpringIOC和DI去完成未完成:SpringAOP、SpringTransaction、SpringJDBC、自己手写ORM框架。​SpringIOC入口,DispatcherServlet,通过DispatcherServlet启动一个ApplicationContext容......
  • JVM内存模型:Java的秘密引擎
    Java虚拟机(JVM)内存模型是Java程序性能优化和代码调优的核心。理解JVM内存模型对于编写高效、稳定的Java程序至关重要。1.1JVM内存模型概述JVM内存模型定义了Java程序中变量的存储位置以及变量在不同线程间可见性、访问权限等规则。它包括以下几个主要部分:方法区(MethodAr......
  • 性能分析工具:Java的秘密探测器
    Java性能分析工具是开发人员用于监控、分析和优化Java应用程序性能的必备工具。以下是一些常用的Java性能分析工具及其特点:1.JProfilerJProfiler是一款功能强大的Java性能分析和调优工具,它提供了深入分析Java应用程序的性能指标的能力,包括CPU分析、内存分析和线程分析。JPr......
  • 代码优化技巧:Java的秘密加速器
    代码优化是提升Java应用程序性能的关键环节。以下是一些有效的代码优化技巧,它们可以被视为Java的秘密加速器:1.选择合适的数据结构和算法选择合适的数据结构和算法对于优化Java性能至关重要。不同的数据结构和算法在时间和空间复杂度上存在差异,因此需要根据具体需求进行选择......
  • day14-Linux系统基础权限知识精讲
    1.给文件加特殊属性1.1chattra:只能追加内容,不能删除i:不能修改,不能删除;保护关键文件,防止非法写入[root@oldboy~]#chattr+atest.txt[root@oldboy~]#chattr+itest.txt[root@oldboy~]#echo123>>test.txt-bash:test.txt:权限不够[root@oldboy~]......