一、概述
throw和throws就是异常相关的关键字,在java中异常机制是一个非常重要的机制,我们需要重点掌握。
既然说到了异常,简单描述下异常机制很有必要,这也对后文的讲述提供前提。
二、Java异常机制
在Java中表示异常的接口是Exception,与其同一层次的还有一个Error接口,用于描述不可挽回的系统级错误,它们两个都继承自Throwable接口,这个接口是所有异常和错误的超接口。
在Java中只有Throwable的实例才能在虚拟机或者java代码中被抛出,一切想要抛出的异常都必须作为Throwable的子类。
异常又分为两种,一种是受检异常,另一种是未受检异常。
受检异常是Java内部定义的一系列异常类,它们都实现了Exception接口,这些异常必须被手动捕捉或者手动抛出,否则无法通过编译,属于强制处理异常,属于编译期异常。
未受检异常则是一些可以不进行捕捉的异常,这些异常一般是由运行时逻辑引发,这些异常可以不捕捉,也可以进行捕捉或抛出,如果未进行捕捉、抛出处理,那么一旦运行时引发了这些异常,那么会被JVM直接处理,它包括运行时异常和Error。
运行时异常是典型的未受检异常,Java内部为我们提供了一部分这类型异常,其中最常见的空指针异常就属此类。
其实正确的做法是尽可能的对异常进行捕捉处理。
三、throw作用
异常的抛出需要使用throw关键字,抛出的是一个异常对象,一般我们采用下面的方式进行抛出
throw new NullPointerException();
再结合try...catch语句,或者if语句进行组合使用,将可能的异常抛出。
有时候我们使用try...catch语句的catch块中加入throw语句,可以将一个受检异常转化为一个未受检异常。
四、throws作用
当我们没有条件在当前的方法中进行某个异常的处理时,可以在方法声明处抛出,在这里抛出异常将被调用者捕捉处理,或者再次抛出,多个异常可用逗号隔开。
public void test()throws NullPointerException,ParseException{}
以下内容来自(http://blog.csdn.net/luoweifu/article/details/10721543)
五、异常习惯
- 在写程序时,对可能会出现异常的部分通常要用try{...}catch{...}去捕捉它并对它进行处理;
- 用try{...}catch{...}捕捉了异常之后一定要对在catch{...}中对其进行处理,那怕是最简单的一句输出语句,或栈输入e.printStackTrace();
- 如果是捕捉IO输入输出流中的异常,一定要在try{...}catch{...}后加finally{...}把输入输出流关闭;
- 如果在函数体内用throw抛出了某种异常,最好要在函数名中加throws抛异常声明,然后交给调用它的上层函数进行处理。
参考:
来源:https://www.jianshu.com/u/c52a29db48b6
Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。
它的内容包括:
- 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
- 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
- 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
- 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
- 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
- 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
- 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
- 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw
目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:
想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询
同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。