今天终于把困扰自己一段时间的java异常彻底解决了,心理感到一阵轻松!
java中的异常其实是各种继承了Exception的对象,错误发生后程序就此中断,转而去执行异常对象中的内容。
在java中异常被看做一个类来处理。下面是java中异常类的继承体系:
Throwable是所有异常和错误的超类,其有两个子类:Error,Exception-分别表示错误和异常。Error表示程序中出现的无法处理的错误,比如:outMemoryError,ThreadDeath等。这些异常一旦发生,程序(JVM)会选择线程终止。
Exception是程序本身可以处理的异常,这种异常又分为运行时异常和非运行时异常。这些异常不会影响程序的执行,只是改变改变程序的执行流程。如果程序中出现了 这种异常,那么系统就会转到专门处理此异常的代码片段(其中包含引起此异常的原因),这对于我们检测程序运行错误原因是很有帮助的。
运行时异常都是RuntimeException类及其子类异常,如NullPointException等,这些异常程序中可以选择捕获处理也可以不处理。异常一般是由于程序逻辑错误引起的,程序应该从逻辑角度应可能的避免这种异常的发生。
非运行异常是RuntimeExeption以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException,SQLException等以及用户自定义的异常(继承Exception类)
java异常中有几个很重要的关键字:try,catch,finally,throw,throws.
任何有可能抛出异常的程序片段都必须包含在try后面中的一对大括号中,同时大括号后面必须跟上catch{},里面包含所有异常的处理,因为抛出的异常可能会有不止一种所以后面的catch块相应也有多种。不过这些catch块的先后顺序有区别的。就是按继承关系放止的,子类异常要放在父类异常的前面。因为虚拟机在处理异常时,会优先处理子类异常,如果相对子类异常处理完后,后面的异常就不会再处理了。
下面举个例子说明一下:
package Exception;
class MyException extends Exception { //创建自定义异常类
String message; //定义String类型变量
public MyException(String ErrorMessagr) { //父类方法
message = ErrorMessagr;
}
public String getMessage(){ //覆盖getMessage()方法
return message;
}
}
package Exception;
public class ExceptionTest { //创建类
static int quotient(int x,int y)throws MyException{//定义方法抛出异常
if(x< 0){ //判断参数是否小于0
throw new MyException("除数不能是负数");//异常信息
}
return x/y;//返回值
}
public static void main(String args[]){ //主方法
try{
int result = quotient(-5,0);
}//调用方法quotient()
catch (MyException e) { //处理自定义异常
System.out.println(e.getMessage()); //输出异常信息
}
catch (ArithmeticException e) {
//处理ArithmeticException异常
System.out.println("除数不能为0");//输出提示信息
}
catch (Exception e) { //处理其他异常
System.out.println("程序发生了其他的异常");
//输出提示信息
}
}
}
throw后面跟上一个异常类,通常表示的是手动抛出用户自定义的异常,因为程序中的一些错误可能并不是语法错误而只是实际问题相关的逻辑错误。例如定义一个表示年龄的变量Int age=-34;显然对于虚拟机来说它并不是错误(语法错误),但在实际问题中年龄不可能也不应该是负值。如果用户输入了负值的话系统并不会抛出任何异常,程序正常运行但结果可定是错误的。这就需要在出现这种情况的时候,我们自己抛出一个异常类,让程序去处理这种错误。
throws虽然仅仅比throw多一个s,但用途完全不一样。
throws放置在一个方法名后,表示这个方法中的程序可能会抛出的异常类型(可能为用户自定义的异常也可能是系统异常)。如果是用户自定义的类型还要在引起此异常的程序语句后加上一句:throw 异常类(表示手动抛出异常)。现在这个方法只是抛出了异常,还没有考虑处理异常(当然可以加上try与catch完成异常的处理),但是有时方法并不能处理其本身抛出的异常,那么它可以把那些异常交给调用它的方法进行处理,这种现象称为回避异常。这就好比老板给员工分配任务,而员工在执行任务时遇到了问题,但是这些问题自己没有能力或是权利解觉,于是把问题交给了老板,让老板自己解决,当然老板也可以把其交给老板的老板。。。。如此循环的话就构成了异常嵌套处理。把所有异常都统一交给某个方法来进行集中处理,这样处理的效率会更高。
分享到:
相关推荐
通过这些练习,可以加深对自定义异常理解和使用方法的掌握。 ### 三、小结与小悟 #### (1)小结:异常处理5个关键字 - `try`:包含可能抛出异常的代码块。 - `catch`:捕获并处理异常的代码块。 - `throw`:抛出...
1. 日志异常理解:日志异常是指在系统运行过程中,通过日志记录的错误信息或不正常状态。这些异常可能源于代码错误、数据问题、配置失误或者系统资源不足等多种原因。识别日志异常的关键在于了解不同类型的错误代码...
### 深入理解Java异常处理机制 #### 引言 异常处理机制是任何现代编程语言不可或缺的一部分,尤其是在像Java这样的面向对象的语言中更是如此。Java的异常处理机制旨在帮助开发者编写更健壮、更易于维护的代码。...
关于异常的定义和理解,各类异常的区分.等等
JDK1.7以上的异常体系,需要后续的不断总结和完善,学习jdk必备!
总之,蒙特卡洛方法为处理异常值提供了一种有力的工具,它允许我们在大量随机抽样中理解数据的内在结构,从而更准确地识别和剔除异常值。然而,这种方法也有其局限性,例如假设数据分布,因此在实际应用中应结合业务...
在深入理解Linux内核第四章中,作者详细阐述了Linux内核中中断和异常的概念、分类、处理机制以及它们在系统运行中的重要性。本章不仅涉及了Intel微处理器手册中对中断和异常的分类方法,还探讨了Linux内核如何初始化...
总结来说,理解和处理C#与C++之间的异常转换是跨语言开发的关键技能。通过适当的设计和实现,我们可以确保C++的异常能够被C#有效地捕获和处理,从而增强程序的健壮性和稳定性。在实际项目中,确保正确处理各种异常...
try 块中放置可能会发生异常的代码,当异常发生时,try 块抛出系统自动生成的异常对象,然后异常处理机制将负责搜寻参数与异常类型相匹配的第一个处理程序,并执行 catch 语句。 throws 关键字用于在方法签名中声明...
总的来说,理解.NET中的异常机制对于编写健壮、易于维护的代码至关重要。正确地使用异常,结合异常的本质和.NET提供的异常类,可以提高代码质量,同时确保在遇到错误时能够及时恢复或提供有用的错误信息。
一、异常处理的理解? 异常处理是指程序在运行过程中,发生错误会导致程序退出,这种错误,就叫做异常。 因此处理这种错误,就称为异常处理。 二、异常处理如何操作? C# 异常处理时建立在四个关键词之上的:try、...
学科的历史发展揭示了对心理异常理解的逐步深化,从早期的迷信和误解到现在科学的诊断和治疗方法的形成。 在讨论心理正常与异常时,课件提到了正常心理活动的功能,包括适应环境、促进个体成长和发展、维护自我平衡...
这篇19页的PDF文档《深入理解java异常处理机制Java开发Java经验技巧共》可能涵盖了Java异常处理的基本概念、最佳实践以及高级用法。在Java中,异常处理通过五个关键字来实现:try、catch、finally、throw和throws。 ...
源码分析可能还包括理解如何在异常发生时正确恢复,或者记录异常信息以供后续分析。 在实际应用中,这种技术可以用于创建安全的程序,提高软件的稳定性,或者在调试阶段深入理解程序行为。对于易语言的开发者来说,...
Java中的异常处理机制是编程过程中不可或缺的一部分,它用于处理程序运行时出现的错误或不正常情况。...理解并熟练运用异常处理,不仅可以提高代码质量,还能帮助开发者更好地应对复杂编程环境中的各种挑战。
易语言是一种专为中国人设计的编程语言,它以简体中文作为编程语句,降低了编程的门槛,使得更多的人能够参与到编程中来。...同时,深入理解线程管理、异常处理和底层内存操作也是提升编程技能的重要步骤。
在编程领域,异常处理是确保程序健壮性与稳定性的关键技术。对于C、C++以及基于MFC(Microsoft Foundation Classes)的开发来说,异常处理更是不...理解并熟练运用这些异常处理机制,是每个专业程序员必备的技能之一。
本文将深入探讨"JAVA范例 四)异常处理---编译时异常、运行时异常"这个主题,结合标签"源码"和"工具",我们可以理解这与实际编程实践和可能使用的开发工具如Struts2框架相关。 首先,我们来看编译时异常。编译时...
首先,我们要理解什么是自由空气异常(Free Air Anomaly)。自由空气异常是指地球表面某点的重力值与理想平坦地球在同一高度上的重力值之差。它反映了地壳下方密度分布的差异,但并未考虑地形对重力的影响。计算公式...