【Java异常】什么是异常,Java中如何处理异常?

在这里插入图片描述

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~
个人主页:.29.的博客
学习社区:进去逛一逛~

在这里插入图片描述

Java异常处理

    • 1. 了解异常:
    • 2. 异常处理
    • 3. 自定义异常
    • 4. finally块


1. 了解异常:

异常

  • 继承/实现 关系:
  • Java.lang.Throwable
    • Error
    • Exception —— 异常顶层父类
      • RuntimeException
      • 其他异常(编译时异常)

  • Error:代表系统级别错误(属严重问题),系统一旦出现问题,sun公司就会把这些错误封装成Error对象,Error是给sun公司自己使用,不是提供给开发者使用。
  • Exception:异常,代表程序可能出现问题,我们通常会用Exception以及他地子类来封装程序出现的问题(异常)。
  • 运行时异常:RuntimeException及其子类,编译阶段不会出现异常提醒。(如:NullPointerException、ArrayIndexOutOfBoundsException)
  • 编译时异常:除去RuntimeException及其子类,其余异常都是编译时异常,是编译阶段就会出现的异常,不解决,程序就无法编译运行。

作用

  • 异常是用于检查bug的关键参考消息。
  • 异常可以作为方法内部的一种特殊值返回,以便通知调用者底层的情况。



2. 异常处理

  • ①JVM默认处理方式:

    • 把异常名称,异常原因以及异常出现的位置等信息输出在了控制台。
    • 程序停止运行,下面的代码不会执行。
  • ②手动处理方式(捕获异常):

    • //捕获异常 使用方式:
      try{可能出现异常的代码;
      }catch(异常类型 变量名){异常处理代码;
      }
      
    • 好处:可以让程序继续往下执行,不会停止。

    • Throwable成员方法

      • public String getMessage():返回此throwable的详细信息字符串
      • public String toString():返回此throwable的简单描述
      • public void printStackTrace():把异常的错误信息输出在控制台
    • 注意

      • 若没有异常,catch块不执行。

      • 若存在多个异常,应该设置多个对应的catch块来捕获异常。

      • 有多个catch块时,若待捕获的异常存在继承关系,应当先捕获子类异常再捕获父类异常。

      • JDK7以后,可以在一个catch块中捕获多个异常,用|符号分隔。

      • try中遇到异常未被捕获,会使用JVM默认处理方式。

      • try中捕获到异常就直接跳转到catch块,try中后续代码不会执行。

  • ③抛出处理(抛出异常):

  • 1)throws

    • //使用:
      public void 方法名()throws 异常类名1,异常类名2...{...
      }
      
    • 注意:

      • 写在方法定义处,表示声明一个异常,告诉调用者使用此方法可能会有哪些异常。
      • 编译时异常必须要写,运行时异常可以不写。
  • 2)throw

    • //使用
      public void 方法(){throw new NullPointerException();
      }
      
    • 注意:

      • throw使用在方法内,会结束方法并手动抛出异常,使得后续代码不再被执行。



3. 自定义异常

自定义异常

  • 步骤

    • ①定义异常类

      • Exception作为异常类名的后缀,运行时异常类需继承RuntimeException,编译时异常需继承Exception
    • ②写继承关系

    • ③空参构造器

    • ④带参构造器

    • //①异常类名后缀Exception
      public class AgeOutOfBoundsException extends RuntimeException{ //②继承关系//③空参构造public AgeOutOfBoundsException(){}//④带参构造public AgeOutOfBoundsException(String message){super(message);}
      }
      
    • 遵循见名知意的原则,让控制台报错信息清晰明了,方便错误定位。




4. finally块

  • 特性:finally块中的代码一定会被执行,除非JVM退出。

  • 由于一定会被执行的特性,finally{}通常用作资源的释放。

  • //捕获异常 使用方式:
    try{可能出现异常的代码;
    }catch(异常类型 变量名){异常处理代码;
    }finally{//一定会被执行的代码
    }
    
  • 注意:当三个块中都出现了return语句,首先记录try{}中return的结果,出现异常时,还会记录catch{}中return的结果,最后记录finallu{}块中的结果,最终返回的是finallu{}块中的结果



在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/111753.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索未来的视觉革命:卷积神经网络的崭新时代(一)

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

unigui添加ssl(https)访问的方法

首先到腾讯云或者阿里云去申请免费的证书,前提是在该服务商那有申请过域名,怎么找出这个界面?网页顶部一般都有个搜索框,输入【证书】或者【SSL】就能看到了,然后点击申请免费证书,把解析信息填入自己的域名…

Allegro两种自动对齐方法

本法基于cadence的allegro可以在PCB设计运用,使用方法如下: 方式一:allegro软件的自动对齐——使用过程繁琐一点 1.在“setup”下拉选项中选择“application mode”,在副选项中选择“placement edit”; 2.在“Find”…

Mac电脑无法识别移动硬盘怎么办?

很多人都喜欢在Mac电脑上办公、学习,但有时我们将移动硬盘连接Mac电脑时,却会发现电脑无法识别移动硬盘。那么,Mac电脑无法识别移动硬盘怎么办呢? Mac无法识别移动硬盘的原因 导致Mac不识别移动硬盘的原因有很多,你可…

【Andriod】adb调试安卓手机时连接真机或模拟器的3种方法,你知道么?

一.adb是什么? adb 称之为:Android 调试桥 (Android Debug Bridge )是一种允许模拟器或已连接的 Android 设备进行通信的命令行工具,它可为各种设备操作提供便利,如安装和调试应用,并提供对 Un…

软考-网络安全体系与网络安全模型

