嗯嗯.......大佬给我看看我的代码呢,到底错哪里了?大佬走过来,一波骚操作,安排得巴巴适适的。走时撂下一句:哥仔建议你看一下控制台,那么简单的问题,记住异常信息就是你宝贵的财富。

try 用来指定一块预防所有“异常”的程序;

catch 子句紧跟在 try 块后面,用来指定你想要捕捉的“异常”的类型;

throw 语句用来明确地抛出一个“异常”;

throws 用来标明一个成员函数可能抛出的各种“异常”;

finally 为确保一段代码不管发生什么“异常”都被执行一段代码;

异常的基本概念

异常(Exception)是程序在执行过程中所产生的问题。

异常一般不应用在控制程序的正常流程,其主要作用是捕获程序在运行时发生的异常并进行相应处理。这也是Java语言健壮性和安全性的体现。

异常的默认处理方式:

JVM虚拟机处理异常: 在控制台上显示异常堆栈信息,程序结束。

异常该如何处理?

try {      可能产生异常的代码段} catch( 异常类型 e ) {     处理异常的代码段}

分几种情况:

1、如果没有异常产生, 执行try、finally中的代码。

2、如果产生异常, 跳过try中剩下的代码:

2.1 如果异常类型和catch匹配, 执行catch,程序恢复正常

2.2 如果异常类型和catch不匹配, 由JVM处理异常, 程序结束

3、如果有必须要执行的代码, 可以放在finally中

