前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Java异常】什么是异常,Java中如何处理异常?

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

作者头像
.29.
发布2023-10-23 09:54:10
1710
发布2023-10-23 09:54:10
举报
文章被收录于专栏:个人技术博客
在这里插入图片描述
在这里插入图片描述
Java异常处理

1. 了解异常:

异常

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

作用

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

2. 异常处理

①JVM默认处理方式:

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

②手动处理方式(捕获异常):

代码语言:javascript
复制
//捕获异常 使用方式:
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

代码语言:javascript
复制
//使用:
public void 方法名()throws 异常类名1,异常类名2...{
    ...
}

注意:

  • 写在方法定义处,表示声明一个异常,告诉调用者使用此方法可能会有哪些异常。
  • 编译时异常必须要写,运行时异常可以不写。

2)throw

代码语言:javascript
复制
//使用
public void 方法(){
	throw new NullPointerException();
}

注意:

  • throw使用在方法内,会结束方法并手动抛出异常,使得后续代码不再被执行。

3. 自定义异常

自定义异常

步骤

①定义异常类

  • Exception作为异常类名的后缀,运行时异常类需继承RuntimeException,编译时异常需继承Exception

②写继承关系

③空参构造器

④带参构造器

代码语言:javascript
复制
//①异常类名后缀Exception
public class AgeOutOfBoundsException extends RuntimeException{ //②继承关系
    //③空参构造
    public AgeOutOfBoundsException(){}
    
    //④带参构造
    public AgeOutOfBoundsException(String message){
        super(message);
    }
}

遵循见名知意的原则,让控制台报错信息清晰明了,方便错误定位。


4. finally块

特性:finally块中的代码一定会被执行,除非JVM退出。

由于一定会被执行的特性,finally{}通常用作资源的释放。

代码语言:javascript
复制
//捕获异常 使用方式:
try{
    可能出现异常的代码;
}catch(异常类型 变量名){
    异常处理代码;
}finally{
    //一定会被执行的代码
}

注意:当三个块中都出现了return语句,首先记录try{}中return的结果,出现异常时,还会记录catch{}中return的结果,最后记录finallu{}块中的结果,最终返回的是finallu{}块中的结果

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java异常处理
  • 1. 了解异常:
  • 2. 异常处理
  • 3. 自定义异常
  • 4. finally块
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档