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

   日期:2020-05-12     浏览:155    评论:0    
核心提示:# 异常处理的概念在程序在运行的时候可能会出现错误,程序要有能力处理错误,或者至少要知道发生的什么错误。## 异常的基本概念- 又称为例外,是特殊的运行错误对象- Java中声明了很多异常类,每个异常类都代表了一种运行错误,类中包含了 - 该运行错误的信息 - 处理错误的方法- 每当Java程序运行过程中发生一个可识别的运行错误时,即该错误有一个异常类与之相对应时,系统都会产生一个相应的该异常类的对象,即产生一个异常。## Java异常处理机制的优点- 将错误处理代码从常规代码中分java

文章目录

  • 异常处理的概念
    • 异常的基本概念
    • 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");
	}
}
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服