【Java异常】什么是异常,Java中如何处理异常?

简介: 【Java异常】什么是异常,Java中如何处理异常?



1. 了解异常:

异常

  • 继承/实现 关系:
  • Java.lang.Throwable
  • Error
  • Exception —— 异常顶层父类
  • RuntimeException
  • 其他异常(编译时异常)


  • Error:代表系统级别错误(属严重问题),系统一旦出现问题,sun公司就会把这些错误封装成Error对象,Error是给sun公司自己使用,不是提供给开发者使用。
  • Exception:异常,代表程序可能出现问题,我们通常会用Exception以及他地子类来封装程序出现的问题(异常)。
  • 运行时异常:RuntimeException及其子类,编译阶段不会出现异常提醒。(如:NullPointerException、ArrayIndexOutOfBoundsException)
  • 编译时异常:除去RuntimeException及其子类,其余异常都是编译时异常,是编译阶段就会出现的异常,不解决,程序就无法编译运行。


作用

  • 异常是用于检查bug的关键参考消息。
  • 异常可以作为方法内部的一种特殊值返回,以便通知调用者底层的情况。




2. 异常处理

  • ①JVM默认处理方式:
  • 把异常名称,异常原因以及异常出现的位置等信息输出在了控制台。
  • 程序停止运行,下面的代码不会执行。

  • ②手动处理方式(捕获异常):
//捕获异常 使用方式:
try{
    可能出现异常的代码;
}catch(异常类型 变量名){
    异常处理代码;
}
  • 好处:可以让程序继续往下执行,不会停止。
  • Throwable成员方法
  • public String getMessage():返回此throwable的详细信息字符串
  • public String toString():返回此throwable的简单描述
  • public void printStackTrace():把异常的错误信息输出在控制台
  • 注意
  • 若没有异常,catch块不执行。
  • 若存在多个异常,应该设置多个对应的catch块来捕获异常。
  • 有多个catch块时,若待捕获的异常存在继承关系,应当先捕获子类异常再捕获父类异常。
  • JDK7以后,可以在一个catch块中捕获多个异常,用|符号分隔。
  • try中遇到异常未被捕获,会使用JVM默认处理方式。
  • try中捕获到异常就直接跳转到catch块,try中后续代码不会执行。

  • ③抛出处理(抛出异常):
  • 1)throws
//使用:
public void 方法名()throws 异常类名1,异常类名2...{
    ...
}
  • 注意:
  • 写在方法定义处,表示声明一个异常,告诉调用者使用此方法可能会有哪些异常。
  • 编译时异常必须要写,运行时异常可以不写。

  • 2)throw
//使用
public void 方法(){
  throw new NullPointerException();
}
  • 注意:
  • throw使用在方法内,会结束方法并手动抛出异常,使得后续代码不再被执行。




3. 自定义异常

自定义异常

  • 步骤
  • ①定义异常类
  • Exception作为异常类名的后缀,运行时异常类需继承RuntimeException,编译时异常需继承Exception
  • ②写继承关系
  • ③空参构造器
  • ④带参构造器
//①异常类名后缀Exception
public class AgeOutOfBoundsException extends RuntimeException{ //②继承关系
    //③空参构造
    public AgeOutOfBoundsException(){}
    //④带参构造
    public AgeOutOfBoundsException(String message){
        super(message);
    }
}
  • 遵循见名知意的原则,让控制台报错信息清晰明了,方便错误定位。




4. finally块

  • 特性:finally块中的代码一定会被执行,除非JVM退出。
  • 由于一定会被执行的特性,finally{}通常用作资源的释放。
//捕获异常 使用方式:
try{
    可能出现异常的代码;
}catch(异常类型 变量名){
    异常处理代码;
}finally{
    //一定会被执行的代码
}
  • 注意:当三个块中都出现了return语句,首先记录try{}中return的结果,出现异常时,还会记录catch{}中return的结果,最后记录finallu{}块中的结果,最终返回的是finallu{}块中的结果


目录
相关文章
|
3月前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
108 1
|
3月前
|
Java API 调度
如何避免 Java 中的 TimeoutException 异常
在Java中,`TimeoutException`通常发生在执行操作超过预设时间时。要避免此异常,可以优化代码逻辑,减少不必要的等待;合理设置超时时间,确保其足够完成正常操作;使用异步处理或线程池管理任务,提高程序响应性。
175 13
|
3月前
|
Java
在 Java 中,如何自定义`NumberFormatException`异常
在Java中,自定义`NumberFormatException`异常可以通过继承`IllegalArgumentException`类并重写其构造方法来实现。自定义异常类可以添加额外的错误信息或行为,以便更精确地处理特定的数字格式转换错误。
63 1
|
2天前
|
Java 程序员 开发者
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
33 14
|
5天前
|
缓存 Java 应用服务中间件
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
27 5
|
3月前
|
IDE 前端开发 Java
怎样避免 Java 中的 NoSuchFieldError 异常
在Java中避免NoSuchFieldError异常的关键在于确保类路径下没有不同版本的类文件冲突,避免反射时使用不存在的字段,以及确保所有依赖库版本兼容。编译和运行时使用的类版本应保持一致。
120 8
|
3月前
|
Java 编译器
如何避免在 Java 中出现 NoSuchElementException 异常
在Java中,`NoSuchElementException`通常发生在使用迭代器、枚举或流等遍历集合时,尝试访问不存在的元素。为了避免该异常,可以在访问前检查是否有下一个元素(如使用`hasNext()`方法),或者使用`Optional`类处理可能为空的情况。正确管理集合边界和条件判断是关键。
131 6
|
3月前
|
Java
Java异常捕捉处理和错误处理
Java异常捕捉处理和错误处理
88 1
|
3月前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
111 2
|
3月前
|
Java
如何在 Java 中处理“Broken Pipe”异常
在Java中处理“Broken Pipe”异常,通常发生在网络通信中,如Socket编程时。该异常表示写入操作的另一端已关闭连接。解决方法包括:检查网络连接、设置超时、使用try-catch捕获异常并进行重试或关闭资源。
174 5

热门文章

最新文章