ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

异常

2021-01-17 18:02:51  阅读:139  来源: 互联网

标签:抛出 try 编译 catch 异常 throw


异常:

Throwable 类是 Java 语言中所有错误或异常的超类。

是什么?

程序在运行出现的问题,

异常的分类:

  • Throwable: 它是所有错误与异常的超类(祖宗类):

    • Error错误:必须修改代码,系统性问题

    • Exception:

      ​ RuntimeException:运行时异常

      ​ 非RuntimeException:编译时异常

如果不显式处理异常,最终会抛给jvm

成员方法

toString()
获取异常类名和异常信息,返回字符串。

printStackTrace()(常用)
获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。

有哪些捕获方式?异常怎么捕获?

标准格式:

try {
可能发生错误的代码
} catch (异常类名 异常对象名) {
对异常处理
} finally {
释放资源
}

finally 一定会执行,在异常发生之前执行。return也挡不住,System.exit(0)结束jvm

多个异常怎么捕获

try{}

catch(){}

catch(){}

catch(){}

一旦try catch有一个分支匹配成功,结束try catch

注意:

  • catch捕获的异常类名 不要写太宽泛的Exception。写具体的。
  • try代码块中某个位置产生了异常,那么try中的代码就不继续执行了
    • 也就是说try当中要么不产生异常,要么只会产生一个异常
  • catch中可以填入多个异常对象匹配,用符号 |,类型可写多个,引用只要一个。一般叫e。
  • try catch尽量简洁高效。
  • 异常类最常用的方法,e.printStackTrace() 打印和jvm报错一样的信息。包含异常的全限定类名,出错原因,出错行数
  • finally怎么都会执行。
  • 运行时异常,什么都不写自动抛出

捕获异常干什么

实际开发中,出现问题时经常的,但不是所有的问题都要让整个程序立即结束运行,这样会使用户的体验不好。通过异常捕获处理,让不影响全局的小错误,即使解决,或者暂时搁置,或者回馈给用户友好的信息。让整个程序继续运行。

抛出异常

throws

  • main方法抛出异常时不合理的。

  • throws(可能抛出) :在不需要处理的方法跑出去,在需要处理的地方让调用者处理。

  • 抛出编译时异常,会要求显式处理

  • 抛出运行时异常,不会要求显式处理

  • 当直接抛出Exception的时候,编译器会把它当作编译时异常处理,要求必须显式处理

  • 当同时抛出两个都是编译时异常且还有父子关系的时候,会强制要求显式处理父类异常,

方法的重写问题中异常问题:

子类重写方法,不能比父类中抛出更多异常。

具体情况:

当父类抛出编译时异常

  • 可以不抛出异常
  • 可以抛出一样的异常
  • 不能抛出不一样的编译时异常
  • 子类的重写方法可以抛出运行时异常

父类抛出运行时异常

  • 子类重写方法不能抛出Exception

  • 子类重写方法可以是让任何运行时的异常

  • 子类抛出编译时,多态调用时会对程序有影响。不能使编译时异常

    父类不抛出异常,子类重写方法不能抛出编译时异常。

在异常没有产生的时候,显式的抛出异常,是对调用者的警告。

throw

throw关键字一定会抛出一个异常对象

  • 编译时异常的throw 一般配合throws使用

两种异常的处理方式

从使用代码上:

运行时异常:一般出现了优化代码即可

编译时异常:出现了,就尽量try catch自己处理,或者抛出去。

throw和throws的区别

  1. 从使用位置上

    • 一个在方法声明中,一个在方法体内
  2. 从作用上

    • throws表示可能抛出的异常种类,throw时一定会抛出一个具体异常对象
  3. 从抛出个数上

    throws可以跟多个异常类名,用逗号隔开throw只能抛出一个确定的异常对象

  4. 从根本上
    throws表示抛出异常的一种可能性,并不一定会发生这些异常throw表示一定会抛出异常,只要是代码执行到这一句,一定会抛出

到底是该try 还是抛呢?

运行时异常:让异常出现,自己优化代码

编译时异常:try catch 处理。

自定义异常:

自定义异常步骤:

  1. 先写个异常类继承

继承RuntimeException :获得运行时异常

继承Exception:获得编译时异常

  1. 写一个有参构造方法,super(massage) 用来构造自定义异常的描述信息

  2. 在使用的地方抛出比如:

    // 只要i不是1就 丢出
    if (i != 1) {
        throw new NoOneException("不是1啊");
    }
    else{
        System.out.println("你是输入的时1");
    }
    

标签:抛出,try,编译,catch,异常,throw
来源: https://www.cnblogs.com/xiongzk/p/14289650.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有