这一章节我们来讨论一下为什么需要异常?
原因:逻辑代码与异常代码分离。
注意:异常机制是强制性的。
例子:
下面的代码使用了异常机制。
package com.ray.ch10;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class Test {
public static void main(String[] args) {
File file = new File("");
try {
FileInputStream fis = new FileInputStream(file);
//dosomething
} catch (FileNotFoundException e) {
// TODO 处理异常
e.printStackTrace();
}
}
}
如果没有异常机制,我们的代码可能就会类似下面:
package com.ray.ch10;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class Test {
public static void main(String[] args) throws FileNotFoundException {
File file = new File("");
if (file != null) {
FileInputStream fis = new FileInputStream(file);//逻辑代码部分
}
}
}
我们的代码将在逻辑代码里面添加许多判断代码,从而造成代码的可读性降低。
但是引入异常机制,我们将逻辑代码与异常代码分开。
但是我们还需要区分一般错误与异常。
一般错误:我们可以在足够的信息支持下处理它。
异常情况:一般是我们估计不到的错误情况,而且没有足够的信息来处理。
我们来看下面的例子,下面的代码模拟输入输出:
package com.ray.ch10;
import java.util.HashMap;
public class Test {
public static void main(String[] args) {
HashMap<String, Object> map = new HashMap<String, Object>();// 假设一个map当成是输入内容
map.put("param1", 0);
map.put("param2", "O");
// 上面的0和大O在输入上面没什么太大的区别
for (String key : map.keySet()) {
if (map.get(key) != null) {//可以预计的一般错误
System.out.println(Integer.parseInt(map.get(key).toString()));
}
}
}
}
输出:
0
Exception in thread "main" java.lang.NumberFormatException: For input string: "O"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:449)
at java.lang.Integer.parseInt(Integer.java:499)
at com.ray.ch10.Test.main(Test.java:13)
从上面的结果看出,对于是否为空这种一般性的错误,有足够的信息来处理它,但是对于输入的内容,太难控制,因此这里我们将引入异常机制。
package com.ray.ch10;
import java.util.HashMap;
public class Test {
public static void main(String[] args) {
HashMap<String, Object> map = new HashMap<String, Object>();// 假设一个map当成是输入内容
map.put("param1", 0);
map.put("param2", "O");
// 上面的0和大O在输入上面没什么太大的区别
for (String key : map.keySet()) {
if (map.get(key) != null) {//可以预计的一般错误
try {
System.out.println(Integer
.parseInt(map.get(key).toString()));
} catch (NumberFormatException e) {
System.out.println("请只输入数字");
}
}
}
}
}
输出:
0
请只输入数字
我们引入了异常机制,逻辑代码没有什么变化,但是多出来的处理异常的代码,将在异常出现后,进行修复性操作或者提示性操作。
注意:由于异常机制的引入,我们把逻辑代码当成一个事务来看待,而且我们通常把异常处理当成事务的最后底线,异常处理代码大多是事务修复性操作。
总结:这一章节主要讲述了为什么需要异常,以及辨别一般错误和异常情况。
这一章节就到这里,谢谢。
-----------------------------------
目录
分享到:
相关推荐
标题 "mchange-commons-java-0.2.11.zip" 指示的是一个包含 "mchange-commons-java" 库的版本为0.2.11的压缩包文件。这个库是Java编程语言中的一个开源项目,主要用于提供一些通用的、跨平台的Java工具和实用程序。...
Eclipse IDE for Java Developers 是一款广泛使用的集成开发环境(IDE),专为Java编程设计。它由Eclipse基金会维护,提供了一整套工具,用于编写、调试、测试和部署Java应用程序。2021-12-R 版本是Eclipse的一个...
标题中的“api-ntrip-java-client-master.zip”是一个包含Java实现的NTRIP客户端的源代码压缩包,专门针对Android平台。NTRIP(Networked Transport of RTCM via Internet Protocol)是一种用于实时传输GPS(全球...
标题 "aip-java-sdk-4.2.0" 指的是一个针对Android平台的AIP(Artificial Intelligence Platform)SDK的特定版本,版本号为4.2.0。这个SDK是百度公司提供的,用于帮助开发者在Android应用程序中集成和使用百度的各种...
它广泛应用于Linux和Unix系统中,以及部分Windows系统,为远程管理、文件传输等提供安全保障。 **二、libssh2库概述** `libssh2`是一个开源的C语言编写的库,它实现了SSH2协议的客户端和服务器端功能。这个库允许...
【标题】: "手把手 - 微服务 Windows 开发环境从头搭建 2022-09-05 直播录像 - 软件安装包-2.zip" 这个压缩包文件包含了搭建微服务开发环境所需的基础软件,包括JDK(Java Development Kit)和MySQL数据库。...
Aspose.Words 是一个强大的文档处理库,专为Java开发者设计,用于创建、操作和转换各种文档格式。版本23.6是这个库的一个重要更新,它引入了对Java Development Kit (JDK) 17的支持。这意味着开发人员现在可以利用...
总的来说,Java Swing的LookAndFeel机制为开发者提供了极大的灵活性,使得他们能够创造出既美观又符合用户习惯的界面。通过这个"java-Swing外观包",我们可以方便地引入和使用各种外观风格,提升Java桌面应用的用户...
在Java编程中,多文件上传是一项常见的功能,特别是在web应用中,用户可能需要上传多个文件,如图片、文档等。本示例"java-多文件上传dome"提供了一个工具包,可直接下载使用,方便开发者快速实现多文件上传功能。 ...
- **LinkedList**:使用双向链表,插入和删除速度快,但访问元素需要从头开始遍历,效率较低。 这些是Java笔试中常见的知识点,涵盖了面向对象、数据类型、多线程、异常处理、集合框架等方面,对于准备Java面试或...
这门“从头开始学习Java”的课程,源自"PillsInformática"的教育资源,旨在为初学者提供全面的Java编程知识。Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现属Oracle公司)于1995年推出。它以其...
《从头开始学Java》这份课程资料包含了Java编程的基础到进阶内容,旨在为初学者提供全面的学习指导。以下是对各个章节内容的详细解析: 1. **Java语言概述**:这部分通常会介绍Java的历史背景、特点和应用领域,...
在这个名为"java-sdk-master.zip"的压缩包中,包含的是Leancound的Java SDK,这是一个专为集成Leancound服务而设计的开发工具包。Leancound是一家提供云通信服务的公司,其主要功能之一就是即时通讯能力。这个SDK...
"java-lib"是一个与Java编程相关的资源集合,很可能包含了各种常用的Java库,这些库可以帮助开发者在进行Java开发时提高效率,解决特定问题。"java-all-lib"的标签可能表示这个压缩包包含了广泛的Java库,涵盖了多种...
在Java开发中,创建具有模糊效果的视图背景可以提升应用程序的用户体验,使其看起来更加现代和精致。"使用渲染脚本实现模糊视图背景"是一个常见的技术实践,它通常涉及到图形处理和用户界面的设计。在这个项目中,...
在Java编程环境中,将Java程序注册为Windows服务是一项常见的任务,尤其当你的应用程序需要在系统启动时自动运行或后台持续运行时。这个过程涉及到Java的JNI(Java Native Interface)和Windows的服务管理API。以下...
`Free Spire.Doc for Java` 是一款专为Java开发者设计的文档处理库,它允许用户在Java应用程序中创建、编辑和转换Microsoft Word文档。这个3.9版本提供的是无水印版本,意味着开发者可以免费试用并用于商业项目,而...
【标题】"ks-java-lib:包含 Java 的 KS 库" 提供的是一个专门为 Java 开发者设计的库,它扩展了 Java 的功能,为开发者在处理特定任务时提供了便利。这个库可能包含了丰富的类和方法,旨在简化开发过程,提高代码的...
Java平台提供了一系列库来支持这些操作,本项目中涉及的主要有Spire.Doc、Spire.PDF以及Apache PDFBox。让我们详细探讨这些库的功能及其在Java开发中的应用。 首先,`Spire.Doc.jar`是Spire.Doc for Java的库文件,...