在使用Java编写程序的时候,会出现一些错误,我们通常称之为异常。在我们遇到异常的时候应该怎么去处理呢?今天小编将为大家带来大数据编程入门:Java异常处理这篇文章。一、异常的分类 在Java程序中所遇到的有三种异常,由用户错误引起的异常、由程序错误引起的异常及由物理错误引起的异常。 由用户错误引起的异常,通常包括: ① 用户输入了非法数据。 ② 要打开的文件不存在。 ③ 网络通信时连接中断,或者JVM内存溢出。 在我们了解到异常处理是怎么工作前,我们需要掌握以下三种类型的异常: ① 检查性异常:最具代表性的检查异常是由程序员无法预见的用户错误或问题引起的。例如,要打开一个不存在的文件,会发生一个异常,在编译时不能简单地忽略它。 ② 运行时异常:运行时异常是程序员可以避免的异常。与检查性异常不同,运行时异常可以在编译时忽略。 ③ 错误:错误不是例外,而是程序员无法控制的问题。错误通常在代码中被忽略。例如,当堆栈溢出时,会发生错误,并且在编译期间无法检查它们。二、Exception类的层次 所有异常类都是从java.lang.Exception继承的子类。 Exception类是Throwable类的子类。除了Exception类之外,Throwable还有一个子类Error。 Java程序通常不会捕获错误。错误通常发生在严重故障的情况下,它们不在Java程序处理的范围之内。 Error用于指示运行时环境中的错误。 例如,JVM内存溢出。通常,程序不会从错误中恢复。 Exception类有两个主要的子类:IOException类和RuntimeException类。 三、Java 内置异常类 Java语言在Java中定义了一些异常类在 java.lang 标准包。 标准运行时异常类的子类是最常见的异常类。因为 java.lang包默认加载到所有Java程序中,从运行时异常类继承的大多数异常都可以直接使用。 Java还根据每个类库定义了一些其他异常,下表列出了Java的非检查性异常。 异常 描述 ArithmeticException 当出现异常的运算条件时,会引发此异常。例如,当一个整数被"零除"时,抛出这个类的一个实例。 ArrayIndexOutOfBoundsException 访问具有非法索引的数组时引发异常。如果索引为负数或大于或等于数组大小,则该索引是非法的。 ArrayStoreException 尝试将错误类型的对象存储到对象数组时引发异常。 ClassCastException 当试图将对象强制转换为不是实例的子类时,会引发此异常。 IllegalArgumentException 引发的异常表示传递给方法的参数非法或不正确。 IllegalMonitorStateException 抛出异常以指示线程已尝试等待对象的监视器,或通知正在等待对象监视器但未指定监视器的另一个线程。 IllegalStateException 在非法或不适当的时间调用方法时产生的信号。换句话说,Java环境或Java应用程序没有处于请求操作所需的适当状态。 IllegalThreadStateException 线程未处于请求操作所需的适当状态时引发异常。 IndexOutOfBoundsException 指示排序索引(例如对数组、字符串或向量的排序)超出范围。 NegativeArraySizeException 如果应用程序试图创建大小为负的数组,则抛出该异常。 NullPointerException 当应用程序试图在需要对象的地方使用 null 时,抛出该异常 NumberFormatException 当应用程序尝试将字符串转换为数字类型,但无法将该字符串转换为适当的格式时,会引发此异常。 SecurityException 由安全管理器抛出的异常,指示存在安全侵犯。 StringIndexOutOfBoundsException 此异常由 String 方法抛出,指示索引或者为负,或者超出字符串的大小。 UnsupportedOperationException 当不支持请求的操作时,抛出该异常。 下表列出了Java定义在java.lang包中的检查性异常类。 异常 描述 ClassNotFoundException 应用程序在尝试加载类并引发异常时找不到相应的类。 CloneNotSupportedException 当调用Object类中的clone方法来克隆对象,但对象的类无法实现可Cloneable接口时,会引发此异常。 IllegalAccessException 拒绝访问一个类的时候,抛出该异常。 InstantiationException 当试图使用Class类中的newInstance方法创建一个类的实例,而指定的类对象由于是一个接口或一个抽象类而无法实例化时,会引发此异常。 InterruptedException 一个线程被另一个线程中断,抛出该异常。 NoSuchFieldException 请求的变量不存在 NoSuchMethodException 请求的方法不存在四、异常方法 方法 说明 public String getMessage() 返回有关发生的异常的详细信息,此消息在Throwable类的构造函数中初始化。 public Throwable getCause() 返回一个Throwable 对象代表异常原因。 public String toString() 使用getMessage()的结果返回类的串级名字。 public void printStackTrace() 打印toString()结果和栈层次到System.err,即错误输出流。 public StackTraceElement [] getStackTrace() 返回包含堆栈层次结构的数组。下标为0的元素表示堆栈的栈顶,最后一个元素表示方法调用堆栈的栈底。 public Throwable fillInStackTrace() 用当前的调用栈层次填充Throwable 对象栈层次,添加到栈层次任何先前信息中。五、捕获异常 使用try和catch关键字捕获异常。try/catch代码块放置在可能发生异常的位置。 try/catch代码块中的代码称为保护代码。使用try/catch的语法如下: try { // 程序代码 }catch(ExceptionName e1) { //Catch 块 } Catch语句包含捕获异常类型的声明。当保护代码块中发生异常时,将检查try后的catch块。 如果发生的异常包含在catch块中,则异常将传递给catch块,这与向方法传递参数相同。 示例: 在下面的示例中,当代码尝试访问数组的第三个元素时,将声明一个包含两个元素的数组并引发异常。 运行结果: 六、多重捕获块 try块后跟多个catch块称为多重捕获块。 多个捕获块的语法如下: try{ // 程序代码 }catch(异常类型1 异常的变量名1){ // 程序代码 }catch(异常类型2 异常的变量名2){ // 程序代码 }catch(异常类型3 异常的变量名3){ // 程序代码 } 上面的代码段包含三个catch块。 你可以在try语句之后添加任意数量的catch块。 如果保护代码中发生异常,则会将其抛出到第一个catch块。 如果引发异常的数据类型与ExceptionType1匹配,将在此处捕获它。 如果不匹配,则传递给第二个catch块。 所以,直到异常被捕获或通过所有catch块。 示例: 以下示例展示了怎么使用多重 try/catch。 七、throws/throw关键字 如果方法未捕获检查异常,则必须使用throws关键字声明该异常。throws关键字放在方法签名的末尾。 您还可以使用throw关键字抛出异常,不管它是新实例化的还是刚刚捕获的。 以下方法的声明引发RemoteException异常: 一个方法可以声明抛出多个异常,且多个异常之间用逗号隔开。 比如以下的方法声明抛出 RemoteException 和 InsufficientFundsException: 八、finally关键字 finally关键字用于创建在try代码块之后执行的代码块。 无论是否发生异常,finally块中的代码都将执行。 在finally代码块中,可以运行具有finishing up性质的语句,例如cleanup类型。 finally代码块出现在catch代码块的末尾,语法如下: try{ // 程序代码 }catch(异常类型1 异常的变量名1){ // 程序代码 }catch(异常类型2 异常的变量名2){ // 程序代码 }finally{ // 程序代码 } 示例: 运行结果: 注意事项: ① catch 不能独立于 try 存在。 ② 在 try/catch 后面添加 finally 块并非强制性要求的。 ③ try 代码后不能既没 catch 块也没 finally 块。 ④ try, catch, finally 块之间不能添加任何代码。九、声明自定义异常 你可以在Java中自定义异常,在编写自己的异常类时,请记住以下几点。 ① 所有异常都必须是Throwable的子类。 ② 如果要编写checkup异常类,则需要继承该Exception类。 ③ 如果要编写运行时异常类,则需要继承RuntimeException类。 可以定义自己的异常类,如下所示: class MyException extends Exception{ } 通过仅继承Exception类而创建的异常类是检查异常类。 以下insufficientFundsException类是从Exception继承的用户定义的异常类。 与任何其他类一样,异常类包含变量和方法。 示例: 下面的例子是模拟一个银行账户,通过识别银行卡号,就可以存取款了。 要演示如何使用自定义异常类,在以下CheckingAccount类中包含一个withdraw()方法,以抛出一个非充分的FundSexException异常。 下面的BankDemo程序演示如何调用CheckingAccount类的dispose()和withraw()方法。 编译以上三个文件,并运行BankDemo,运行结果如下: 十、通用异常 在Java中定义了两种类型的异常和错误。 1、JVM(Java虚拟机) 异常:由 JVM 抛出的异常或错误。例如:NullPointerException 类,ArrayIndexOutOfBoundsException 类,ClassCastException 类。 2、程序级异常:由程序或者API程序抛出的异常。例如 IllegalArgumentException 类,IllegalStateException 类。 以上就是关于大数据编程入门:Java异常处理的全部内容了,希望这篇文章能够帮助到大家~