当前位置: 首页 > news >正文

JAVA SE 基础语法 —— K / 认识异常

一、异常的概念与体系结构

(一)异常的概念

  1. 定义:程序执行过程中发生的不正常行为(如算术错误、数组越界、空指针等),Java 中每种异常均对应专属类描述
  2. 常见异常示例
    • 算术异常(ArithmeticException):如10 / 0
    • 数组越界异常(ArrayIndexOutOfBoundsException):如访问数组不存在的下标
    • 空指针异常(NullPointerException):如调用null对象的方法 / 属性

(二)异常的体系结构

  1. 顶层类Throwable,派生出两大核心子类:
    • Error:JVM 无法解决的严重问题(如StackOverflowError栈溢出、OutOfMemoryError内存溢出),程序无法恢复,直接终止
    • Exception:程序员可通过代码处理的异常,是日常开发中关注的核心,处理后程序可继续执行

(三)异常的分类

分类发生时机特点典型示例
编译时异常程序编译期间又称 “受检查异常”,必须显式处理(捕获或声明抛出),否则无法通过编译CloneNotSupportedException
运行时异常程序执行期间又称 “非受检查异常”,继承自RuntimeException,无需显式处理,默认交给 JVMNullPointerExceptionArithmeticException
  • 注意:编译期语法错误(如拼写错误)不属于异常,仅编译通过后 JVM 执行时的错误才是异常

二、异常的处理

(一)防御式编程思想

  1. LBYL(事前防御型):操作前充分检查(如判断登录、匹配等步骤是否成功),正常流程与错误处理代码混合,可读性差
  2. EAFP(事后认错型):先执行操作,遇到异常再处理,正常流程与错误流程分离,代码更清晰,是异常处理的核心思想

(二)异常的核心关键字

包括throw(抛出异常)、try(包裹可能异常的代码)、catch(捕获异常)、finally(必执行的收尾代码)、throws(声明异常)

(三)异常的抛出(throw)

  1. 语法throw new XXXException("异常原因");,需写在方法体内部
  2. 规则
    • 抛出对象必须是Exception或其子类
    • 抛出运行时异常(RuntimeException子类):无需显式处理,交给 JVM
    • 抛出编译时异常:必须显式处理(捕获或声明抛出),否则编译报错
    • 异常抛出后,后续代码不再执行

(四)异常的捕获

1. 异常声明(throws)

  1. 语法修饰符 返回值类型 方法名(参数列表) throws 异常类型1, 异常类型2...{ },写在方法参数列表后
  2. 作用:当前方法不处理异常,将异常抛给调用者处理(仅声明,未真正处理)
  3. 规则
    • 声明的异常需是Exception或其子类
    • 方法内部抛出多个异常时,throws后需列出所有异常;若异常有父子关系,仅声明父类即可
    • 调用声明异常的方法时,调用者必须处理异常(继续throwstry-catch

2. try-catch 捕获处理

  1. 语法

    plaintext

    try{// 可能异常的代码
    }catch(异常类型1 e){// 处理异常1
    }catch(异常类型2 e){// 处理异常2
    }finally{// 必执行的收尾代码
    }
    
  2. 核心逻辑
    • try:包裹可能抛出异常的代码,异常抛出后后续代码不执行
    • catch:按类型匹配异常,匹配成功则处理;多个catch需子类异常在前、父类异常在后,避免语法错误
    • finally:无论是否异常,均会执行,常用于资源回收(如关闭 IO 流、数据库连接)
  3. 异常处理方式
    • 打印异常信息:e.getMessage()(仅异常原因)、e.toString()(异常类型 + 原因)、e.printStackTrace()(完整调用栈,推荐)
    • 业务处理:严重异常可终止程序,轻微异常可记录日志,网络相关异常可重试

(五)异常的处理流程

  1. 执行try中的代码,若出现异常,终止try并匹配catch中的异常类型
  2. 匹配成功则执行对应catch的处理代码;未匹配则将异常向上传递给上层调用者
  3. 无论是否匹配,均执行finally中的代码(方法结束前执行)
  4. 若上层调用者仍未处理,继续向上传递,直至main方法;main方法未处理则交给 JVM,程序异常终止

三、自定义异常类

(一)自定义原因

Java 内置异常无法覆盖所有业务场景(如用户名错误、密码错误),需创建符合业务的异常类

(二)实现步骤

  1. 继承Exception(编译时异常,需显式处理)或RuntimeException(运行时异常,无需显式处理)
  2. 实现带String参数的构造方法,参数为异常原因(调用父类构造方法super(message)

(三)使用场景

如登录功能中,用户名错误抛出UserNameException,密码错误抛出PasswordException,明确区分业务异常类型,便于精准处理

 

http://www.dtcms.com/a/431267.html

相关文章:

  • 从 CefSharp 迁移至 DotNetBrowser
  • 地方旅游网站模板网站建设模式有哪些内容
  • 【Docker项目实战】使用Docker部署Hasty Paste粘贴应用程序
  • 7c框架 网站建设微信免费推广平台
  • GameObject 的 conditionID1 值在 PlayerCondition.db2 中找不到相应记录的问题原因分析
  • 西安百度网站建设优化大师免安装版
  • 计算机网络-协议层级及其服务模型
  • 长宁哪里有做网站优化比较好邵阳竞价网站建设设计
  • 动漫网站 设计宣传中心网站建设
  • cmake命令行工具介绍
  • 京东网站建设目标是什么做百度收录的网站
  • 怎么做虚拟币网站网站毕业设计一般做几个页面
  • 2D角色动画进阶:Spine网格变形与序列帧特效的混合工作流
  • 杭州建设企业网站修改数据库密码 进不了网站后台
  • OSPF Loading 状态 概念及题目
  • 绘制网站结构图宁波品牌网站设计
  • 硬件工程师核心技能体系(从基础到实战设计指南)
  • [MySQL] 初识数据库
  • Linux 问题排查
  • 西安seo网站设计公司用腾讯云做淘宝客网站视频下载
  • 房子已交房 建设局网站查不到wordpress开发登录插件
  • 河间申梦网站建设制作旅游网站系统源码
  • 2010 年真题配套词汇单词笔记(考研真相)
  • 微信怎么制作微电影网站店铺logo图片免费
  • TCP连接关闭的“礼貌告别“与“果断离场“:深入解析Linger选项
  • 印度做网站设计视频网站直播怎么做
  • 国外网站服务器wordpress 上传时发生了错误
  • Vim核心操作
  • 网站一级域名申请国内网站开发语言
  • Linux——自动化建构make/makefile