学习Java,你需要知道这些——Java异常

Alexandra ·
更新时间:2024-11-13
· 816 次阅读

文章目录异常处理的概念异常的基本概念Java异常处理机制的优点错误的分类异常的分类预定义的一些常见异常异常的处理抛出异常捕获异常的语法生成异常对象声明自己的异常类 异常处理的概念

在程序在运行的时候可能会出现错误,程序要有能力处理错误,或者至少要知道发生的什么错误。

异常的基本概念 又称为例外,是特殊的运行错误对象 Java中声明了很多异常类,每个异常类都代表了一种运行错误,
类中包含了 该运行错误的信息 处理错误的方法 每当Java程序运行过程中发生一个可识别的运行错误时,即该
错误有一个异常类与之相对应时,系统都会产生一个相应的该
异常类的对象,即产生一个异常。 Java异常处理机制的优点 将错误处理代码从常规代码中分离出来; 按错误类型和差别分组; 对无法预测的错误的捕获和处理; 克服了传统方法的错误信息有限的问题; 把错误传播给调用堆栈。 错误的分类 根据错误的严重程度不同,可分为两类 错误 致命性的,程序无法处理; Error类是所有错误类的父类。 异常 非致命性的,可编制程序捕获和处理; Exception类是所有异常类的父类。 异常的分类 非检查型异常 不期望程序捕获的异常,在方法中不需要声明,编译器也不进行检查。 继承自RuntimeException。 不要求捕获和声明的原因: 引发RuntimeException的操作在Java应用程序中会频繁出现。例如,若每次使用对象时,都必须编写异常处理代码来检查null引用,则整个应用程序很快将变成一个庞大的try- catch块。 它们表示的问题不一定作为异常处理。如:可以在除法运算时检查o
值,而不使用ArithmeticException。可以在使用引用前测试空值。 检查型异常 其他类型的异常。 如果被调用的方法抛出一个类型为E的检查型异常,那么调用者必须捕获E或者也声明抛出E (或者E的一一个父类), 对此编译器要进行检查。 预定义的一些常见异常

Java预定义的一些常见异常

非检查型异常 ArithmeticException
整数除法中除数为o NullPointerException
访问的对象还没有实例化 NegativeArraySizeException
创建数组时元素个数是负数 ArrayIndexOutOfBoundsException
访问数组元素时,数组下标越界 检查型异常 ArrayStoreException
程序试图向数组中存取错误类型的数据 FileNotFoundException
试图存取一个并不存在的文件 IOException
通常的I/O错误

例:非检查型异常——数组越界异常

HelloWorld.java

import java.io.*; public class HelloWorld { public static void main (String args[ ]) { int i= 0; String greetings[] = {"Hello world!", "No, I mean it!", "HELLO WORLD!!"}; while(i < 4){ System.out.println (greetings[i]); i++; } } }

程序定义了3个字符串,但是循环进行了4次,导致数组越界,所以在运行后会出现一个异常信息,并结束程序的运行。
在这里插入图片描述

异常的处理

检查型异常的处理

声明抛出异常 不在当前方法内处理异常,可以使用throws子句声明将异常抛出到调用方法中; 如果所有的方法都选择了抛出此异常,最后JVM将捕获它,
输出相关的错误信息,并终止程序的运行。 捕获异常 使用try{}catch(){}块,捕获到所发生的异常,并进行相应的
处理 抛出异常

当探测到异常时,方法可能会选择不处理异常,而是抛出异常给调用它的方法。

抛出异常的例子 public void openThisFile(String fileName) throws java.io.FileNotFoundException { //code for method } public void getCustomerInfo() throws java.io.FileNotFoundException { // do something this.openThisFile(" customer.txt"); // do something }

如果在openThisFile中抛出了FileNotfoundException异常, getCustomerInfo将停止执行,并将此异常传送给它的调用者.

捕获异常的语法 try { statement(s) } catch (exceptiontype name) { statement(s) } finally { statement(s) }

说明

try语句 其后跟随可能产生异常的代码块。 catch语句 其后跟随异常处理语句,通常都要用到两个方法: getMessage() 返回一一个字符串,对发生的异常进行描述。 printStackTrace() 给出方法的调用序列,一直到异常的产生位置。 finally语句 不论在try代码段是否产生异常,finally 后的程序代码段都会被执行。通常在这里释放内存以外的其他资源。

注意事项

如果并列有多个catch语句捕获多个异常,则一般的异常类型放
在后面,特殊的放在前面。 生成异常对象 三种方式
由Java虚拟机生成;
由Java类库中的某些类生成;
在自己写的程序中生成和抛出异常对象。 抛出异常对象都是通过throw语句实现,异常对象必须是Throwable或
其子类的实例:
throw new ThrowableObject();
ArithmeticException e = new ArithmeticException0; throw e; 声明自己的异常类 自定义的所有异常类都必须是Exception的子类 声明语法如下 public class MyExceptionName extends SuperclassOfMyException { public MyExceptionName( { super("Some string explaining the exception"); } } 张宜强 原创文章 475获赞 839访问量 27万+ 关注 他的留言板 展开阅读全文
作者:张宜强



java异常 学习java JAVA

需要 登录 后方可回复, 如果你还没有账号请 注册新账号