JAVA主动抛异常的几种方式及捕捉结果输出对比
测试代码:
/**
* 测试异常抛出及捕捉
*/
@Test
public void test() {
try {
this.testA();
} catch (Exception ex) {
System.out.println(CoreUtils.exceptionToString(ex));
}
}
/**
* 测试测试
*/
private void testA() {
try {
String a = null;
a.length();
} catch (Exception ex) {
//各种继续抛出异常的方式
}
}
1. throw ex
java.lang.NullPointerException com.differ.jackyun.jackyunassservice.service.others.HgwTest.testA(HgwTest.java:) com.differ.jackyun.jackyunassservice.service.others.HgwTest.test(HgwTest.java:) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:) java.lang.reflect.Method.invoke(Method.java:) org.junit.runners.model.FrameworkMethod$.runReflectiveCall(FrameworkMethod.java:) org.junit.) org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:) org.junit.) org.junit.) ......
2. throw new RuntimeException(ex)
java.lang.RuntimeException: java.lang.NullPointerException com.differ.jackyun.jackyunassservice.service.others.HgwTest.testA(HgwTest.java:) com.differ.jackyun.jackyunassservice.service.others.HgwTest.test(HgwTest.java:) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:) java.lang.reflect.Method.invoke(Method.java:) org.junit.runners.model.FrameworkMethod$.runReflectiveCall(FrameworkMethod.java:) org.junit.) org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:) org.junit.) org.junit.) ......
3. throw new RuntimeException("执行某个功能发生异常", ex)
java.lang.RuntimeException: 执行某个功能发生异常 com.differ.jackyun.jackyunassservice.service.others.HgwTest.testA(HgwTest.java:) com.differ.jackyun.jackyunassservice.service.others.HgwTest.test(HgwTest.java:) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:) java.lang.reflect.Method.invoke(Method.java:) org.junit.runners.model.FrameworkMethod$.runReflectiveCall(FrameworkMethod.java:) org.junit.) org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:) org.junit.) org.junit.) ......
4. throw new RuntimeException("执行某个功能发生异常:" + CoreUtils.exceptionToString(ex))
java.lang.RuntimeException: 执行某个功能发生异常:java.lang.NullPointerException com.differ.jackyun.jackyunassservice.service.others.HgwTest.testA(HgwTest.java:) com.differ.jackyun.jackyunassservice.service.others.HgwTest.test(HgwTest.java:) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:) java.lang.reflect.Method.invoke(Method.java:) org.junit.runners.model.FrameworkMethod$.runReflectiveCall(FrameworkMethod.java:) org.junit.) org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:) org.junit.) org.junit.) ......
总结:第3种方式抛出的异常(即:throw new RuntimeException("执行某个功能发生异常", ex)),会丢失关键的异常原因,故开发时慎用!!!
JAVA主动抛异常的几种方式及捕捉结果输出对比的更多相关文章
- ASP.NET中处理异常的几种方式
1.程序中使用try catch 对于预知会发生异常的代码段使用try catch主动捕获异常,适用于提示给用户或跳转到错误页面,或者通过其它方式处理异常(日志.通知等). int i = 10; i ...
- java动态获取WebService的两种方式(复杂参数类型)
java动态获取WebService的两种方式(复杂参数类型) 第一种: @Override public OrderSearchListRes searchOrderList(Order_Fligh ...
- C#不用union,而是有更好的方式实现 .net自定义错误页面实现 .net自定义错误页面实现升级篇 .net捕捉全局未处理异常的3种方式 一款很不错的FLASH时种插件 关于c#中委托使用小结 WEB网站常见受攻击方式及解决办法 判断URL是否存在 提升高并发量服务器性能解决思路
C#不用union,而是有更好的方式实现 用过C/C++的人都知道有个union,特别好用,似乎char数组到short,int,float等的转换无所不能,也确实是能,并且用起来十分方便.那C# ...
- Spring MVC处理异常的4种方式
http://blog.csdn.net/ufo2910628/article/details/40399539 http://my.oschina.net/CandyDesire/blog/3333 ...
- Java中HashMap遍历的两种方式
Java中HashMap遍历的两种方式 转]Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml 第一种: ...
- java读取XML文件的四种方式
java读取XML文件的四种方式 Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT& ...
- java中数组复制的两种方式
在java中数组复制有两种方式: 一:System.arraycopy(原数组,开始copy的下标,存放copy内容的数组,开始存放的下标,需要copy的长度); 这个方法需要先创建一个空的存放cop ...
- java 实现md5加密的三种方式与解密
java 实现md5加密的三种方式 CreateTime--2018年5月31日15点04分 Author:Marydon 一.解密 说明:截止文章发布,Java没有实现解密,但是已有网站可以免费 ...
- Java 读取 .properties 文件的几种方式
Java 读取 .properties 配置文件的几种方式 Java 开发中,需要将一些易变的配置参数放置再 XML 配置文件或者 properties 配置文件中.然而 XML 配置文件需要通过 ...
随机推荐
- opencv 图像旋转
理论 http://www.cnblogs.com/wangguchangqing/p/4045150.html 翻开任意一本图像处理的书,都会讲到图像的几何变换,这里面包括:仿射变换(affine ...
- 【RT-Thread笔记】IO设备模型及GPIO设备
RTT内核对象--设备 RT-Thread有多种内核对象,其中设备device就是其中一种. 内核继承关系图如下: 设备继承关系图如下: device对象对应的结构体如下: 其中,设备类型type有如 ...
- C#中的一些对话框问题处理
1. 对于打开文件对话框处理 #region 打开文件对话框 string StrPath; OpenFileDialog Flag = new OpenFileDialog(); Flag.Mult ...
- qt 界面去掉系统边框2.0版
之前的一版存在bug.如果将鼠标放移动到界面内某个可点击的widget上(如:QPushButton)上,按住鼠标左键不放,界面可能会出现界面非预期移动的问题. 那是因为当鼠标移动到可点击的widge ...
- C#下的时间测试(用于计算方法执行时间)
public class Timing { private TimeSpan m_StartTime; private TimeSpan duringTime; public Timing() //构 ...
- Lucene搜索/索引过程笔记
lucene索引文档过程: > 初始化IndexWriter > 构建Document > 调用IndexWriter.addDocument执行写入 > 初始化Documen ...
- Docker(一) - CentOS7中安装Docker - (视频教程)
Docker的使用越来越多,安装也相对简单.本文使用视频的方式展示在CentOS7系统中安装Docker,本文更适合于准备入门学习Docker的童靴. 以下视频,请带上耳机开始聆听 (双击全屏播放) ...
- Telegram APIs中文介绍
Telegram APIs 我们为开发者提供了两种API,Bot API (机器人API) 允许你很轻松地用Telegram的接口创建程序,Telegram API 和DLib 允许你创建定制自己的T ...
- day 36
目录 pymysql操作mysql 安装 连接 增 删 改 查 索引 为什么使用索引以及索引的作用 类比 索引的本质 索引的底层原理 索引的种类(重点) 主键索引 唯一索引 普通索引 索引的创建 主键 ...
- SpringBoot的学习二:整合Redis,JPA,Mybatis
Redis介绍: 是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API 特性: Redis 与其他 key - value 缓 ...