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

Android java基础_异常

一.异常的概念

在Java中,异常(Exception)是指程序执行过程中可能出现的不正常情况或错误。它是一个事件,它会干扰程序的正常执行流程,并可能导致程序出现错误或崩溃。

异常在Java中是以对象的形式表示的,这些对象是从java.lang.Throwable类或其子类派生而来。Throwable是异常类层次结构的根类,它有两个主要的子类:java.lang.Exception和java.lang.Error。

Exception(异常):java.lang.Exception是表示可检查异常的基类。可检查异常是指在编译时需要显式处理的异常。Exception类及其子类用于表示程序运行过程中可能出现的外部条件、错误或其他可恢复的情况。例如,文件未找到、网络连接中断、输入格式错误等。开发人员需要通过捕获或声明这些异常来确保在程序中进行适当的异常处理。

Error(错误):java.lang.Error是表示严重问题或系统级错误的基类。错误是指那些程序通常无法处理或恢复的情况,例如内存溢出、堆栈溢出、虚拟机错误等。与异常不同,错误不需要在程序中显式处理,因为它们通常表示了无法解决的问题。

异常在Java中通过抛出(throw)和捕获(catch)的方式进行处理。当程序执行到可能引发异常的代码时,可以使用throw语句手动抛出异常对象。然后,可以使用try-catch语句块来捕获异常,并在catch块中提供相应的异常处理逻辑。在catch块中,可以根据异常的类型执行适当的操作,如日志记录、错误报告或异常处理。如果异常没有在当前方法中被捕获处理,它将继续向上级调用栈传播,直到找到合适的异常处理代码或导致程序终止。

二.未进行异常处理

未进行异常处理的程序:

/* java Div 6 2* 6/2=3*/public class Div {public static void main(String args[]) {int m = Integer.parseInt(args[0]);int n = Integer.parseInt(args[1]);System.out.println("Begin of div");int r = div(m, n);System.out.println("End of div");System.out.println(m+"/"+n+"="+r);}public static int div(int m, int n) {int r = m / n;return r;}
}

没有进行异常处理,编译运行结果: 程序退出

root@ubuntu:/home/topeet/guyilian# javac Div.java 
root@ubuntu:/home/topeet/guyilian# java Div 6 3
Begin of div
End of div
6/3=2
root@ubuntu:/home/topeet/guyilian# java Div 6 0
Begin of div
Exception in thread "main" java.lang.ArithmeticException: / by zeroat Div.div(Div.java:22)at Div.main(Div.java:14)
root@ubuntu:/home/topeet/guyilian# 

三.异常处理

使用try-catch语句进行异常处理:

/* java Div 6 2* 6/2=3*/public class Div2 {public static void main(String args[]) {int m = Integer.parseInt(args[0]);int n = Integer.parseInt(args[1]);System.out.println("Begin of div");int r = div(m, n);System.out.println("End of div");System.out.println(m+"/"+n+"="+r);}public static int div(int m, int n) {int r = 0;try {r = m / n;} catch (ArithmeticException e) {System.out.println(e);} finally {System.out.println("this is finally of div");}return r;}
}
root@ubuntu:/home/topeet/guyilian# javac Div2.java 
root@ubuntu:/home/topeet/guyilian# java Div2 6 3
Begin of div
this is finally of div
End of div
6/3=2
root@ubuntu:/home/topeet/guyilian# java Div2 6 0
Begin of div
java.lang.ArithmeticException: / by zero
this is finally of div
End of div
6/0=0

使用抛出(throw)处理异常:

/* java Div 6 2* 6/2=3*/public class Div4 {public static void main(String args[]) {int m = Integer.parseInt(args[0]);int n = Integer.parseInt(args[1]);int r = 0;System.out.println("Begin of div");try {r = div(m, n);} catch (ArithmeticException e) {System.out.println(e);}System.out.println("End of div");System.out.println(m+"/"+n+"="+r);}public static int div(int m, int n) throws ArithmeticException {int r = 0;r = m / n;return r;}
}

运行结果: 

