在之前学习File类的相关操作时,我们就接触到了try……catch语句。当时只是知道为了程序执行的可能,需要对可能存在问题的语句进行“实验性的尝试”,并在问题出现是返回问题的对象。但当时并不清楚到底是怎么回事,又是为什么……
今天龙哥终于为我们进行了指导,对于异常也有了个初步的理解~。不过也就有了这篇博文……
首先,先说一下我对异常的理解。异常是在程序在运行过程中发生的在程序编写时无法预料到的,将阻止程序继续正常运行的事件。常见的有空指针、数组越界、栈溢出、文件找不到等等。
C语言中,通过使用if语句来判断是否出现了异常。这种方法有C语言面对过程的特性,其中也容易产生由于对异常产生情况的估计不足而导致程序已经健壮性不足。Java是一种面向对象的高级语言,在对异常的处理机制中同样也体现出了这一点。Java在一个方法的运行过程中,如果发生了异常,则这个方法生成代表该异常(Exception类)的一个对象,并把它交给运行时系统,运行时系统寻找相应的代码来处理这一异常。我们把生成异常对象并把它提交给运行时系统的过程称为抛弃(throw)一个异常。运行时系统在方法的调用栈中查找,从生成异常的方法开始进行回朔,直到找到包含相应异常处理的方法为止,这一个过程称为捕获(catch)一个异常。
在异常的处理中,可以使用之前的try……catch语句,也可以在程序名后加throws语句。两者的区别在于,try……catch语句是在try……catch语句结构中处理异常,直到异常的解决。throws则是将该异常产生的相应的对象抛给调用该方法的方法。这种异常的传递可以一直向上,直到交给虚拟机或者用户去解决。
说完了异常的大致处理方式,接下来说说异常的相关类。Java作为一种面向对象的语言,异常也被当做了一种对象,而每种对象在Java中就有相关的类去定义其属性与方法。本文所涉及的异常主要是Exception类及其子类所定义的对象。我们会发现,Exception类还有一个父类,Throwable,并且有个兄弟类error类。error和Exception都是可抛出导致程序终止的对象的类,error的对象是虚拟机无法处理而直接抛出的,通常也是无法解决的。这是程序无法解决的问题。我们主要讨论通过程序能够自我解决的异常。
异常(Exception类对象)有些是需要强制检测的,比如File类中的路径;而有些异常是虚拟机在运行程序时自动抛出的,比如空指针异常等。
接下来就是处理异常机制中的关键字。Java的异常处理是通过5个关键字来实现的:try,catch,throw,throws,finally。JB的在线帮助中对这几个关
键字是这样解释的:
Throws: Lists the exceptions a method could throw.
Throw: Transfers control of the method to the exception handler.
Try: Opening exception-handling statement.
Catch: Captures the exception.
Finally: Runs its code before terminating the program.
翻译之后:
Throws:将异常列在一个可抛出的方法中
Throw:将方法的控制传递给异常的掌握者(个人认为就是调用该方法的对象)
Try:开启异常处理机制
Catch:抓住异常(结构体内出处理方法)
Finally:运行其代码,然后终止程序。
声明:以上翻译来自本人,靠不靠谱请自行判断……
1、try语句 :
try语句用大括号{}指定了一段代码,该段代码可能会抛弃一个或多个例外。
2、catch语句
catch语句的参数类似于方法的声明,包括一个异常类型和一个异常对象名。异常类型必须为Throwable类的子类,它指明了catch语句所处理的异常类型,异常对象则由运行时系统在try所指定的代码块中生成并被捕获,大括号中包含对象的处理,其中可以调用对象的方法。
catch语句可以有多个,分别处理不同类的异常。Java运行时系统从上到下分别对每个catch语句处理的异常类型进行检测,直到找到类型相匹配的catch语句为止。这里,类型匹配指catch所处理的异常类型与生成的异常对象的类型完全一致或者是它的父类(注意,父类也可以啊),因此,catch语句的排列顺序应该是从特殊到一般。也可以用一个catch语句处理多个异常类型,这时它的异常类型参数应该是这多个异常类型的父类,程序设计中要
根据具体的情况来选择catch语句的异常处理类型。
3、finally语句
try所限定的代码中,当抛出一个异常时,其后的代码不会被执行。通过finally语句可以指定一块代码。无论try所指定的程序块中抛出或不抛出异常,也无论catch语句的异常类型是否与所抛出的异常的类型一致,finally所指定的代码都要被执行,它提供了统一的出口。通常在finally语句中可以进行资源的清除工作。如关闭打开的文件等。所以finally语句用来处理由于异常导致的try和catch中资源的浪费问题。
对于Java的异常机制,我暂时也就只能说出这么多了~谢谢龙哥的指导,也谢谢百度的强大~感谢您肯花功夫看一个初学者的絮絮叨叨,其中会有不对的地方,希望前辈高人能够多多指点。再次感谢~
============分割线=======================
在(敏感词)再次讲过异常机制之后,对于异常的机制又有了一些了解。
我们通常所说的异常都是Exception类及其子类的对象。这些异常又分为运行时异常RuntimeException和强制异常两种。在编程时,我们常常需要处理的,也是编译软件提醒我们处理的异常都是强制异常。我们处理这些异常所用到的方法就是try……catch语句和throws关键字,这些在上面都有所介绍。
而对于运行时异常,比如数组下标越界IndexOutOfBoundsException、空指针异常NullPointerException等等,我们可以不在程序中进行try……catch验证,因为这些错误是由于程序员在编写程序时的逻辑错误或者马虎大意导致的,是可以通过修改程序而避免的问题。这类错误在虚拟机对代码进行编译时会自动抛出错误。当然,我们也可以对某段我们认为可能出错的语句进行try……catch,这时我们需要自定义个Exception类或其子类的对象,作为catch中处理的对象。当然也可以throws,要求调用该方法的方法或者对象验证异常。
Exception还有一个兄弟类Error。对于这个类中,我们常碰到的是内存溢出OutOfMemoryError和栈溢出StackOverflowError。
内存溢出通常是创建了过多的对象或者对象的占用的空间超过了虚拟机预设的空间大小。例如:
int[] data = new int[100000000000000];
或者
ArrayList<Integer> data = new ArrayList<Integer>();
while(true){
int temp = 0;
data.add(temp);
}
都能导致内存溢出的错误。这些情况都是由于我们在编写代码的时候的逻辑问题和粗心大意导致的,只要多加注意就能改过来的。
分享到:
相关推荐
浅谈基于Java的异常处理机制
总体来说,Java异常处理机制是Java编程语言的核心组成部分,它不仅有助于提高软件的稳定性和安全性,也是程序设计中必须掌握的关键技术之一。通过阅读相关文献,开发者可以更好地理解如何在实际编程工作中有效地运用...
Java异常处理机制是Java语言中一个非常重要的特性,它能够有效地提高程序的健壮性和安全性。异常处理机制允许程序在运行时发生错误或者意外情况时,能够给出明确的错误信息,并根据异常的类型进行相应的处理,而不是...
Java异常处理机制是Java编程语言的一个重要组成部分,它提供了处理运行时错误的标准方法。在Java中,异常是指程序在执行过程中发生的一些不寻常的事件,它会打断正常的程序流程。Java提供了丰富的异常类层次结构,以...
自定义异常是Java异常处理机制中的一个重要组成部分,其在教学和实际软件开发中的重要性不容忽视。 首先,了解自定义异常出现的背景是必要的。Java的标准异常库为开发者提供了丰富的异常类,例如空指针异常、数组...
总的来说,理解并正确使用Java异常处理机制是编写可靠、易于维护的代码的关键。通过合理地划分`CheckedException`和`UncheckedException`,我们可以更好地管理程序的异常情况,提高代码的健壮性和可读性。在实际编程...
Java异常处理机制对性能的影响是一个复杂且微妙的话题。异常在Java中被设计为处理程序运行时的错误和异常情况,但它们确实会对程序的运行效率产生影响。在深入讨论之前,我们需要理解Java异常处理的基本原理。 Java...
Java命令行运行class文件是Java开发中的基本操作,但有时候我们可能会遇到各种异常情况,导致程序无法正常执行。本文将深入探讨这个问题,分析可能出现的异常原因,并提供相应的解决策略。 首先,我们需要理解Java...
这是因为Java的异常处理机制要求所有未捕获的异常必须在方法签名中声明,否则会导致编译错误。 代码2展示了如何使用try-catch块来捕获并处理异常。在这种情况下,虽然异常被抛出,但是catch块可以接收到这个异常,...
Java异常处理是编程过程中必不可少的部分,用于处理程序运行时可能出现的问题。Java的异常处理机制基于五个关键字:try、catch、finally、throw和throws。本文将深入探讨Java中关于父子异常处理的一些关键概念。 1....
浅谈Java程序运行机制及错误分析 Java程序运行机制是指Java虚拟机(JVM)的运行机制和Java程序的执行过程。Java虚拟机是可运行Java代码的假想计算机,以实现Java语言的跨平台特性。Java程序的运行需要经过编写、...
Java 连接池是一种优化数据库访问效率的机制,它解决了在Web应用程序中频繁建立和释放数据库连接所导致的性能问题。随着B/S架构的广泛应用,Java应用程序通过JDBC(Java Database Connectivity)与数据库进行交互。...
### Java之浅谈深说——教你如何成长为Java编程高手 在IT行业中,Java作为一种广泛使用的编程语言,其重要性不言而喻。对于希望成为Java编程高手的学习者来说,掌握正确的学习路径至关重要。本文将根据提供的标题、...
"浅谈Java程序设计在线开放课程"这个主题,将深入探讨Java语言的核心概念、编程实践以及如何通过在线平台有效地学习这门技术。 Java以其“一次编写,到处运行”的跨平台特性,成为了企业级应用开发的首选语言。课程...
同时,Java还提供了异常处理机制,能够有效地管理程序运行时可能出现的错误情况。 Java编程语言的这些特点,使其在软件开发领域中扮演了极为重要的角色。从桌面应用、移动应用到企业级应用,Java都有广泛的应用。它...
MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息协议,常用于物联网(IoT)设备之间的通信。...在实际项目中,你可能还需要根据具体业务需求调整主题设计和消息格式,以及完善异常处理机制。
Java异常处理是编程中至关重要的一个环节,特别是对于空指针异常(NullPointerException),它是Java开发者在实际编程中经常遇到的问题。本文将深入探讨Java异常处理机制,并重点解析空指针异常的原因、解决方法以及...
在Java中,Hashtable类提供了一个简单的、基于哈希表的机制,用于存储和检索键值对。Hashtable类是Java Collections Framework的一部分,与HashMap有着密切的关系,但与HashMap不同的是,Hashtable是同步的,因此在...
Java异常处理是编程中至关重要的一个环节,它帮助开发者在程序出错时捕获和处理错误,保持程序的稳定性和可维护性。本文主要探讨两个关键概念:异常链和异常丢失,以及它们在实际编程中的应用。 异常链是Java提供的...
SSH框架,全称为Struts+Spring+Hibernate,是Java企业级开发中常用的一种技术栈,主要用于构建基于MVC(Model-View-Controller)设计模式的Web应用。在本篇文章中,我们将深入探讨这三个组件的核心概念和进阶用法,...