我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java的异常处理机制

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java的异常处理机制

本篇内容介绍了“Java的异常处理机制”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

Java 异常处理

异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。

比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error;如果你用System.out.println(11/0),那么你是因为你用0做了除数,会抛出java.lang.ArithmeticException的异常。

异常发生的原因有很多,通常包含以下几大类:

-用户输入了非法数据。

-要打开的文件不存在。

-网络通信时连接中断,或者JVM(java虚拟机)内存溢出。

这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理错误引起的。-

要理解Java异常处理是如何工作的,你需要掌握以下三种类型的异常:

http://www.iis7.com/b/wzjk/

-检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。

-运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。

-错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。

。。。

(异常)Exception类的层次

所有的异常类是从java.lang.Exception类继承的子类。

Exception类是Throwable类的子类。除了Exception类外,(可抛出)Throwable还有一个子类Error(错误) 。

Java程序通常不捕获错误。错误一般发生在严重故障时,它们在Java程序处理的范畴之外。Error用来指示运行时环境发生的错误。

例如,JVM内存溢出。一般地,程序不会从错误中恢复。

异常类有两个主要的子类:(输入输出异常)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      请求的方法不存在

。。。

异常方法

下面的列表是Throwable 类的主要方法:

序号  方法                                                       说明

1     public String getMessage()                 返回关于发生的异常的详细信息。这个消息在Throwable 类的构造函数中初始化了。

2     public Throwable getCause()              返回一个Throwable 对象代表异常原因。

3     public String toString()                        使用getMessage()的结果返回类的串级名字。

4     public void printStackTrace()              打印toString()结果和栈层次到System.err,即错误输出流。

5     public StackTraceElement [] getStackTrace()   返回一个包含堆栈层次的数组。下标为0的元素代表栈顶,最后一个元素代表方法调用堆栈的栈底。

6     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(异常类型2 异常的变量名2){

    // 程序代码

 }

上面的代码段包含了3个catch块。

可以在try语句后面添加任意数量的catch块。

如果保护代码中发生异常,异常被抛给第一个catch块。

如果抛出异常的数据类型与ExceptionType1匹配,它在这里就会被捕获。

如果不匹配,它会被传递给第二个catch块。

如此,直到异常被捕获或者通过所有的catch块。

。。。

throws/throw关键字:

如果一个方法没有捕获一个检查性异常,那么该方法必须使用throws 关键字来声明。throws关键字放在方法签名的尾部。

也可以使用throw关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。

下面方法的声明抛出一个RemoteException异常:

import java.io.*;

public class className

{

   public void deposit(double amount) throws RemoteException

   {

      // Method implementation

      throw new RemoteException();

   }

   //Remainder of class definition

}

一个方法可以声明抛出多个异常,多个异常之间用逗号隔开。

。。。

finally关键字

finally关键字用来创建在try代码块后面执行的代码块。

无论是否发生异常,finally代码块中的代码总会被执行。

在finally代码块中,可以运行清理类型等收尾善后性质的语句。

finally代码块出现在catch代码块最后,语法如下:

 try{

    // 程序代码

 }catch(异常类型1 异常的变量名1){

    // 程序代码

 }catch(异常类型2 异常的变量名2){

    // 程序代码

 }finally{

    // 程序代码

 }

注意下面事项:

catch不能独立于try存在。

在try/catch后面添加finally块并非强制性要求的。

try代码后不能既没catch块也没finally块。

try, catch, finally块之间不能添加任何代码。

。。。

声明自定义异常

在Java中你可以自定义异常。编写自己的异常类时需要记住下面的几点。

-所有异常都必须是Throwable的子类。

-如果希望写一个检查性异常类,则需要继承Exception类。

-如果你想写一个运行时异常类,那么需要继承RuntimeException 类。

可以像下面这样定义自己的异常类:

class MyException extends Exception{

}

只继承Exception 类来创建的异常类是检查性异常类。

一个异常类和其它任何类一样,包含有变量和方法。

。。。

通用异常

在Java中定义了两种类型的异常和错误。

