java中的throw、throws和try catch浅析
今天在公司和同事聊天的时候,突然发现自己对java中的throw、throws和try catch的作用理解不够准确,在网上查了查,在此大概梳理一下。
throw用于抛出异常,例如
throw new NullPointerException();
就是抛出一个空指针异常。异常抛出后程序终止,除非用try catch包围起来,会在执行完catch和finally块中的代码后,继续执行之后的代码。这也是try catch的一个作用,即防止程序崩溃。
throws用于声明一个方法可能抛出某种异常,提醒调用者处理。例如
void test() throws NullPointerException {
}
意思是这个test方法可能会抛出空指针异常,调用者可能需要处理。为什么说可能需要处理,因为有些异常不处理也可通过编译,有些则不行。需要处理的异常为非运行时异常,如IOException、SQLException和自定义Exception;不需要处理的异常为运行时异常,如NullPointerException、IndexOutOfBoundsException等。前者必须try catch处理,否则无法通过编译,后者则不需要。
对于运行时异常,虽然编译器不强制要求处理,但是在不处理的情况下,异常会一直向上抛出,直至最上层为止。多线程最后会由Thread.run()抛出,单线程则由main()抛出,然后程序终止。
try catch就是处理异常的方式。需要明确的一点是,即便没有try catch(准确说是没有catch块中的e.printStackTrace()或别的打印异常信息语句),控制台还是会打印异常的堆栈信息。反而如果有try catch,但是catch块中没有打印异常信息的话,控制台中就会空空如也。这也是许多规范中严禁catch块中什么都不做的原因,至少应该在日志中记录异常信息,因为try catch相当于接管了java本身的异常处理,虽然这使得我们可以在发生异常时做很多事,但我们若是什么都不做的话,java也不会重新接管。
java中的throw、throws和try catch浅析的更多相关文章
- java异常处理之throw, throws,try和catch
转自 http://blog.csdn.net/zhouyong80/article/details/1907799 程序运行过程中可能会出现异常情况,比如被0除.对负数计算平方根等,还有可能会出现 ...
- Java中的throw和throws的差别
Java中的throw和throws的差别 1.throwkeyword用于方法体内部.而throwskeyword用于方法体部的方法声明部分: 2.throw用来抛出一个Throwable类型的异常 ...
- Java中的throw和throws的区别
Java中的throw和throws的区别 1.throw关键字用于方法体内部,而throws关键字用于方法体部的方法声明部分: 2.throw用来抛出一个Throwable类型的异常,而throws ...
- Java牛角尖【007】:Java中的Error能不能被Catch
Java牛角尖[007]:Java中的Error能不能被Catch 网上看到很多朋友说Java中Error是无法Catch到的,而Java中定义的Error类型又很难测试到,那就估且以为确是如此吧 ...
- java中的throw与throws的区别
什么时运行时异常?什么是非运行时异常? 通俗的讲: 运行时异常:就是编译通过,运行时就崩了,比如数组越界. 非运行时异常:就是编译不通过,这时就得必须去处理了.不然就没法运行了. 全面的讲: Thro ...
- java中的抛出异常throws与throw
throws与throw throws是方法可能抛出异常的声明.(用在声明方法时,表示该方法可能要抛出异常)语法:[(修饰符)](返回值类型)(方法名)([参数列表])[throws(异常类)]{.. ...
- 【Java】异常 —— throw, throws, try catch 相关内容
嗯……面试考到了这个,又是一个如无意外 那么接下来就总结吧 一.什么是异常 程序运行过程中发生的异常事件. RuntimeException通常是因为编程员因为疏忽没有检查而引起的错误. 二.Exce ...
- Java 中,throw 和 throws 有什么区别?
throw 用于抛出 java.lang.Throwable 类的一个实例化对象,意思是说你可以通 过关键字 throw 抛出一个 Error 或者 一个 Exception,如:throw new ...
- Java中String和byte[]间的转换浅析
Java语言中字符串类型和字节数组类型相互之间的转换经常发生,网上的分析及代码也比较多,本文将分析总结常规的byte[]和String间的转换以及十六进制String和byte[]间相互转换的原理及实 ...
随机推荐
- https://blog.csdn.net/doegoo/article/details/50749817
因为使用DiscuzX3.2进行系统的整合后,因为只是想在原J2EE的系统上增加论坛功能,而且J2EE中已经有一套用户的注册认证的体系,所以不需要在Discuz的系统中去注册以及登录功能,而是通过在J ...
- HttpWebRequest post 请求超时问题
在使用curl做POST的时候, 当要POST的数据大于1024字节的时候, curl并不会直接就发起POST请求, 而是会分为俩步, 发送一个请求, 包含一个Expect:100-continue, ...
- 第1章 Java语言概述--HelloWorld--环境搭建
SE学什么 第1章 Java语言概述 第2章 基本语法 第3章 数组 第4章 面向对象编程(上) 第5章 面向对象编程(中) 第6章 面向对象编程(下) 第7章 异常处理 第8章 枚举类&注解 ...
- Linux whereis命令详解
Linux whereis命令 Linux whereis命令用于查找文件. 该指令会在特定目录中查找符合条件的文件.这些文件应属于原始代码.二进制文件,或是帮助文件. 该指令只能用于查找二进制文件. ...
- xterm下字体设置
code ~/.Xdefaults xterm*locale: true xterm.utf8: true xterm*utf8Title: true ! 滚动条 !XTerm*scrollBar: ...
- PAT 乙级 1086 就不告诉你 (15 分)
1086 就不告诉你 (15 分) 做作业的时候,邻座的小盆友问你:“五乘以七等于多少?”你应该不失礼貌地围笑着告诉他:“五十三.”本题就要求你,对任何一对给定的正整数,倒着输出它们的乘积. 输入格式 ...
- 解决配置Windows Update失败,还原更改问题
问题描述 由于配置Windows Update失败,还原更改状态下无法正常关机.只能长按电源键关机后进入WinPE环境. 解决步骤 进入WinPE环境->选择Dism++->选择版本-&g ...
- 在HTML中限制input 输入框只能输入纯数字
限制 input 输入框只能输入纯数字 onkeyup = "value=value.replace(/[^\d]/g,'')" 使用 onkeyup 事件,有 bug ,那就是在 ...
- LeetCode contest-95[876,877,👁878]
876. Middle of the Linked List first submission # Definition for singly-linked list. # class ListNod ...
- Maven下CXF的wsdl2java生成客户端代码
<plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-codegen-plugin< ...