目录
一.解释:
1.异常:
是指程序在执行期间遇到的问题或意外情况,它们可以导致程序出现错误或不正常的行为,从而影响程序的正确性和可靠性。
2.异常主要的类型:
NO1.
Checked Exception(出现概率较高) :编译时异常(并不是在编译时发生,而是表示必须在编写程序的时候预先对这种异常进行处理,如果没处理编译器会报错),也称为强制性异常,这种异常在程序编译时必须进行处理或者抛出,否则代码无法通过编译。所有的 Exceotion 类的直接子类都是属于编译时异常。
»常见的编译时异常:
- IOException:输入输出异常。
- ClassNotFoundException:类未找到异常。
- SQLException:数据库异常
- NoSuchMethodException:请求的方法不存在异常
- InterruptedException:线程中断异常
NO2.
Unchecked Exception (出现概率较低):运行时异常(运行时异常发生在程序运行时,而非编译期间,当程序在执行过程中遇到了某些意外情况、错误或者违反了语言规范的情况时,就会抛出运行时异常),也称为非强制性异常,这种异常由程序逻辑错误或者运行时问题引起,通常继承自 RuntimeException 类或 Error 类。所有的 RuntimeException 类及子类都属于运行时异常。
»常见的运行时异常包括:
- NullPointerException:空指针异常
- IndexOutOfBoundsException:索引越界异常
- ArithmeticException:算术异常
- IllegalArgumentException:非法参数异常
- ClassCastException:类型转换异常
- ArrayIndexOutOfBoundsException:数组下标越界异常
总结:
1.两种异常分别代表需要在代码中显式处理和不需要显式处理的异常。
2.所有异常都是在运行阶段发生的,因为只有程序运行阶段才会出现异常对象。
拓展:异常继承结构图
3.异常对象:
异常在java中以类的形式存在,每一个异常类 都可以创建异常对象。
异常对象是指在程序执行期间抛出的可序列化的、包含有关异常信息的对象。当程序出现异常时,Java会自动创建一个异常对象,并且该对象将包含有关异常的信息,例如异常类型、原因、位置等。异常对象通常是某个 Exception 类或其子类的实例。例如,如果程序抛出一个NullPointerException异常(空指针异常),Java将创建一个NullPointerException对象,该对象将包含有关异常的信息,例如异常类型、发生异常的代码行号等。
public class ExceptionExample
{
public static void main(String[] args)
{
try
{
int num1=50,num2=0;
int result=num1/num2; //除数为0,会抛出ArithmeticException异常(算术异常)
}
catch(ArithmeticException e)
{
//捕获异常后将异常对象传入,可以通过该对象获取异常信息并进行处理
System.out.println("出现异常:" + e.getMessage());
}
}
}
运行结果:
出现异常:/ by zero
补充:其中异常对象 e 就是我们从 catch 块中捕获到的ArithmeticException对象,我们可以通过这个对象获取异常信息并进行相应的处理。通常,我们使用异常对象来理解和诊断程序出现的问题,以便快速找到和修复 bug。
4.异常机制带来的好处:
<1>可以提高程序的可靠性和健壮性:
异常机制可以捕获并处理程序中出现的异常情况,从而避免程序崩溃或出现不可预期的行为,提高程序的可靠性和健壮性。
<2>可以清晰地表达出程序的意图:
在程序中显式地抛出异常可以使程序更加高效而明确地表达出程序的意图。通过抛出异常,程序员可以清楚地描述某个方法可能会引发什么样的问题,使程序更具可读性和易于维护。
<3>可以增强代码的模块化和复用性:
异常机制可以将处理异常的代码与正常逻辑分离开来,从而更好地实现代码的模块化和复用性。通过将异常处理的代码封装在一个方法或类中,可以减少代码重复,并提高代码的可读性和可维护性。
<4>可以更好地管理程序错误:
异常机制可以让我们更好地管理程序中的错误。通过在程序中捕获和记录异常,我们可以更方便地对程序进行错误跟踪和排查,及时修复错误并提高程序的质量。
二.具体异常处理:
1.举例
这里我们以算数异常举例说明,请看一个算数异常例子:
public class project
{
public static void main(String[] args)
{
int a=1;
int b=0;
int c=a/b;
}
}
运行结果:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at project.main(project.java:8)
NO1.处理方式一:用throws抛出异常
public class project
{
public static void main(String[] args)throws ArithmeticException
{
int a=1,b=0;
if (b == 0)
{
throw new ArithmeticException("除数不能为0");
}
System.out.println(a/b);
}
}
运行结果:
Exception in thread "main" java.lang.ArithmeticException: 除数不能为0
at project.main(project.java:9)
分析:在上面的代码中,我们使用了 throw
抛出了一个算术异常(ArithmeticException)。首先,在方法中判断除数是否为 0,如果是则手动抛出算术异常。如果除数不为 0,则进行除法运算并输出结果。
NO2.处理方式2:用try-catch捕获处理异常
public class project
{
public static void main(String[] args)
{
try
{
int a=1,b=0;
int c=a/b;
}
catch(ArithmeticException e)
{
System.out.println(e.getMessage());//输出异常内容
}
}
}
运行结果:
/ by zero
2.说明:
<1>throw(甩锅者)
使用throw通过自己手动抛出异常,以便我们可以灵活地处理程序中的各种异常情况。简记就是谁调用我,我就甩给谁,甩给调用者来处理。
<2>try-catch
try 块中包含可能引发异常的代码,而 catch 块用于捕获并处理这个异常。如果 try 块中的代码引发了异常,则程序会跳转到与之匹配的 catch 块,执行 catch 块中指定的异常处理代码。
try
{
// 可能引发异常的代码块
int a = 1 / 0;
}
catch (ArithmeticException e)
{ // 捕获算术异常
// 异常处理代码块
System.out.println("除数不能为0");
}
优点:Java 中的 try-catch 异常处理机制可以帮助我们在程序运行时检测和处理异常情况,提高程序的健壮性和可靠性。
No.18
如有错误和疑问,请私信!感谢支持🌹