`
李灵晖-raylee
  • 浏览: 135680 次
博客专栏
Group-logo
从头认识java
浏览量:0
文章分类
社区版块
存档分类
最新评论

从头认识java-10.1 为什么需要异常?

 
阅读更多

这一章节我们来讨论一下为什么需要异常?

原因:逻辑代码与异常代码分离。

注意:异常机制是强制性的。

例子:

下面的代码使用了异常机制。

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.zip" 指示的是一个包含 "mchange-commons-java" 库的版本为0.2.11的压缩包文件。这个库是Java编程语言中的一个开源项目,主要用于提供一些通用的、跨平台的Java工具和实用程序。...

    eclipse-java-2021-12-R-win32-x86_64.zip

    Eclipse IDE for Java Developers 是一款广泛使用的集成开发环境(IDE),专为Java编程设计。它由Eclipse基金会维护,提供了一整套工具,用于编写、调试、测试和部署Java应用程序。2021-12-R 版本是Eclipse的一个...

    api-ntrip-java-client-master.zip_android_ntrip_ntrip java实现_ntr

    标题中的“api-ntrip-java-client-master.zip”是一个包含Java实现的NTRIP客户端的源代码压缩包,专门针对Android平台。NTRIP(Networked Transport of RTCM via Internet Protocol)是一种用于实时传输GPS(全球...

    aip-java-sdk-4.2.0

    标题 "aip-java-sdk-4.2.0" 指的是一个针对Android平台的AIP(Artificial Intelligence Platform)SDK的特定版本,版本号为4.2.0。这个SDK是百度公司提供的,用于帮助开发者在Android应用程序中集成和使用百度的各种...

    libssh2-1.4.3

    它广泛应用于Linux和Unix系统中,以及部分Windows系统,为远程管理、文件传输等提供安全保障。 **二、libssh2库概述** `libssh2`是一个开源的C语言编写的库,它实现了SSH2协议的客户端和服务器端功能。这个库允许...

    手把手 - 微服务 Windows 开发环境从头搭建 2022-09-05 直播录像 - 软件安装包-2.zip

    【标题】: "手把手 - 微服务 Windows 开发环境从头搭建 2022-09-05 直播录像 - 软件安装包-2.zip" 这个压缩包文件包含了搭建微服务开发环境所需的基础软件,包括JDK(Java Development Kit)和MySQL数据库。...

    aspose-words-java-23.6-jdk17.jar.zip

    Aspose.Words 是一个强大的文档处理库,专为Java开发者设计,用于创建、操作和转换各种文档格式。版本23.6是这个库的一个重要更新,它引入了对Java Development Kit (JDK) 17的支持。这意味着开发人员现在可以利用...

    java-Swing外观包

    总的来说,Java Swing的LookAndFeel机制为开发者提供了极大的灵活性,使得他们能够创造出既美观又符合用户习惯的界面。通过这个"java-Swing外观包",我们可以方便地引入和使用各种外观风格,提升Java桌面应用的用户...

    java-多文件上传dome

    在Java编程中,多文件上传是一项常见的功能,特别是在web应用中,用户可能需要上传多个文件,如图片、文档等。本示例"java-多文件上传dome"提供了一个工具包,可直接下载使用,方便开发者快速实现多文件上传功能。 ...

    Java---笔试题大全

    - **LinkedList**:使用双向链表,插入和删除速度快,但访问元素需要从头开始遍历,效率较低。 这些是Java笔试中常见的知识点,涵盖了面向对象、数据类型、多线程、异常处理、集合框架等方面,对于准备Java面试或...

    curso-java-pildorasInf:从头开始学习Java

    这门“从头开始学习Java”的课程,源自"PillsInformática"的教育资源,旨在为初学者提供全面的Java编程知识。Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现属Oracle公司)于1995年推出。它以其...

    j从头开始学java

    《从头开始学Java》这份课程资料包含了Java编程的基础到进阶内容,旨在为初学者提供全面的学习指导。以下是对各个章节内容的详细解析: 1. **Java语言概述**:这部分通常会介绍Java的历史背景、特点和应用领域,...

    java-sdk-master.zip_leancound集成第三方插件_即时通讯

    在这个名为"java-sdk-master.zip"的压缩包中,包含的是Leancound的Java SDK,这是一个专为集成Leancound服务而设计的开发工具包。Leancound是一家提供云通信服务的公司,其主要功能之一就是即时通讯能力。这个SDK...

    java-lib

    "java-lib"是一个与Java编程相关的资源集合,很可能包含了各种常用的Java库,这些库可以帮助开发者在进行Java开发时提高效率,解决特定问题。"java-all-lib"的标签可能表示这个压缩包包含了广泛的Java库,涵盖了多种...

    使用渲染脚本实现模糊视图背景 - Java - 下载.zip

    在Java开发中,创建具有模糊效果的视图背景可以提升应用程序的用户体验,使其看起来更加现代和精致。"使用渲染脚本实现模糊视图背景"是一个常见的技术实践,它通常涉及到图形处理和用户界面的设计。在这个项目中,...

    java程序注册windows 服务

    在Java编程环境中,将Java程序注册为Windows服务是一项常见的任务,尤其当你的应用程序需要在系统启动时自动运行或后台持续运行时。这个过程涉及到Java的JNI(Java Native Interface)和Windows的服务管理API。以下...

    Free Spire.Doc for Java - 3.9 无水印

    `Free Spire.Doc for Java` 是一款专为Java开发者设计的文档处理库,它允许用户在Java应用程序中创建、编辑和转换Microsoft Word文档。这个3.9版本提供的是无水印版本,意味着开发者可以免费试用并用于商业项目,而...

    ks-java-lib:包含 Java 的 KS 库

    【标题】"ks-java-lib:包含 Java 的 KS 库" 提供的是一个专门为 Java 开发者设计的库,它扩展了 Java 的功能,为开发者在处理特定任务时提供了便利。这个库可能包含了丰富的类和方法,旨在简化开发过程,提高代码的...

    java-pdf&word-jar.zip

    Java平台提供了一系列库来支持这些操作,本项目中涉及的主要有Spire.Doc、Spire.PDF以及Apache PDFBox。让我们详细探讨这些库的功能及其在Java开发中的应用。 首先,`Spire.Doc.jar`是Spire.Doc for Java的库文件,...

Global site tag (gtag.js) - Google Analytics