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 配置文件需要通过 ...
随机推荐
- C# 学习笔记 多态(一)虚方法
在面对对象编程中,类的三大特性分别为封装,继承,多态.其中多态的具体实现,依赖于三个方法,也就是虚方法,抽象类和接口. 多态的具体作用是什么呢?或者说多态的存在有什么意义呢?多态的存在有效的降低了程序 ...
- 面试官都叫好的Synchronized底层实现,这工资开多少一个月?
本文为死磕Synchronized底层实现第三篇文章,内容为重量级锁实现. 本系列文章将对HotSpot的synchronized锁实现进行全面分析,内容包括偏向锁.轻量级锁.重量级锁的加锁.解锁.锁 ...
- Python【day 12】生成器和推导式
一.生成器和生成器函数1.生成器和生成器函数的概念 1.生成器的本质是迭代器 2.函数中包含yield,就是生成器函数 2.生成器函数的写法 def func(): a =10 yield 20 ge ...
- redis笔记2
分布式锁的实现 锁是用来解决什么问题的; 一个进程中的多个线程,多个线程并发访问同一个资源的时候,如何解决线程安全问题. 一个分布式架构系统中的两个模块同时去访问一个文件对文件进行读写操作 多个应用对 ...
- amanda安装
下载地址 http://www.amanda.org/download.php http://www.zmanda.com/download-amanda.php 编译安装 编译出错: error: ...
- 【已解决】git怎么合并多个分支到主干master
git支持很多种工作流程,我们采用的一般是这样,远程创建一个主分支,本地每人创建功能分支,日常工作流程如下: 去自己的工作分支$ git checkout workbranch 工作.... 提交工作 ...
- 02-MySQL 介绍和安装
MySQL 介绍和安装 1.什么是数据? 数据: 文字.图片.视频...人类认知的数据表现方式 计算机: 二进制.16进制的机器语言 基于数据的重要性和复杂性的不同,我们可能有不同的管理方式. 哪些数 ...
- javascript高级实战学习
学习目标: - 理解面向对象开发思想 - 掌握 JavaScript 面向对象开发相关模式 - 掌握在 JavaScript 中使用正则表达式 - typora-copy-images-to medi ...
- 团队冲刺--three
今天学习css,用css做登录界面. 昨天学习了爬虫了初步. 问题:爬虫很难.
- Getting Started with TensorFlow.js
使用TensorFlow.js,您不仅可以在浏览器中运行深度学习模型进行推理,你还能够训练它们.在这个简单的样例中,将展示一个相当于“Hello World”的示例. 1.引入TensorFlow.j ...