‘壹’ JAVA语言中,异常处理有哪几种方式
有两中方式:1.捕获异常,自己处理.
2.throw出去,让别人处理.
举个例子:
public class A{
try{
可能放生异常的语句...
}catch(Exception e){
e.getMessage();//自己处理
}
}
public class A throws Exception{
可能放生异常的语句...
}//throw出去,让别人处理
注意这里用的是throws
如果在方法里面则用throw
举例:
public class A{
try{
可能放生异常的语句...
}catch(Exception e){
e.getMessage();//自己处理
throw new Exception ("");
}
}
‘贰’ Java异常处理
Java中的异常是指在程序执行过程中可能出现的错误或异常情况。
异常结构:所有的异常类都是Throwable类的子类,分为两个主要的子类:Exception和Error。
Exception是指程序运行过程中可能出现的可处理的异常。它又分为两种类型:
1、非运行时异常(编译异常):需要在编译时处理的异常,即在方法声明中必须显式声明或捕获这些异常。常见的检查异常包括IOException、SQLException等。
2、运行时异常(RuntimeException):无需在编译时处理的异常,即编译器不强制要求捕获或声明这些异常。常见的运行时异常包括NullPointerException、IllegalArgumentException等。
Error是指表示严重错误或不可恢复的系统错误,通常由虚拟机(JVM)抛出。一般情况下,应用程序不会捕获或处理Error,而是让它们导致程序终止。常见的Error包括OutOfMemoryError、StackOverflowError等。
异常关键字throws:throws是Java中的关键字,用于在方法声明中指定方法可能抛出的异常。当一个方法可能会引发一个或多个异常时,可以使用throws关键字将这些异常列出,以告知调用者需要处理这些异常。
使用throws关键字可以将异常向上层方法传递,直到遇到合适的异常处理机制。在方法声明中使用throws关键字后,调用该方法的代码必须在调用处处理或再次使用throws关键字传递异常。
语法:
异常关键字throw:throw是Java中的关键字,用于手动抛出异常对象。当在程序中遇到某个特定的条件或情况时,可以使用throw关键字创建并抛出一个异常对象,从而中断当前的执行流程,并将异常传递给上层调用栈。
使用throw关键字需要提供一个异常对象作为参数,该异常对象必须是Throwable类或其子类的实例。可以通过new关键字创建一个异常对象,并将其作为参数传递给throw关键字。
语法:
try:用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出。
catch:用于捕获异常。catch用来捕获try语句块中发生的异常。
finally:finally语句块总是会被执行。它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。只有finally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接停止。
异常捕获try-catch:一个 try-catch 语句块中可以捕获多个异常类型,但只会命中匹配的第一个 catch 块,如果在try块中的代码发生了异常,程序会立即跳转到与之匹配的catch块中,并执行相应的异常处理代码,后续的 catch 块也不会再执行。 需要注意的是,try-catch块只能处理在try块中发生的异常。如果在catch块中发生新的异常,它将无法被当前的try-catch块捕获,而会被传递给上一级的异常处理机制。
try-finally:try块中包含可能抛出异常的代码,而finally块中包含在无论异常是否发生时都必须执行的代码。无论异常是否被捕获或处理,finally块中的代码都会执行。可以保证资源在使用后被关闭。
try-catch-finally:try块中包含可能抛出异常的代码,catch块用于捕获和处理异常,finally块包含在无论异常是否发生时都必须执行的代码。
try-catch-finally的执行流程如下:
1. 首先,try块中的代码会被执行。
2. 如果在try块中发生了异常,那么异常会被抛出,并且程序会跳转到与之匹配的catch块进行异常处理。
3. 如果在try块中没有发生异常,那么catch块会被跳过,程序会直接执行finally块中的代码。
4. 无论异常是否被捕获和处理,finally块中的代码都会执行。
5. 如果在catch块中使用了return语句或抛出了新的异常,那么在执行finally块之前,先会执行return语句或抛出新异常的操作。
try-catch-finally结构提供了一种机制来处理可能发生的异常,并确保在异常处理之后执行一些必要的操作,如资源释放。
自定义异常必要性:1、提供更清晰的异常信息;2、区分不同的异常情况;3、异常信息传递;4、统一异常处理;5、阻止未检查异常的传播。
自定义异常步骤:1、创建一个新的类,命名为你所需的异常类型,通常以Exception结尾,例如MyException;2、继承现有的异常类,选择合适的父类,通常是Exception类或其子类;3、提供构造方法,可以重载父类的构造方法,以便在抛出异常时传递相关的错误信息或其他必要的参数;4、可以选择性地添加其他方法或属性,以满足自定义异常的特定需求。
例子:在上述示例中,MyException类继承自Exception类,并添加了一个名为errorCode的私有变量。构造器接受两个参数:message和errorCode,并通过调用父类的构造器super(message)来设置异常对象的详细信息。同时,将传入的errorCode赋值给errorCode变量。
在自定义异常类中调用父类构造器通常是必要的,因为父类构造器负责初始化父类的部分属性和行为,确保异常对象的完整性和一致性。
当自定义异常类继承自Java标准库中的异常类(如Exception或RuntimeException)时,父类构造器负责初始化父类的属性,包括异常的消息、堆栈跟踪等信息。这些信息对于异常的诊断、处理和记录都是非常重要的。
在自定义异常类中,通过调用父类的构造器,可以确保父类的初始化过程得到正确执行,遵循异常处理的规范和约定。如果不调用父类构造器,可能会导致父类中的属性未正确初始化,影响异常的使用和处理。
‘叁’ <49>Java手动抛出异常
在Java中,手动抛出异常是一种主动创建异常对象的行为,目的是为了让代码在特定条件下引发异常,以提高程序的健壮性和异常处理能力。
具体步骤如下:
首先,获取一个随机数a。
接着,利用if语句设定条件,当满足指定条件时,人为地抛出异常,如数值超出预设范围。
随后,在方法内部,通过try块尝试执行可能引发异常的代码。若发生异常,则程序将跳转至对应的catch块处理异常。此时,如果catch块内部代码也可能引发异常,应使用内部异常处理机制。
Try catch finally结构可以层层嵌套,满足复杂异常处理需求。
执行示例:假设方法中包含除法运算,为避免除数为零导致的运行时错误,可手动抛出异常。一旦捕获到外层异常,打印异常对象信息,执行外层catch块的语句。若catch块内部再次捕获异常(如操作空指针),则执行内部finally块。最后,执行外部finally块,确保资源释放。