本文为作者学习文章,按作者习惯写成,如有错误或需要追加内容请留言(不喜勿喷) 本文为追加文章,后期慢慢追加 by 2023年10月 网络安全体系相关安全模型 BLP机密性模型 BLP(Biba-格雷泽-麦克拉伦&#x…

centos 7.9离线安装wget

1.下载安装包 登录到wget官网上下载最新的wget的rpm安装包到本地 http://mirrors.163.com/centos/7/os/x86_64/Packages/ 2.上传安装包到服务器 3.安装 rpm -ivh wget-1.14-18.el7_6.1.x86_64.rpm 4.查看版本 wget -V

Cesium Vue(七)— GEOJSON数据展示

1. GeoJSON GeoJSON 是一种用于对各种地理数据结构进行编码的格式。 简而言之,GeoJSON为你提供了一种简单的格式来表示简单的地理特征以及它们的非空间属性。 结构: {"type": "Feature","geometry": {"type"…

uniapp——自定义组件插槽及使用

案例样式 自定义组件pageBox.vue <template><view><view class"bgColor" :style"{ height: bgHeight rpx }"></view><view class"main"><!-- 主要内容放这里 --><slot></slot></view>&…

taro使用defineConstants定义全局变量eslint报错该变量不存在

问题描述 在taro项目中使用defineConstants定义一些全局变量供业务代码中进行使用&#xff0c;全局变量声明config/index.js代码如下&#xff1a; module.exports {defineConstants: {LOGIN_URL: JSON.stringify(/baidu/login), },全局变量使用代码如下&#xff1a; /*** 跳…

【开源分享】基于Html开发的房贷计算器,模仿新浪财经

房贷计算器是一种房贷计算的在线计算Web应用&#xff0c;按用户选择的贷款类型、贷款金额、期限、利率可计算得出每月月供参考、支付利息、还款总额这些信息。本文模仿新浪财经开发的房贷计算器。 作品预览 https://fangdai.gitapp.cn 源码地址 https://github.com/geeeeeee…

NFTScan 支持非 EVM 公链的 NFT Collection 的认证功能

截止到 2023 年 10 月份&#xff0c;NFTScan 已经支持了 18 条区块链网络&#xff0c;其中有 14 条 是 EVM 兼容的区块链网络&#xff1a; Ethereum、BNBChain、Polygon、zkSync、Base、Linea、Arbitrum、Optimism、Avalanche、Fantom、PlatON、Cronos、Gnosis、Moonbeam。 另…

Qt消息对话框的使用

本文介绍Qt消息对话框的使用。 QMessageBox类是Qt编程中常用到的一个类&#xff0c;主要用来进行一些简单的消息提示&#xff0c;比如&#xff1a;问题对话框&#xff0c;信息对话框等&#xff0c;这些对话框都属于QMessageBox类的静态方法&#xff0c;使用起来比较简单&#…

Linux性能优化--性能追踪3:系统级迟缓(prelink)

12.0 概述 本章包含的例子说明了如何用Linux性能工具寻找并修复影响整个系统而不是某个应用程序的性能问题。阅读本章后&#xff0c;你将能够&#xff1a; 追踪是哪一个进程导致了系统速度的降低。用strace调查一个不受CPU限制的进程的性能表现。用strace调查一个应用程序是如…

华为云Stack的学习(十)

十一、华为云Stack容器服务介绍 1.云容器引擎服务CCE 云容器引擎&#xff08;Cloud Container Engine&#xff0c;CCE&#xff09;提供高度可扩展的、高性能的企业级Kubernetes集群&#xff0c;支持运行Docker容器。借助云容器引擎&#xff0c;可以在云上轻松部署、管理和扩展…

element-plus 表格-自定义样式实现2

<template><h2>表格修改样式利用属性修改</h2><h3>row-style 行样式</h3><h3>row-style header-row-style 不能改背景色</h3><h3>cell-style header-cell-style能改背景色</h3><el-tableref"tableRef":dat…

低调而无为而治,藏在超级应用背后的道家哲学

众所周知&#xff0c;Elon Musk 想将 Twitter 重新设计定位成一款“超级应用 - X”的野心已经不再是秘密。伴随着应用商店中 Twitter 标志性的蓝鸟 Logo 被 X 取代后&#xff0c;赛博世界充满了对这件事情各种角度的探讨与分析。 Musk 曾经无数次通过微信这一样本来推广他的“超…

【广州华锐互动】利用VR开展建筑塔吊安全操作学习的好处?

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术已经逐渐渗透到各个领域&#xff0c;为人们的生活带来了前所未有的便利。在工程教育领域&#xff0c;VR建筑塔吊安全操作学习作为一种新型的教学手段&#xff0c;正逐渐成为提高教学质量和培养高素质工程…

electron学习笔记

electron&#xff1a;大前端背景下&#xff0c;用node.js做桌面端app的工具 1、安装&#xff1a;npm i electron 实际上是chromium Node.js 2、创建一个窗口 3、主进程&#xff08;操作硬件等&#xff0c;commonJS&#xff09;与渲染进程&#xff08;渲染页面&#xff0c;E…

2023年中国OK镜市场发展前景分析:OK镜市场发展空间潜力巨大[图]

角膜接触镜是戴在眼角膜上的特殊镜片。角膜接触镜分为硬镜和软镜&#xff0c;软镜即大众常见的“隐形眼镜”&#xff1b;硬镜材质较硬&#xff0c;舒适度略低于软镜&#xff0c;硬镜主要分为OK镜、硬性角膜接触镜和巩膜镜三类。 角膜接触镜分类 资料来源&#xff1a;共研产业咨…