news 2026/6/1 19:32:12

【java】一文带你了解异常处理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【java】一文带你了解异常处理

异常

文章目录

  • 异常
    • try-catch-finally
    • 函数名声明时抛出
    • 自定义异常类
      • 关于自定义对象的输出信息

异常分为两种,一种编译时异常,是一定要进行处理的,不然编译都不会过,一种是运行时异常,比如索引越界,算术异常,空指针异常等,这种在编译的时候不会报错,而是在运行到这行代码才会报错。

一种是在函数内部进行处理,用try-catch或者try-catch-finally来处理。

处理异常的方法也有两种,一种是在函数声明的时候抛出,然后由函数调用者进行异常处理。

try-catch-finally

publicclassException{publicstaticvoidmain(String[]args){try{intresult=divide(4,0);System.out.println(result);}catch(ArithmeticExceptione){System.out.println("算术异常:"+e.getMessage());//System.exit(0);}finally{System.out.println("除了jvm关闭以外一定会处理的finally");}System.out.println("try catch 外");}publicstaticintdivide(intx,inty){intresult=x/y;returnresult;}}

运行结果

System.exit(0): 算术异常:/by zero 除了jvm关闭以外一定会处理的finallytrycatch外 有System.exit(0);算术异常:/by zero

函数名声明时抛出

在函数声明抛出,没有进行处理,则程序在检测到异常的时候直接抛出然后不进行后面代码

publicclassException{publicstaticvoidmain(String[]args){intresult=divide(4,0);System.out.println(result);System.out.println("divide 后的代码");}publicstaticintdivide(intx,inty)throwsArithmeticException{intresult=x/y;returnresult;}}//结果Exceptionin thread"main"java.lang.ArithmeticException:/by zero atException.divide(Exception.java:23)atException.main(Exception.java:17)

在函数声明抛出,在调用处处理,程序在抛出异常后仍然会进行下面的代码

publicclassException{publicstaticvoidmain(String[]args){try{intresult=divide(4,0);System.out.println(result);System.out.println("divide 后的代码");}catch(ArithmeticExceptione){System.out.println("异常:"+e.getMessage());}System.out.println("try-catch后面的代码");}publicstaticintdivide(intx,inty)throwsArithmeticException{intresult=x/y;returnresult;}}//结果异常:/by zerotry-catch后面的代码

自定义异常类

classDivideByMinusExceptionextendsException{//无参构造publicDivideByMinusException(){super();}//有参构造publicDivideByMinusException(Stringmessage){super(message);}}publicclassmyException{publicstaticvoidmain(String[]args){intresult=0;try{result=divide(4,-1);System.out.println(result);}catch(DivideByMinusExceptione){System.out.println(e.getMessage());}}//抛出异常publicstaticintdivide(intx,inty)throwsDivideByMinusException{if(y<0){//自定义异常信息//这个自定义异常信息就是构造一个新对象把值传进去,只要传递对的参数进去就行。thrownewDivideByMinusException("除数是负数");}elseif(y==0){thrownewDivideByMinusException("除数是零");}returnx/y;}}结果//result=divide(4,-1)除数是负数//result=divide(4,0);除数是零//result=divide(4,1);4

关于自定义对象的输出信息

来自菜鸟教程//自定义异常类,继承Exception类publicclassInsufficientFundsExceptionextendsException{//此处的amount用来储存当出现异常(取出钱多于余额时)所缺乏的钱privatedoubleamount;//need传递到这里来(need在下面异常处理里)publicInsufficientFundsException(doubleamount){this.amount=amount;}//使用提示信息的时候就用e.getAmount来获取需要的金额publicdoublegetAmount(){returnamount;}}// 文件名称 CheckingAccount.javaimportjava.io.*;//此类模拟银行账户publicclassCheckingAccount{//balance为余额,number为卡号privatedoublebalance;privateintnumber;publicCheckingAccount(intnumber){this.number=number;}//方法:存钱publicvoiddeposit(doubleamount){balance+=amount;}//方法:取钱publicvoidwithdraw(doubleamount)throwsInsufficientFundsException{if(amount<=balance){balance-=amount;}else{doubleneeds=amount-balance;//这里的need传进去创建对象thrownewInsufficientFundsException(needs);}}//方法:返回余额publicdoublegetBalance(){returnbalance;}//方法:返回卡号publicintgetNumber(){returnnumber;}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/1 19:25:55

LED创意电路制作:从并联原理到钢铁侠发光画实战

1. 项目概述与核心思路最近在整理工作室时&#xff0c;翻出了几年前带学生做的一个小项目&#xff0c;觉得挺有意思&#xff0c;决定拿出来和大家聊聊。这个项目的核心&#xff0c;就是把最基础的电子元件——LED&#xff0c;和一个手绘的钢铁侠画作结合起来&#xff0c;让静态…

作者头像 李华
网站建设 2026/6/1 19:21:55

UI-TARS桌面应用技术深度解析:视觉语言模型的GUI自动化革命

UI-TARS桌面应用技术深度解析&#xff1a;视觉语言模型的GUI自动化革命 【免费下载链接】UI-TARS-desktop The Open-Source Multimodal AI Agent Stack: Connecting Cutting-Edge AI Models and Agent Infra 项目地址: https://gitcode.com/GitHub_Trending/ui/UI-TARS-deskt…

作者头像 李华
网站建设 2026/6/1 19:16:49

ZLToolKit 源码分析(二):线程同步原语 semaphore 与 onceToken

高并发框架的基石是同步原语。本文逐行分析 ZLToolKit 自研的 semaphore(信号量)和 onceToken(RAII 守卫),揭示其如何用 C++11 标准库实现高效且安全的线程同步。 1. 为什么不用 std::semaphore? C++20 才引入 std::counting_semaphore,而 ZLToolKit 基于 C++11 开发,…

作者头像 李华