try...catch的前世今生

1975年, John Goodenough发表论文,提出异常处理的建议:

一是明确声明命令可能抛出何种异常;
二是需要有将可能出错的操作括起来的语句结构。

Communications of the ACM(美国计算机学会通讯)
John Goodenough后来成为卡耐基梅隆大学软件工程研究所的最高技术负责人


1983年,C++首次使用try...catch语句
|-加入try{...}catch{...}语句
|-使用throw 触发异常(原型是:PL/I语言的signal,但这个在标准库中是C语言的系统中断函数)
|-try不是必须的,只是为了提高可读性——C++设计者:斯特劳斯特卢普(Bjarne Stroustrup)


1990s初,MS在用C开发Windows NT3.1时,出现了finally的原型:

__try{
	__try{
	}__finally{
		...
	}
}__except(...){
	...
}

标准 C++ 没有类似 finally 这样的语法,斯特劳斯特卢普(Bjarne Stroustrup)表示:C++用~析构函数()比finally更优雅。

但Java、C#、D语言等不认可这种观点。

Java检查型异常

面前说了,John Goodenough的观点之一是:“明确声明命令可能抛出何种异常”

Java把异常分为三类:
1.搞不定的重大异常
2.搞的定的运行时异常
3.搞的定的其它异常(检查型异常)

Java的检查型异常太麻烦,不被接受,甚至被诟病。
C#设计者一方面承认这种做法很好,一方面希望有更好的方法。

posted @ 2019-04-05 19:56  虎老狮  阅读(237)  评论(0编辑  收藏  举报