Java面向对象中的异常

简介: Java中的异常和错误Java 中的异常机制,更好地提升程序的健壮性throwable 为顶级, Error 和 ExceptionError :虚拟机错误,内存溢出,线程死锁Exception : RuntimeException 为空指针异常,数组下标越界异常,算数异常,类型转换异常等,IO异常( IOException ),SQL异常( SQLException )。

Java中的异常和错误
Java 中的异常机制,更好地提升程序的健壮性

throwable 为顶级, Error 和 Exception

Error :虚拟机错误,内存溢出,线程死锁

Exception : RuntimeException 为空指针异常,数组下标越界异常,算数异常,类型转换异常等,IO异常( IOException ),SQL异常( SQLException )。

异常处理,在 Java 中异常处理机制为: 抛出异常 和 捕捉异常

异常的描述:

class ExceptionDemo{
public static void main(String[] args){
int[] arr = new int[3];
System.out.println(arr[0]);
// 结果 为 0
System.out.println(arr[3]);
// 结果 为 图1
}
}

Java面向对象中的异常

System.out.println(arr[3]); 编译没问题,语法没有问题,编译完内存中没数组,运行的时候才在堆内存中开辟数组空间。 arr[3] 没有这个下标,所以在运行时找不到结果。

图1,表示数组下标越界异常, System.out.println(arr[3]); 运行时发生了异常为 ArrayIndexOutOfBoundException ,导致了程序无法运行,程序终结,不在执行。

错误的描述

class ExceptionDemo{
public static void main(String[] args){
int[] arr = new int[102410241024];
System.out.println(arr[0]);
// 结果 为 0
System.out.println(arr[3]);
// 结果 为 图1
}
}

Java面向对象中的异常

图2,表示运行时发生的错误,堆内存溢出。

异常和错误的区别
对于异常是由解决方案的,Java中提供了对应的处理机制,而错误没有,是没有办法去针对性的解决,唯一方法就是错误出现,修改代码。

异常的过程
在异常情况,运行时发生的问题,是数组下标越界异常,在异常抛出的问题为名称,内容,发生的位置等,多种信息进行了封装到对象中。

ArrayIndexOutOfBoundsException

public class ArrayIndexOutOfBoundsException extends IndexOutOfBoundsException

构造方法

ArrayIndexOutOfBoundsException()
ArrayIndexOutOfBoundsException(int index)
ArrayIndexOutOfBoundsException(String s);

ArrayIndexOutOfBoundsException 可以 new 对象,有构造方法,就可以 new 对象。创建对象,如果遇到问题就抛出, new ArrayIndexOutOfBoundsException(index) 。

如何抛出呢?利用关键字 throw ,出现异常,在 Java 虚拟机, jvm 中需要把问题抛出,给调用者 main ,主函数收到抛出的异常对象,但主函数没有办法处理,继续抛出调用者 jvm , jvm 收到异常问题后,将异常信息显示在屏幕上。

异常概述(意外、例外)
什么是异常呢?常见:

try-catch-finally
// try-catch-finally
public void method(){
try {
// 代码段
// 产生异常的代码段
}catch (异常类型 ex) {
// 对异常进行处理的代码段
}finally{
// 代码段
}
}


> throw
> throws

throws 声明时要进行抛出的异常

throw 要手动将产生的异常抛出

> public void method() throws Exception1,Exception2,...,ExceptionN {
>     // 产生异常代码
> }

// throw new IOException();
// 自己抛出的问题自己进行异常解决。
// 在抛出异常处,通过throws关键字标明异常类型
public void method() throws 异常类型{
// 代码 抛出
throw new 异常类型();
}

自定义异常
异常链

异常处理分类为:

抛出异常
捕捉异常
简单案例

public class Test{
public static void main(String[] args){
try{
String msg = redText(“C:\a.txt”);
}catch(PathNotExistException e){
// 进行处理
}
}
}

Throwable异常的顶级父类
异常 Exception 处理方式有两种,一为 捕获 ,二为 继续抛出编译时的异常 。

RuntimeException 运行时异常,只有在运行的时候才会出现,可以处理,也可以不处理。

自定义异常,可以自己定义异常,自己定义一个类,如果这个类继承某个异常类,继承的是 Exception 或其他异常,即定义了一个 编译时异常 ,如果继承的是运行时异常 RuntimeException 或是它的子类,就定义了一个 运行时异常 。