try {     可能产生异常的代码段} catch( 异常类型 e ) {     处理异常的代码段} finally{     //finally 为确保一段代码不管发生什么“异常”都被执行一段代码;一般应用于释放资源。}

特殊情况:

1、如果遇到了System.exit(), 程序直接退出, finally不执行。

2、如果在finally之前遇到return,保存return返回状态,先执行finally, 再执行return返回操作。

多路catch

可以使用多个catch块分别处理不同类型的异常

try {      可能产生异常的代码段} catch( 子类异常类型 e ) {      处理异常的代码段} catch( 父类异常类型 e ) {      处理异常的代码段}

注意: 子类异常在前, 父类异常在后。

异常调用方法四种处理方式

1、捕获这个异常,不让它沿着调用栈继续向下抛出;

2、捕获这个异常(抛出伪造),并继续向下抛出;

3、不捕获这个异常,从而导致方法从调用栈中被弹出,异常对象继续抛给调用栈下面的方法。

4、如果没有出现任何异常,就正常沿着调用栈执行代码。

异常类层次结构

Object

|-Throwable 所有错误和异常的根类

|-Error 错误(栈溢出、内存溢出....)

|-Exception异常2大类

|-RuntimeException 运行时异常

|-StringIndexOutOfBoundsException 字符串下标越界异常

|-ArrayIndexOutOfBoundsException 数组下标越界异常

|-NullPointerException 空指针异常

|-ClaassCastException 类型转换异常

|-NumberFormatException 数值转换异常

|-ArithemeticExptiion 数字计算异常

|-.......

|-CheckException 编译期受检异常(注意:CheckException类并不存在,只是概念上的)

|-ParseException 格式转换异常

|-ClassNotFoundException 没发现类异常

|-InterruptedException 中断异常

|-IOException IO异常

|-SQLException sql异常

|-.......

注意:

1、如果出现是RuntimeException运行时异常,可以捕获,也可以不捕获。如不捕获,将会沿着方法调用栈继续抛出去,直至遇到JVM(终止程序)为止。

2、如果出现是CheckException编译期受检异常,就必须try catch处理或者方法上throws继续向上抛。

throws关键字

throws的作用是声明一个方法可能产生异常, 这些异常可以由调用方进行处理

public void xxx( ) throws 异常的类型1,异常的类型2{        ...可能产生异常的代码...}调用方:try {      xxx();} catch(Exception e) {      e.printStackTrace();}

自定义异常

有时候, 为了让异常的类型名称更能贴切地表达出异常的含义, 需要自定义异常类型( 扩展JAVA预定义异常)自定义异常一般应用于方法返回类型无法表达的返回信息,就用异常方式抛出。

需要继承两大异常类:

RuntimeException(运行时异常)

Exception(编译期受检异常)

public class AccountLockException extends Exception{//运行时异常extends RuntimeException        public AccountLockException(String string) {                super(string);        }}
public BigDecimal queryBalance(String accoutNo) throws AccountLockException{for (int i = 0; i < Db.accs.length; i++) {if(Db.accs[i].getAccountNo().equals("2020081702")){//2020081702被冻结了throw new AccountLockException("此账户已被冻结");          }if(Db.accs[i].getAccountNo().equals(accoutNo)){//账号匹配return Db.accs[i].getAccountBalance();          }     }return null;   }

classnotfoundexception是什么异常_大佬说“异常信息”是优秀程序员编写代码的宝贵财富,这是真的吗...相关推荐

  1. classcastexception异常_内部类、异常以及 LeetCode 每日一题

    1 内部类 内部类的作用: 内部类提供了更好的封装,可以把内部类隐藏于外部类之内,不允许同一个包中的其他类访问该类.(例如给"牛"这个类组合一个"牛腿",则可以 ...

  2. numberformatexception是什么异常_处理Java异常的9个最佳实践

    Java中的异常处理不是一个简单的主题.初学者发现很难理解,甚至有经验的开发人员也可以花几个小时讨论如何以及应该抛出或处理哪些异常. 这就是为什么大多数开发团队都有自己的如何使用它们的规则.如果你是一 ...

  3. java编译异常和运行时异常_浅谈异常结构图、编译期异常和运行期异常的区别...

    异常处理一般有2种方式,要么捕获异常try-catch,要么抛出异常throws 如果一个方法后面抛出一个运行时期异常(throws RuntimeException),调用者无须处理 如果一个方法后 ...

  4. java匿名对象赋初值_不想进BAT的Java程序员不是好程序员,BAT后端Java岗面试真题分享

    一. JDK/JRE/JVM 三者之间的联系与区别 JDK:开发者提供的开发工具箱,是给程序开发者用的.它包括完整的JRE(Java Runtime Environment),Java运行环境,还包含 ...

  5. java浪漫代码_程序员表白代码,用过的人都找到了对象...

    在情人节送给自己的女朋友玫瑰花, 对于程序员来说是不是太普通了呢? 为什么不试试让情人节变得更特别一些呢? 作为一名程序员, 可以用自己的技术创造出不一样的浪漫! 让你的女朋友眼前一亮,印象深刻. 这 ...

  6. 做程序员必须懂英语吗?_您必须懂英语才能成为程序员吗?

    做程序员必须懂英语吗? An interesting comment thread broke out in a recent post on Using Crowdsourcing for Expa ...

  7. Java中合法的关键词_优秀程序员必须掌握的java中50个关键字

    关键字和保留字的区别 正确识别java语言的关键字(keyword)和保留字(reserved word)是十分重要的.Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或者表 ...

  8. python转行 知乎_黄哥Python提醒:转行当程序员修炼之路

    1.转行当程序员,一定要培训自己的兴趣和爱好,不能只看着程序员工资高. 如果叶公好龙,是转行不成功的,只能是当"炮灰". 黄哥谈转行当程序员黄哥谈转行当程序员_哔哩哔哩 (゜-゜) ...

  9. java斗图表情_程序员之间的斗图表情包, java真的输惨了!

    表情包成了人与人聊天中不可少的分量,陌生人聊天表情包丢出去妥妥的拉近关系变熟络啊(¬_¬) 而且可以用表情包化解尴尬.缓解气氛,可以没话找话.忙的时候也可以当做结束语,显得比较有礼貌! 对于沉默寡言. ...

最新文章

  1. Scrapy_redis框架原理分析并实现断点续爬以及分布式爬虫
  2. 笔试训练第三次知识点汇总
  3. 计算机缓存Cache机制理解
  4. java exception 乱码_java 常见中文乱码问题解决
  5. 全面 Severless 化只需要 7天!
  6. Atlas学习手记(9):异步调用Page Method
  7. 产品型号 计算机硬件,主流CPU产品型号后缀名详解_CPUCPU评测-中关村在线
  8. puppet系列之nginx+php日志切割与salt结合使用
  9. 自定义Visual Studio 2010 快捷键
  10. SpringBoot 整合Shiro实现动态权限加载更新+Session共享+单点登录
  11. Myrrix——基于Mahout的开源推荐系统
  12. 15K薪资轻松到手,要低调~
  13. 将阿拉伯数字转换为语文汉字数字
  14. WPF的DataGrid的某个列绑定数据的三种方法(Binding、Converter、DataTrigger)
  15. 完美解决Sudo doesn‘t work: “/etc/sudoers is owned by uid 1000, should be 0”
  16. Drug Target Review | 人工智能(AI)在基因组学中的作用
  17. Android自定义半圆进度条 半圆渐变色进度条带指示 半圆开口大小可自由修改
  18. 快速引导滤波python-opencv
  19. 【杂篇 · 技巧】WebStorm页面窗口与显示bug
  20. 三极管和MOS管的使用及区别

热门文章

  1. F10-MYSQL的yum源码
  2. 解决Win10中WerFault错误报告问题
  3. 计算几何-Andrew法-凸包
  4. 【编译原理笔记17】代码优化:数据流分析,到达定值分析,到达定值方程的计算
  5. 【李宏毅2020 ML/DL】P51 Network Compression - Knowledge Distillation | 知识蒸馏两大流派
  6. pro*c添加SQLCHECK后编译报错PLS-S-00201
  7. 【操作系统/OS笔记03】启动、中断、异常和系统调用
  8. vue.js环境部署
  9. python坐标系 向量分量_关于Python中的向量相加和numpy中的向量相加效率对比
  10. JavaScript 实现:输出斐波那契数列