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[]间相互转换的原理及实 ...
随机推荐
- Codeforces1099F. Cookies【DP】【线段树】【贪心】【博弈】【沙比提(这是啥算法)】
LINK 题目大意 给你一棵树,每个节点上有一堆饼干 并且告诉你在每个节点上吃饼干吃一块需要多少时间 然后告诉你经过一条边的时间 总时间是T 两个人轮流进行,一个人向下选择子节点行走或者结束游戏并向上 ...
- jquery绑定回车事件
//回车事件绑定 $(".left-content").keyup(function(event){ var theEvent = event || window.event; v ...
- (32)forms组件(渲染自建规则:局部钩子函数和全局钩子函数)
要达成渲染自建规则 1.局部钩子函数(某个字段,自定意义规则,不如不能以sb开头,数据库已存在等) 2.全局钩子函数(校验两次密码是否一致) 3.使用css样式 register.html <! ...
- 学习笔记TF046:TensoFlow开发环境,Mac、Ubuntu/Linux、Windows,CPU版本、GPU版本
下载TensorFlow https://github.com/tensorflow/tensorflow/tree/v1.1.0 .Tags选择版本,下载解压. pip安装.pip,Python包管 ...
- react-router 父子路由同时要接收 params 的写法
<Route path="/profile/:companyId/:companyName" component={Profile} onEnter={(nextState, ...
- c#利用ApplicationContext类 同时启动双窗体的实现
Application类(位于System.Windows.Forms命名空间)公开了Run方法,可以调用该方法来调度应用程序进入消息循环.Run方法有三个重载 1.第一个重载版本不带任何参数,比较少 ...
- 对中断interrupt的理解
一.中断 线程的几种状态:新建.就绪.运行.阻塞.死亡.参考:线程的几种状态转换 线程的可运行状态并不代表线程一定在运行(runnable != running ) . 大家都知道:所有现代桌面和服务 ...
- Android入门(一) IDEA上创建Android应用之helloworld
Android入门(一) IDEA上创建Android应用之helloworld 首先看运行结果: 一.准备工作 下载安装IntelliJ IDEA :我这里用的是2018.2.7 下载安装Genym ...
- springMVC接收参数的区别form data与query string parameters与request payload
在AJAX请求中,我见过有三种form表单数据类型提交. 第一种:form data, 第二种:query string parameters,第三种:request payload. 在google ...
- Inception-v3的设计思路小结
一.网络更深.更宽带来的问题 参数太多,若训练数据集有限,容易过拟合: 网络越大计算复杂度越大,难以应用:(内存和计算资源) 网络越深,梯度越往后穿越容易消失,难以优化模型. 解决: 如何减少参数(且 ...