文档章节

java异常如何抛出的?

DavorŠuke
 DavorŠuke
发布于 2015/06/13 17:53
字数 479
阅读 118
收藏 0

    这几天工作遇到Exception的问题。

    1:出现异常剩下代码如何运行?代码如下:

public class ExceptionTest {
	public static void main(String[] args) {
		ExceptionTest foo = new ExceptionTest();
		foo.dateFormat(null);
		System.out.println("step end");
	}
	
	public Date dateFormat(String str){
		Date d = new Date();
		try {
			d = new SimpleDateFormat("yyyy-MM-dd").parse(str);
		} catch (ParseException e) {
		//} catch (Exception e) {	
			e.printStackTrace();
			System.out.println("exception...");
		}
		System.out.println("method end");
		return d;
	}
}

    原本我的理解出现的打印顺序应该是: 打印“堆栈异常信息”->“exception...”->“method end”->"step end"

    但是实际结果如下,异常1:    

Exception in thread "main" java.lang.NullPointerException
	at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1380)
	at java.text.DateFormat.parse(DateFormat.java:355)
	at webtest.ExceptionTest.dateFormat(ExceptionTest.java:19)
	at webtest.ExceptionTest.main(ExceptionTest.java:11)

   于是我把捕获异常范围扩到最大,也就是catch(Exception e),打印结果如下,异常2:    

java.lang.NullPointerException
	at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1380)
	at java.text.DateFormat.parse(DateFormat.java:355)
	at webtest.ExceptionTest.dateFormat(ExceptionTest.java:17)
	at webtest.ExceptionTest.main(ExceptionTest.java:10)
exception...
method end
step end

 于是这个结果算是符合我的预期。但是我还是有点不明白“异常1"如果说传入null不属于ParseException异常的话,疑问:

(1)那这个异常被谁捕获了?

(2)我的理解打印顺序应该是:"堆栈异常信息"->"method end"->"step end",那又是谁中断了程序运行呢?


2,异常被抛出,调用方法如何处理?代码如下:

public class ExceptionTest {
	public static void main(String[] args) {
		ExceptionTest foo = new ExceptionTest();
		try {
			foo.dateFormat(null);
		} catch (Exception e) {
			e.printStackTrace();//堆栈异常信息2
			System.out.println("main method exception");
		}
		System.out.println("step end");
	}
	
	public Date dateFormat(String str) throws Exception{
		Date d = new Date();
		try {
			d = new SimpleDateFormat("yyyy-MM-dd").parse(str);
		//} catch (ParseException e) {
		} catch (Exception e) {	
			e.printStackTrace();//堆栈异常信息1
			System.out.println("exception...");
		}
		System.out.println("method end");
		return d;
	}
}

我原本预期打印结果:"堆栈异常信息1"->"exception..."->"method end"->我也不知道"堆栈异常信息2"会不会出现->""->"main method exception"->"step end".

实际打印结果:

java.lang.NullPointerException
	at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1380)
	at java.text.DateFormat.parse(DateFormat.java:355)
	at webtest.ExceptionTest.dateFormat(ExceptionTest.java:22)
	at webtest.ExceptionTest.main(ExceptionTest.java:11)
exception...
method end
step end

疑问:

(1)main方法为什么没有捕获异常?

© 著作权归作者所有

共有 人打赏支持
DavorŠuke
粉丝 1
博文 6
码字总数 3159
作品 0
东城
程序员
私信 提问
JVM参数OmitStackTraceInFastThrow导致的异常栈信息不见了

问题描述 某天收到生产环境error日志告警(对error.log监控,超过一定大小就会给开发人员发送告警短信)。但是tail查看最新的异常信息只有这些,好忧伤: 后来有个同事从error.log前面开始看...

哲别0
06/14
0
0
Java学习系列文章:说说Java中的异常

在正常的程序设计中,程序异常处理是非常关键和重要的一部分。试想一个项目中没有一个好的异常处理,这个项目会怎么样? 什么是异常 异常其实是程序上的错误,包括程序逻辑错误和系统错误。比...

java高级架构牛人
06/29
0
0
异常

标准异常的层次结构 Java标准异常的层次结构代表的分类绝对是一个败笔。因为所有的异常对象都是在运行时抛出的,没听说过有什么编译期异常。因此RuntimeException类代表的实际上是逻辑错误导...

长平狐
2012/08/28
145
0
Java的Exception和Error面试题10问10答

在Java核心知识的面试中,你总能碰到关于 处理Exception和Error的面试题。Exception处理是Java应用开发中一个非常重要的方面,也是编写强健而稳定的Java程序的关键,这自然使它成为面试题中的...

lwei
2013/10/10
18.2K
48
Java程序员从笨鸟到菜鸟之(十二)java异常处理机制

本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188 异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...el...

长平狐
2012/11/12
98
0

没有更多内容

加载失败,请刷新页面

加载更多

统一客服消息返回错误:{"errcode":43004,"errmsg":"require subscribe hint: [9Vv08633952]"}

公众号或者小程序发送客服消息错误: {"errcode":43004,"errmsg":"require subscribe hint: [9Vv08633952]"} 场景:小程序使用公众号的服务消息,推送消息,如果接收人没有关注公众号,就会出...

tianma3798
13分钟前
1
0
Rainbond V5.0 Beta公测公告

Rainbond支撑企业应用的开发、架构、交付和运维的全流程,通过“无侵入”架构无缝衔接各类企业应用,底层资源可以对接和管理IaaS、虚拟机和物理服务器 Rainbond V5.0即日起开启Beta版本公测,...

好雨云帮
31分钟前
2
0
Word Pattern(leetcode290)

Given a pattern and a string str, find if str follows the same pattern. Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empt......

woshixin
37分钟前
1
0
Kubernetes 1.13.1快速升级

Kubernetes 1.13.1已经正式发布,快速升级(含国内镜像快速下载链接)包括升级kubeadm/kubectl/kubelet版本、拉取镜像、升级Kubernetes集群三个主要步骤。注意Kubernetes 1.12.3版本暂时不支...

openthings
40分钟前
2
0
多线程的实现方式

多线程是指 一个程序运行时,产生或使用了不止一个线程。 线程的生命周期是怎么样的,下面这张图我们可以看出些端倪: 这章我们主要讨论多线程实现的方式,基础知识部分我们可以下来再恶补。...

搬砖大侠
52分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部