<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>处理 on 庞玉栋个人博客</title><link>https://pangyd.com/tags/%E5%A4%84%E7%90%86/</link><description>Recent content in 处理 on 庞玉栋个人博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Tue, 03 Oct 2017 19:17:23 +0800</lastBuildDate><atom:link href="https://pangyd.com/tags/%E5%A4%84%E7%90%86/index.xml" rel="self" type="application/rss+xml"/><item><title>Java 中的异常和处理详解</title><link>https://pangyd.com/post/122-java/</link><pubDate>Tue, 03 Oct 2017 19:16:17 +0800</pubDate><guid>https://pangyd.com/post/122-java/</guid><description>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;strong>&lt;span>简介&lt;/span>&lt;/strong>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>程序运行时，发生的不被期望的事件，它阻止了程序按照程序员的预期正常执行，这就是异常。异常发生时，是任程序自生自灭，立刻退出终止，还是输出错误给用户？或者用C语言风格：用函数返回值作为执行状态？。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>Java提供了更加优秀的解决办法：异常处理机制。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>异常处理机制能让程序在异常发生时，按照代码的预先设定的异常处理逻辑，针对性地处理异常，让程序尽最大可能恢复正常并继续执行，且保持代码的清晰。&lt;/p>&lt;p>Java中的异常可以是函数中的语句执行时引发的，也可以是程序员通过throw 语句手动抛出的，只要在Java程序中产生了异常，就会用一个对应类型的异常对象来封装异常，JRE就会试图寻找异常处理程序来处理异常。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>Throwable类是Java异常类型的顶层父类，一个对象只有是 Throwable 类的（直接或者间接）实例，他才是一个异常对象，才能被异常处理机制识别。JDK中内建了一些常用的异常类，我们也可以自定义异常。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;strong>&lt;span>Java异常的分类和类结构图&lt;/span>&lt;/strong>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>Java标准裤内建了一些通用的异常，这些类以Throwable为顶层父类。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>Throwable又派生出Error类和Exception类。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>错误：Error类以及他的子类的实例，代表了JVM本身的错误。错误不能被程序员通过代码处理，Error很少出现。因此，程序员应该关注Exception为父类的分支下的各种异常类。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>异常：Exception以及他的子类，代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用，是异常处理的核心。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p style="text-align: center">&lt;img class="" title="858860-20170911125844719-1230755033" data-src="https://pangyd.com/uploads/2017/10/74c10f869f038762.png" data-ratio="0.637883008356546" data-w="718" data-type="png" src="https://pangyd.com/uploads/2017/10/74c10f869f038762.png" data-fail="0">&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>总体上我们根据Javac对异常的处理要求，将异常类分为2类。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>非检查异常（unckecked exception）：Error 和 RuntimeException 以及他们的子类。javac在编译时，不会提示和发现这样的异常，不要求在程序处理这些异常。所以如果愿意，我们可以编写代码处理（使用try…catch…finally）这样的异常，也可以不处理。对于这些异常，我们应该修正代码，而不是去通过异常处理器处理 。这样的异常发生的原因多半是代码写的有问题。如除0错误ArithmeticException，错误的强制类型转换错误ClassCastException，数组索引越界ArrayIndexOutOfBoundsException，使用了空对象NullPointerException等等。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>检查异常（checked exception）：除了Error 和 RuntimeException的其它异常。javac强制要求程序员为这样的异常做预备处理工作（使用try…catch…finally或者throws）。在方法中要么用try-catch语句捕获它并处理，要么用throws子句声明抛出它，否则编译不会通过。这样的异常一般是由程序的运行环境导致的。因为程序可能被运行在各种未知的环境下，而程序员无法干预用户如何使用他编写的程序，于是程序员就应该为这样的异常时刻准备着。如SQLException , IOException,ClassNotFoundException 等。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>需要明确的是：检查和非检查是对于javac来说的，这样就很好理解和区分了。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;strong>&lt;span>初识异常&lt;/span>&lt;/strong>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>下面的代码会演示2个异常类型：ArithmeticException 和 InputMismatchException。前者由于整数除0引发，后者是输入的数据不能被转换为int类型引发。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;blockquote>&lt;p>&lt;span>package com.example;&lt;/span>&lt;/p>&lt;p>&lt;span>import java. util .Scanner ;&lt;/span>&lt;/p>&lt;p>&lt;span>public class AllDemo&lt;/span>&lt;/p>&lt;p>&lt;span>{&lt;/span>&lt;/p>&lt;p>&lt;span>&amp;nbsp; &amp;nbsp; &amp;nbsp; public static void main (String [] args )&lt;/span>&lt;/p></description></item></channel></rss>