热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Lesson09异常

异常要理解Java异常处理是如何工作的,需要掌握一下三种异常类型:检查性异常:最具代表性的检查性异常是用户错误或问题引起的异常ÿ
异常

要理解Java异常处理是如何工作的,需要掌握一下三种异常类型:

  • 检查性异常:最具代表性的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的,例如打开一个不存在的文件夹,一个异常就这样诞生了,这种异常在编译的时候不能被简单地忽略掉。

  • 运行时异常:运行时异常可能是被程序员避免的异常,可以在编译过程中被忽略。

  • 错误Error:错误不是异常,而是脱离程序员控制的问题,且错误在代码中通常被忽略。

Java把异常当做一个对象处理,并定义一个基类java.lang.Throwable作为所有异常的超类,Java的API中定义了很多异常,大概分为两类,分别为Exception和Error。

在IDEA中,使用快捷键Ctrl+Alt+T可以快捷生成try/catch代码块。

try/catch、finally

public class ExceptionDemo01 {public static void main(String[] args) {int a = 0;int b = 1;//当需要用到多个catch来捕获多个异常的时候,捕获异常的范围应该从小到大递进try { //try检查区域System.out.println(b/a);} catch (ArithmeticException e) { //catch捕获区域System.out.println("被除数不能为零");e.printStackTrace(); //打印错误的栈信息} catch (Exception e) {System.out.println("Exception");} catch (Throwable e) {System.out.println("Throwable");} finally { //finally代码块必定会执行,一般用于处理善后工作System.out.println("finally"); }}
}

throw/throws

public class ExceptionDemo02 {public static void main(String[] args) {try {new ExceptionDemo02().add(1,0);} catch (Exception e) {e.printStackTrace();}}//当前方法无法处理该异常的时候,可以向上抛出异常public void add(int a, int b) throws Exception {if (b == 0) {throw new Exception("除数不能为零"); //主动抛出异常,一般在方法内使用}System.out.println(a/b);}
}

自定义异常

使用Java内置的异常类可以描述在编程时出现的大部分异常情况,除此之外,用户还可以自定义异常,只需要继承异常类即可。

自定义异常大体分为以下几个步骤:

  1. 创建自定义异常类
  2. 在方法中通过throw关键字抛出异常对象
  3. 如果在当前抛出异常的方法中处理异常,可以使用try/catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作
  4. 在出现异常方法的调用者中捕获并处理异常

//自定义异常类
public class MyException extends Exception {private int details;public MyException(int details) {this.details = details;}@Overridepublic String toString() {return "{" +"details=" + details +'}';}
}

//测试类
public class MyExceptionTest {static void test(int a) throws MyException {if (a > 10) {throw new MyException(a);} else {System.out.println("pass");}}public static void main(String[] args) {try {test(11);} catch (MyException e) {System.out.println("MyException==>" + e);}}
}

异常在实际应用时须注意:

  • 处理运行时异常,采用逻辑去合理规避同时辅助try/catch处理
  • 在多重catch块后面,可以加一个catch(Exception)来处理可能会被遗漏的异常
  • 对于不确定的代码,也可以加上try/catch来处理潜在的异常
  • 尽量去处理异常,切忌简单地调用printStackTrace()来打印输出
  • 尽量添加finally语句块去释放占用的资源

推荐阅读
  • 为了解决不同服务器间共享图片的需求,我们最初考虑建立一个FTP图片服务器。然而,考虑到项目是一个简单的CMS系统,为了简化流程,团队决定探索七牛云存储的解决方案。本文将详细介绍使用七牛云存储的过程和心得。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • 掌握Mosek矩阵运算,轻松应对优化挑战
    本篇文章继续深入探讨Mosek学习笔记系列,特别是矩阵运算部分,这对于优化问题的解决至关重要。通过本文,您将了解到如何高效地使用Mosek进行矩阵初始化、线性代数运算及约束域的设定。 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • 由二叉树到贪心算法
    二叉树很重要树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。单就面试而言,在 ... [详细]
  • 本文探讨了在iOS平台上开发BLE(蓝牙低功耗)应用程序时遇到的挑战,特别是如何实现应用在后台模式下仍能持续扫描并连接蓝牙设备。文章提供了具体的配置方法和常见的问题解决方案。 ... [详细]
  • 对象自省自省在计算机编程领域里,是指在运行时判断一个对象的类型和能力。dir能够返回一个列表,列举了一个对象所拥有的属性和方法。my_list[ ... [详细]
  • Kubernetes 持久化存储与数据卷详解
    本文深入探讨 Kubernetes 中持久化存储的使用场景、PV/PVC/StorageClass 的基本操作及其实现原理,旨在帮助读者理解如何高效管理容器化应用的数据持久化需求。 ... [详细]
  • 本文介绍了如何使用JavaScript的Fetch API与Express服务器进行交互,涵盖了GET、POST、PUT和DELETE请求的实现,并展示了如何处理JSON响应。 ... [详细]
  • 云函数与数据库API实现增删查改的对比
    本文将深入探讨使用云函数和数据库API实现数据操作(增删查改)的不同方法,通过详细的代码示例帮助读者更好地理解和掌握这些技术。文章不仅提供代码实现,还解释了每种方法的特点和适用场景。 ... [详细]
  • 本文将详细介绍多个流行的 Android 视频处理开源框架,包括 ijkplayer、FFmpeg、Vitamio、ExoPlayer 等。每个框架都有其独特的优势和应用场景,帮助开发者更高效地进行视频处理和播放。 ... [详细]
  • 本文介绍 Java 中如何使用 Year 类的 atMonth 方法将年份和月份组合成 YearMonth 对象,并提供代码示例。 ... [详细]
  • InmyapplicationIhaveQGraphicsScenewithpixmapaddedandallisviewedinQGraphicsViewwithsc ... [详细]
  • 本文深入探讨了 Java 中 LocalTime 类的 isSupported() 方法,包括其功能、语法和使用示例。通过具体的代码片段,帮助读者理解如何检查特定的时间字段或单位是否被 LocalTime 类支持。 ... [详细]
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
author-avatar
手机用户2602902715
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有