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

异常处理的概念

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

异常的基本概念

  • 又称为例外,是特殊的运行错误对象
  • Java中声明了很多异常类,每个异常类都代表了一种运行错误,
    类中包含了
    • 该运行错误的信息
    • 处理错误的方法
  • 每当Java程序运行过程中发生一个可识别的运行错误时,即该
    错误有一个异常类与之相对应时,系统都会产生一个相应的该
    异常类的对象,即产生一个异常。

Java异常处理机制的优点

  • 将错误处理代码从常规代码中分离出来;
  • 按错误类型和差别分组;
  • 对无法预测的错误的捕获和处理;
  • 克服了传统方法的错误信息有限的问题;
  • 把错误传播给调用堆栈。

错误的分类

  • 根据错误的严重程度不同,可分为两类
    • 错误
      • 致命性的,程序无法处理;
      • Error类是所有错误类的父类。
    • 异常
      • 非致命性的,可编制程序捕获和处理;
      • Exception类是所有异常类的父类。

注意:最后送大家十套2020最新Java架构实战教程+大厂面试题库,进裙 783802103 在裙文件下载一起交流进步哦! 进来获取 一起交流进步哦!

异常的分类

  • 非检查型异常
    • 不期望程序捕获的异常,在方法中不需要声明,编译器也不进行检查。
    • 继承自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");
	}
}

注意:最后送大家十套2020最新Java架构实战教程+大厂面试题库,进裙 783802103 在裙文件下载一起交流进步哦! 进来获取 一起交流进步哦!

原创文章 477 获赞 912 访问量 28万+

猜你喜欢

转载自blog.csdn.net/qq_41505957/article/details/106032349
今日推荐