root@ubuntu:/home/topeet/guyilian# javac Div4.java 
root@ubuntu:/home/topeet/guyilian# java Div4 6 3
Begin of div
End of div
6/3=2
root@ubuntu:/home/topeet/guyilian# java Div4 6 0
Begin of div
java.lang.ArithmeticException: / by zero
End of div
6/0=0

可以有多个catch语句捕获不同的异常:

/* java Div 6 2* 6/2=3*/public class Div7 {public static void main(String args[]) {int m = 0;int n = 0;int r = 0;System.out.println("Begin of div");try {m = Integer.parseInt(args[0]);n = Integer.parseInt(args[1]);r = div(m, n);} catch (ArithmeticException e) {System.out.println("main :"+e);} catch (NumberFormatException e) {System.out.println("main :"+e);} catch (RuntimeException e) {System.out.println("main :"+e);}System.out.println("End of div");System.out.println(m+"/"+n+"="+r);}public static int div(int m, int n) throws ArithmeticException {int r = 0;try {r = m / n;} catch (ArithmeticException e) {System.out.println("div :"+e);throw e;}return r;}
}

运行: 

root@ubuntu:/home/topeet/guyilian# javac Div7.java 
root@ubuntu:/home/topeet/guyilian# java Div7 6 2
Begin of div
End of div
6/2=3
root@ubuntu:/home/topeet/guyilian# java Div7 6 0
Begin of div
div :java.lang.ArithmeticException: / by zero
main :java.lang.ArithmeticException: / by zero
End of div
6/0=0

相关文章:

Android java基础_异常

一.异常的概念 在Java中,异常(Exception)是指程序执行过程中可能出现的不正常情况或错误。它是一个事件,它会干扰程序的正常执行流程,并可能导致程序出现错误或崩溃。 异常在Java中是以对象的形式表示的,…...

高数考研 -- 公式总结(更新中)

1. 两个重要极限 (1) lim ⁡ x → 0 sin ⁡ x x 1 \lim _{x \rightarrow 0} \frac{\sin x}{x}1 limx→0​xsinx​1, 推广形式 lim ⁡ f ( x ) → 0 sin ⁡ f ( x ) f ( x ) 1 \lim _{f(x) \rightarrow 0} \frac{\sin f(x)}{f(x)}1 limf(x)→0​f(x)sinf(x)​1. (2) lim ⁡…...

详解顺序结构滑动窗口处理算法

🎀个人主页: https://zhangxiaoshu.blog.csdn.net 📢欢迎大家:关注🔍点赞👍评论📝收藏⭐️,如有错误敬请指正! 💕未来很长,值得我们全力奔赴更美好的生活&…...

Java 8中使用Stream来操作集合