Throwable 类是 Java 中所有错误或异常的超类,只有当对象是这个类的实例时,能通过虚拟机或是 Java 中 throw 语句抛出。

Exception分为两大类
非检查异常( Unchecked Exception ):编译器不要求强制处理异常
检查异常( Checked Exception ):编译器要求必须处理的异常,如 IO 异常等
捕获异常

try
catch
finally

声明异常,抛出异常

throws
throw

如果某方法出现了异常,却是没有能力的处理,可以在方法处用 throws 来声明抛出异常,谁调用这个方法,谁就去处理这个异常。‘

public void method() throws Exception1,Exception2,...,ExceptionN {
// 异常的代码
}

Java中的异常处理情况
JAVA 异常
> try...catch...finally 结构的使用方法

class Test{
public static void main(String args[]){

try{
int i = 1 / 0;
}
catch(Exception e){
e.printStackTrace();
}
finally{
System.out.println("finally");
}
System.out.println(5);
}
}

class Test{
public static void main(String args[]){
try{
Thread.sleep(1000);
}
catch(Exception e){
e.printStackTrace();
}
}
}

throw 和 throws 的作用区别:

class Person{
private int age;

public void setAge(int age) throws Exception{
if(age<0){
RuntimeException e = new RuntimeException("年龄不能小于0");
throw e;
}
this.age = age;
}
}

class Test{
public static void main(String args[]){
Person person = new Person();
try{
person.setAge(-1);
}
catch(Exception e){
System.out.println(e);
}
}
}

Error和Exception的区别
Error 是 Throwable 的子类,用于标记严重错误
Exception 是 Throwable 的子类,指示合理的程序想去 catch 的条件,非严重错误
try/catch的执行过程
如果出现异常,系统则会抛出一个异常,

进行捕捉( catch 操作),或在最后( finally )来进行处理。

throw和throws的区别
throws 出现在方法声明上, throw 出现在方法体内。

异常分类
异常分类: 可查异常 , 运行时异常 和 错误

异常链
异常链为我们捕获一个异常后再抛出另一个异常

one -> two -> three

目录
相关文章
|
2月前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
81 1
|
2月前
|
Java API 调度
如何避免 Java 中的 TimeoutException 异常
在Java中,`TimeoutException`通常发生在执行操作超过预设时间时。要避免此异常,可以优化代码逻辑,减少不必要的等待;合理设置超时时间,确保其足够完成正常操作;使用异步处理或线程池管理任务,提高程序响应性。
101 12
|
2月前
|
Java
在 Java 中,如何自定义`NumberFormatException`异常
在Java中,自定义`NumberFormatException`异常可以通过继承`IllegalArgumentException`类并重写其构造方法来实现。自定义异常类可以添加额外的错误信息或行为,以便更精确地处理特定的数字格式转换错误。
46 1
|
1月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
25 1
|
2月前
|
IDE 前端开发 Java
怎样避免 Java 中的 NoSuchFieldError 异常
在Java中避免NoSuchFieldError异常的关键在于确保类路径下没有不同版本的类文件冲突,避免反射时使用不存在的字段,以及确保所有依赖库版本兼容。编译和运行时使用的类版本应保持一致。
88 7
|
2月前
|
JavaScript 前端开发 Java
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。如果你从我的文章中受益,欢迎关注我,我将持续更新更多优质内容。你的支持是我前进的动力!🎉🎉🎉
27 0
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
|
2月前
|
Java 编译器
如何避免在 Java 中出现 NoSuchElementException 异常
在Java中,`NoSuchElementException`通常发生在使用迭代器、枚举或流等遍历集合时,尝试访问不存在的元素。为了避免该异常,可以在访问前检查是否有下一个元素(如使用`hasNext()`方法),或者使用`Optional`类处理可能为空的情况。正确管理集合边界和条件判断是关键。
105 6
|
2月前
|
Java
Java异常捕捉处理和错误处理
Java异常捕捉处理和错误处理
70 1
|
2月前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
89 2
|
2月前
|
Java
如何在 Java 中处理“Broken Pipe”异常
在Java中处理“Broken Pipe”异常,通常发生在网络通信中,如Socket编程时。该异常表示写入操作的另一端已关闭连接。解决方法包括:检查网络连接、设置超时、使用try-catch捕获异常并进行重试或关闭资源。
126 5