Java中的异常和处理,你知道多少?

程序运行时,异常发生的和处不被期望的事件,它阻止了程序按照程序员的理知预期正常执行,这就是道多异常。异常发生时,异常是和处任程序自生自灭,立刻退出终止,理知还是道多输出错误给用户?或者用C语言风格:用函数返回值作为执行状态。

Java提供了更加优秀的异常解决办法:异常处理机制。

异常处理机制能让程序在异常发生时,和处按照代码的理知预先设定的异常处理逻辑,针对性地处理异常,道多让程序尽***可能恢复正常并继续执行,异常且保持代码的和处清晰。

Java中的理知异常可以是函数中的语句执行时引发的,也可以是程序员通过throw 语句手动抛出的,只要在Java程序中产生了异常,就会用一个对应类型的亿华云异常对象来封装异常,JRE就会试图寻找异常处理程序来处理异常。

Throwable类是Java异常类型的顶层父类,一个对象只有是 Throwable 类的(直接或者间接)实例,他才是一个异常对象,才能被异常处理机制识别。JDK中内建了一些常用的异常类,我们也可以自定义异常。

Java异常的分类和类结构图

Java标准裤内建了一些通用的异常,这些类以Throwable为顶层父类。

Throwable又派生出Error类和Exception类。

错误:Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现。因此,程序员应该关注Exception为父类的分支下的各种异常类。

异常:Exception以及他的子类,代表程序运行时发送的香港云服务器各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理的核心。

 

总体上我们根据Javac对异常的处理要求,将异常类分为2类。

非检查异常(unckecked exception):Error 和 RuntimeException 以及他们的子类。javac在编译时,不会提示和发现这样的异常,不要求在程序处理这些异常。所以如果愿意,我们可以编写代码处理(使用try…catch…finally)这样的异常,也可以不处理。对于这些异常,我们应该修正代码,而不是去通过异常处理器处理 。这样的异常发生的原因多半是代码写的有问题。如除0错误ArithmeticException,错误的强制类型转换错误ClassCastException,数组索引越界ArrayIndexOutOfBoundsException,使用了空对象NullPointerException等等。云服务器

检查异常(checked exception):除了Error 和 RuntimeException的其它异常。javac强制要求程序员为这样的异常做预备处理工作(使用try…catch…finally或者throws)。在方法中要么用try-catch语句捕获它并处理,要么用throws子句声明抛出它,否则编译不会通过。这样的异常一般是由程序的运行环境导致的。因为程序可能被运行在各种未知的环境下,而程序员无法干预用户如何使用他编写的程序,于是程序员就应该为这样的异常时刻准备着。如SQLException , IOException,ClassNotFoundException 等。

需要明确的是:检查和非检查是对于javac来说的,这样就很好理解和区分了。

初识异常

下面的代码会演示2个异常类型:ArithmeticException 和 InputMismatchException。前者由于整数除0引发,后者是输入的数据不能被转换为int类型引发。

package com.example; import java. util .Scanner ; public class AllDemo {        public static void main (String [] args )       {              System . out. println( "----欢迎使用命令行除法计算器----" ) ;             CMDCalculate ();       }       public static void CMDCalculate ()       {              Scanner scan = new Scanner ( System. in );             int num1 = scan .nextInt () ;             int num2 = scan .nextInt () ;             int result = devide (num1 , num2 ) ;             System . out. println( "result:" + result) ;             scan .close () ;       }       public static int devide (int num1, int num2 ){              return num1 / num2 ;       } } /
应用开发
上一篇:在此期间,他们每天仍在这里卖大米,在理财方面个人感情有待提高。因为现在是收米的最佳时机。
下一篇:二、如何选择合适的域名