JVM(Java虚拟机)异常:由JVM抛出的异常或错误。例如:NullPointerException类,ArrayIndexOutOfBoundsException类,ClassCastException类。

程序级异常:由程序或者API程序抛出的异常。例如(非法数据异常)IllegalArgumentException类,(非法语句异常)IllegalStateException类。

“Java的异常处理机制”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java的异常处理机制

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java的异常处理机制

本篇内容介绍了“Java的异常处理机制”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Java 异常处理异常是程序中的一些错误,但并不是所有的
2023-06-02

【JAVA 异常处理机制】

文章目录 前言1.java异常处理机制2.try-catch3.finally块4.自动关闭特性5.throw关键字6.throws关键字7.throws的重写规则8.异常分类9.异常API10.自定义异常总结: 前言 在Ja
2023-08-23

Java 中 bin2hex 的异常处理机制有哪些?(Java bin2hex有哪些异常处理机制)

在Java编程中,bin2hex是一种将二进制数据转换为十六进制字符串的常见操作。然而,在进行这种转换过程中,可能会遇到各种异常情况。本文将详细介绍Java中bin2hex的异常处理机制。一、异常概述在Java
Java 中 bin2hex 的异常处理机制有哪些?(Java bin2hex有哪些异常处理机制)
Java2024-12-23

教妹学 Java :异常处理机制

异常是指中断程序正常执行的一个不确定的事件。当异常发生时,程序的正常执行流程就会被打断。一般情况下,程序都会有很多条语句,如果没有异常处理机制,前面的语句一旦出现了异常,后面的语句就没办法继续执行了。”

在 Java 中,异常处理机制究竟是什么?(java中异常处理机制是什么)

在Java编程中,异常处理机制是一个至关重要的概念,它允许开发者在程序运行过程中捕获和处理异常情况,以提高程序的稳定性和可靠性。一、异常的概念异常是在程序运行过程中发生的错误或异常情况,这些情况可能是由于用户输入错误、文件读
在 Java 中,异常处理机制究竟是什么?(java中异常处理机制是什么)
Java2024-12-17

如何实现 Java WebMagic 的异常处理与重试机制?(Java WebMagic异常处理与重试机制)

在JavaWebMagic的开发过程中,异常处理和重试机制是非常重要的组成部分。它们能够帮助我们处理各种可能出现的错误情况,提高程序的稳定性和可靠性。本文将详细介绍JavaWebMagic异常处理与重试机制的实现方法。一、异常处理
如何实现 Java WebMagic 的异常处理与重试机制?(Java WebMagic异常处理与重试机制)
Java2024-12-20

怎样解析Java的异常处理机制

这期内容当中小编将会给大家带来有关怎样解析Java的异常处理机制,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。你觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了Java的异常处理机制?在下面这段代
2023-06-17

Java异常处理机制的示例分析

这篇文章给大家分享的是有关Java异常处理机制的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.初识异常我们在写代码的时候都或多或少碰到了大大小小的异常,例如:public class Test {
2023-06-26

java异常处理机制原理是什么

Java异常处理机制的原理是基于异常(Exception)的概念。在Java中,异常是指在程序运行过程中发生的错误或异常情况。当代码出现异常时,可以使用异常处理机制来捕获和处理异常,以保证程序的正常运行。Java的异常处理机制基于三个关键词
2023-09-16

Java异常处理机制有什么用

这篇文章主要介绍了Java异常处理机制有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.异常概述与异常体系结构1.1异常概述异常:在Java语言中,将程序执行中发生的
2023-06-25

Java异常处理机制实例分析

这篇文章主要介绍“Java异常处理机制实例分析”,在日常操作中,相信很多人在Java异常处理机制实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java异常处理机制实例分析”的疑惑有所帮助!接下来,请跟
2023-06-29

java中异常处理机制的原理是什么

Java中的异常处理机制是基于异常类的继承关系和异常处理代码块的机制。当程序发生异常时,会抛出一个异常对象,该异常对象会沿着调用链向上抛出,直到被捕获并处理或者直到程序终止。Java中的异常类都是从java.lang.Throwable类派
2023-08-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录