Java 8中使用Stream来操作集合 在Java 8中,你可以使用Stream API来操作集合,这使得集合的处理变得更加简洁和函数式。Stream API提供了一系列的中间操作(intermediate operations)和终端操作(terminal operations&…...

MATLAB环境下一种改进的瞬时频率(IF)估计方法

相对于频率成分单一、周期性强的平稳信号来说,具有非平稳、非周期、非可积特性的非平稳信号更普遍地存在于自然界中。调频信号作为非平稳信号的一种,由于其频率时变、距离分辨率高、截获率低等特性,被广泛应用于雷达、地震勘测等领域。调频信…...

解决:selenium web browser 的版本适配问题

文章目录 解决方案:使用 webdriver manager 自动适配驱动 使用 selenium 操控浏览器的时候报错: The chromedriver version (114.0.5735.90) detected in PATH at /opt/homebrew/bin/chromedriver might not be compatible with the detected chrome ve…...

pytest.param作为pytest.mark.parametrize的参数进行调用

pytest.param:在 pytest.mark.parametrize 中可以作为一个指定的参数进行调用 获取数据库(网页端)数据,通过pytest.param包装成数据包用于pytest.mark.parametrize 中实现数据驱动调用。 import os import pytest import json fr…...

如何判断一个元素是否在可视区域中?

文章目录 一、用途二、实现方式offsetTop、scrollTopgetBoundingClientRectIntersection Observer创建观察者传入被观察者 三、案例分析参考文献 一、用途 可视区域即我们浏览网页的设备肉眼可见的区域,如下图 在日常开发中,我们经常需要判断目标元素是…...

Go Run - Go 语言中的简洁指令

原文:breadchris - 2024.02.21 也许听起来有些傻,但go run是我最喜欢的 Go 语言特性。想要运行你的代码?只需go run main.go。它是如此简单,我可以告诉母亲这个命令,她会立即理解。就像 Go 语言的大部分功能一样&…...

Spring全面精简总结

Spring两大核心功能:IOC控制反转、AOP面向切面的编程 控制反转(loC,Inversion of Control),是一个概念,是一种思想。指将传统上由程序代码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理。控制反转就是…...

低代码开发如何助力数字化企业管理系统平台构建

随着数字化时代的到来,企业对于管理系统的需求日益增长。高效的管理系统可以提高企业的运作效率,降低成本,提升竞争力。然而,传统的开发方式在应对日益复杂的管理系统需求时,显得力不从心。低代码开发作为一种新兴的开…...

ElasticSearch之零碎知识点

写在前面 本文记录es的零碎知识点,包括但不限于概念,集群方式,等。 1:词项查询 VS 全文查询 词项查询:查询的内容不做分词处理,输入的什么查询什么。 全文查询:查询的内容会做分词处理&…...

【春运抢票攻略浅析】

参考 最全12306放票规则,抢票策略,候补作用2023年12306抢票攻略(纯技巧) 研究放票规则,候补的时候车次进行一下挑选,能够买长乘短的尽量买长,不要候补一些区间票吧,这是一开始放票…...

【Java EE初阶二十五】简单的表白墙(一)

1. 前端部分 1.1 前端代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"wid…...

人工智能的新浪潮:探索OpenAI的Sora视频模型及其对未来创作的影响

OpenAI的最新AI视频模型Sora&#xff0c;自发布以来&#xff0c;已成为科技界的热点。Sora的核心能力在于将文本描述转化为高清视频片段&#xff0c;标志着在视频生成领域的一次重大突破。Sora的特点包括使用深度理解语言的能力来准确解释提示&#xff0c;以及生成表达丰富情感…...

【c语言】字符函数和字符串函数(上)

前言 在编程的过程中&#xff0c;我们经常要处理字符和字符串&#xff0c;为了⽅便操作字符和字符串&#xff0c;C语⾔标准库中提供了⼀系列库函数~ 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 前言 1. 字符分…...

React18源码: schedule任务调度messageChannel

React调度原理(scheduler) 在React运行时中&#xff0c;调度中心&#xff08;位于scheduler包&#xff09;是整个React运行时的中枢&#xff08;其实是心脏&#xff09;&#xff0c;所以理解了scheduler调度&#xff0c;就基本掌握了React的核心React两大循环&#xff1a;从宏…...

Jmeter 学习目录

Jmeter 所有内容均以学习为主输出内容&#xff0c;按照最小单位和基础进行输出。 如果有看不懂&#xff0c;或者有不明确的内容&#xff0c;欢迎大家留言说明。 Jmeter系列&#xff08;1&#xff09;Mac Jmeter下载安装启动 Jmeter系列&#xff08;2&#xff09;Jmeter 目录介…...

计算机网络 数据链路层课后题

1.以太网帧有哪些不同的封装格式&#xff1f;他们有何区别和应用场景&#xff1f; 以太网II封装&#xff08;Ethernet II&#xff09;&#xff1a;以太网II封装是最常用的以太网封装格式&#xff0c;也被称为DIX封装。它在数据链路层首部使用6个字节的目的MAC地址和6个字节的源…...

实现验证码功能

Kaptcha 文章目录 Kaptcha介绍插件使用介绍原理引入依赖生成验证码 验证码小项目初始化前端代码约定前后端交互接口接口定义 介绍 Kaptcha 是Google的⼀个⾼度可配置的实⽤验证码⽣成⼯具 https://code.google.com/archive/p/kaptcha ⽹上有很多⼈甚⾄公司基于Google的kaptc…...

ARMv8-A开发实战:DC IVAC指令详解,手把手教你正确清理数据缓存

ARMv8-A开发实战&#xff1a;DC IVAC指令深度解析与缓存一致性实战指南 在嵌入式系统开发中&#xff0c;缓存一致性问题是导致许多"幽灵bug"的罪魁祸首。当DMA控制器直接操作内存而处理器核心毫不知情&#xff0c;或者当多个核心共享同一块内存区域时&#xff0c;缓存…...

别再让图片拖慢你的Unity项目!手把手教你用AssetPostprocessor搞定尺寸与压缩

Unity项目性能优化&#xff1a;智能图片处理全攻略 1. 为什么图片处理对Unity项目至关重要 在Unity开发过程中&#xff0c;图片资源往往是项目体积膨胀的罪魁祸首。一个中型项目可能包含数千张纹理&#xff0c;如果不加控制&#xff0c;这些资源会迅速吞噬内存和存储空间。更糟…...

告别照片管理烦恼:ExifToolGUI帮你3步搞定批量元数据处理

告别照片管理烦恼&#xff1a;ExifToolGUI帮你3步搞定批量元数据处理 【免费下载链接】ExifToolGui A GUI for ExifTool 项目地址: https://gitcode.com/gh_mirrors/ex/ExifToolGui 你是否曾为数百张旅行照片的整理而头疼&#xff1f;拍摄时间需要统一调整&#xff0c;版…...

告别串口助手:用STM32CubeIDE和HAL库,手把手教你打造自己的IAP上位机(附源码)

从零构建STM32 IAP上位机&#xff1a;C#实战与协议解析全指南 在嵌入式开发中&#xff0c;IAP&#xff08;In Application Programming&#xff09;技术为设备固件升级提供了极大便利&#xff0c;但一个稳定可靠的上位机软件往往是整个流程中最薄弱的环节。市面上通用的串口助手…...

如何在5分钟内配置鸣潮自动化助手,实现多账号高效管理?

如何在5分钟内配置鸣潮自动化助手&#xff0c;实现多账号高效管理&#xff1f; 【免费下载链接】better-wuthering-waves &#x1f30a;更好的鸣潮 - 后台自动剧情 项目地址: https://gitcode.com/gh_mirrors/be/better-wuthering-waves 厌倦了《鸣潮》中重复的剧情对话…...

MediaCreationTool.bat:革命性的Windows自动化部署解决方案

MediaCreationTool.bat&#xff1a;革命性的Windows自动化部署解决方案 【免费下载链接】MediaCreationTool.bat Universal MCT wrapper script for all Windows 10/11 versions from 1507 to 21H2! 项目地址: https://gitcode.com/gh_mirrors/me/MediaCreationTool.bat …...

3分钟掌握Mem Reduct:Windows系统内存清理的终极解决方案

3分钟掌握Mem Reduct&#xff1a;Windows系统内存清理的终极解决方案 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memreduct …...

观察Taotoken用量看板如何帮助团队透明化管理API成本

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 观察Taotoken用量看板如何帮助团队透明化管理API成本 作为团队的技术负责人&#xff0c;管理大模型API成本是一项持续且细致的工作…...

计算内存(CIM)技术解析与AI硬件加速实践

1. 计算内存&#xff08;CIM&#xff09;技术解析&#xff1a;突破传统架构的能效瓶颈 在AI硬件加速领域&#xff0c;计算内存&#xff08;Compute-in-Memory, CIM&#xff09;正引发一场架构革命。传统冯诺依曼架构中"内存墙"问题已成为制约AI计算效率的主要瓶颈——…...

AI安全自动化测试:FuzzyAI模糊测试框架实战指南

1. 项目概述&#xff1a;当AI安全遇上自动化“模糊测试” 在大型语言模型&#xff08;LLM&#xff09;如ChatGPT、Claude、Gemini等日益普及的今天&#xff0c;我们享受其强大能力的同时&#xff0c;也面临着一个严峻的挑战&#xff1a;如何确保它们的安全与可控&#xff1f;你…...